(分享)在Cube的Hal库做IO口的GPIO组处理方法!一次操作读写多IO端口方法

软件教程admvip73 回复了问题 • 12 人关注 • 10 个回复 • 6567 次浏览 • 2018-04-23 17:04 • 来自相关话题

关于cube配置编码器的问题,求指教

回复

问题困惑Ekko 回复了问题 • 1 人关注 • 1 个回复 • 122 次浏览 • 2018-04-21 15:44 • 来自相关话题

虚拟串口问题

回复

问题困惑tototm 发起了问题 • 1 人关注 • 0 个回复 • 114 次浏览 • 2018-04-21 13:13 • 来自相关话题

EXTI 外部中斷疑問

回复

问题困惑askod 发起了问题 • 1 人关注 • 0 个回复 • 117 次浏览 • 2018-04-20 12:00 • 来自相关话题

stm32cube是不是不支持位带输入

问题困惑mailshichao 回复了问题 • 4 人关注 • 3 个回复 • 158 次浏览 • 2018-04-20 09:02 • 来自相关话题

STM32F407VE 的DAC最大输出电压

回复

问题困惑mailshichao 回复了问题 • 1 人关注 • 1 个回复 • 106 次浏览 • 2018-04-20 09:00 • 来自相关话题

Hid通信的几个疑问及自己的见解

问题困惑张全蛋 回复了问题 • 2 人关注 • 2 个回复 • 2383 次浏览 • 2018-04-19 14:59 • 来自相关话题

emwin显示汉字

经验分享等。。。待 发表了文章 • 0 个评论 • 85 次浏览 • 2018-04-19 13:49 • 来自相关话题

我们一般用keil编程是,软件的编码模式是GB2312模式,此时emwin显示汉字会显示乱码,无法正常使用。多次实验后,有两种方式可以解决这个问题。第一种:emwin汉字解码用的是UTF-8模式,而我们常用的编码模式是GB2312,二者之间无法使用固定的公式转换,也就是没有直接联系。此时要显示汉字,需要做一个列表,将UTF-8和GB2312两种编码联系起来。    若是将所有的常用汉字列表都写入程序,这个不太现实(文件挺大的),下面是实现方法uint16_t das[23335][2]=//部分列表
{
{0x00,0x0000},
{0x01,0x0001},
{0x02,0x0002},
{0x03,0x0003},
{0x04,0x0004},
{0x05,0x0005},
{0x06,0x0006},
{0x07,0x0007},
{0x08,0x0008},
};
//转换程序
uint16_t Get_GB2312(char *str)
{
uint16_t a=0;
a=(uint8_t)(*str);
a<<=8;
a|=(uint8_t)(*(str+1));
return a;
}

uint16_t GET(char *ds)
{
uint32_t dsa=0;
if(((uint8_t)(*ds))<0x80)
{
return  (uint8_t)(*ds);
}
else  //if (((*ds) &0xf0) && ((*(ds + 1)) &0xf0))
{
dsa=Get_GB2312(ds);
for (i = 0; i < 23335; i++)
{
if (das[i][0] == dsa)
{
return das[i][1];
}
}
}
return 0;
}
const char* GET_UTF1(char *ds)
{

uint8_t *bi1t;
uint16_t dsadd=0;
if(((uint8_t)(*ds))<0x80)
{
return  ds;
}
else  //if (((*ds) &0xf0) && ((*(ds + 1)) &0xf0))
{
dsadd=GET(ds);

bi1t[0] = 0xe0 | ((dsadd >> 12)&0x0f);  //高四位填入1110xxxx 10yyyyyy 10zzzzzz中的xxxx  

bi1t[1] = 0x80 | ((dsadd >> 6) & 0x3f);  //中间6位填入1110xxxx 10yyyyyy 10zzzzzz中的yyyyyy

bi1t[2] = 0x80 | (dsadd & 0x3f);  //低6位填入1110xxxx 10yyyyyy 10zzzzzz中的zzzzzz  
return bi1t;
}
}     再就是只将自己需要的汉字列出来,这样有一个缺点,无法现实任意汉字
 typFNT_GB24 Fontff[100]=
{
{"不","\xe4\xb8\x8d"},
{"同","\xe5\x90\x8c"},
{"期","\xe6\x9c\x9f"},
{"时","\xe6\x97\xb6"},
{"间","\xe9\x97\xb4"},
{"储","\xe5\x82\xa8"},
{"能","\xe8\x83\xbd"},
{"机","\xe6\x9c\xba"},
{"设","\xe8\xae\xbe"},
{"置","\xe7\xbd\xae"},
{"最","\xe6\x9c\x80"},
{"大","\xe5\xa4\xa7"},
{"行","\xe8\xa1\x8c"},
{"程","\xe7\xa8\x8b"},
{"合","\xe5\x90\x88"},
{"分","\xe5\x88\x86"},
{"闸","\xe9\x97\xb8"},
{"电","\xe7\x94\xb5"},
{"流","\xe6\xb5\x81"},
};
uint16_t SearchhzIndex(uint8_t  lo, uint8_t  hi) //查找汉字编码位置
{
    uint16_t i = 0;

for (i = 0; i < sizeof(Fontff); i++)
{
if ((Fontff[i].Index[0] == lo) && (Fontff[i].Index[1] == hi))
{
return i;
}
}
    return 0;
}第二种:将软件编码模式改成UTF-8,这样有一个坏处,写程序的时候会出现莫名其妙的问题 查看全部

我们一般用keil编程是,软件的编码模式是GB2312模式,此时emwin显示汉字会显示乱码,无法正常使用。多次实验后,有两种方式可以解决这个问题。

第一种:emwin汉字解码用的是UTF-8模式,而我们常用的编码模式是GB2312,二者之间无法使用固定的公式转换,也就是没有直接联系。此时要显示汉字,需要做一个列表,将UTF-8和GB2312两种编码联系起来。

    若是将所有的常用汉字列表都写入程序,这个不太现实(文件挺大的),下面是实现方法

uint16_t das[23335][2]=//部分列表
{
{0x00,0x0000},
{0x01,0x0001},
{0x02,0x0002},
{0x03,0x0003},
{0x04,0x0004},
{0x05,0x0005},
{0x06,0x0006},
{0x07,0x0007},
{0x08,0x0008},
};
//转换程序
uint16_t Get_GB2312(char *str)
{
uint16_t a=0;
a=(uint8_t)(*str);
a<<=8;
a|=(uint8_t)(*(str+1));
return a;
}

uint16_t GET(char *ds)
{
uint32_t dsa=0;
if(((uint8_t)(*ds))<0x80)
{
return  (uint8_t)(*ds);
}
else  //if (((*ds) &0xf0) && ((*(ds + 1)) &0xf0))
{
dsa=Get_GB2312(ds);
for (i = 0; i < 23335; i++)
{
if (das[i][0] == dsa)
{
return das[i][1];
}
}
}
return 0;
}
const char* GET_UTF1(char *ds)
{

uint8_t *bi1t;
uint16_t dsadd=0;
if(((uint8_t)(*ds))<0x80)
{
return  ds;
}
else  //if (((*ds) &0xf0) && ((*(ds + 1)) &0xf0))
{
dsadd=GET(ds);

bi1t[0] = 0xe0 | ((dsadd >> 12)&0x0f);  //高四位填入1110xxxx 10yyyyyy 10zzzzzz中的xxxx  

bi1t[1] = 0x80 | ((dsadd >> 6) & 0x3f);  //中间6位填入1110xxxx 10yyyyyy 10zzzzzz中的yyyyyy

bi1t[2] = 0x80 | (dsadd & 0x3f);  //低6位填入1110xxxx 10yyyyyy 10zzzzzz中的zzzzzz  
return bi1t;
}
}

     再就是只将自己需要的汉字列出来,这样有一个缺点,无法现实任意汉字


 typFNT_GB24 Fontff[100]=
{
{"不","\xe4\xb8\x8d"},
{"同","\xe5\x90\x8c"},
{"期","\xe6\x9c\x9f"},
{"时","\xe6\x97\xb6"},
{"间","\xe9\x97\xb4"},
{"储","\xe5\x82\xa8"},
{"能","\xe8\x83\xbd"},
{"机","\xe6\x9c\xba"},
{"设","\xe8\xae\xbe"},
{"置","\xe7\xbd\xae"},
{"最","\xe6\x9c\x80"},
{"大","\xe5\xa4\xa7"},
{"行","\xe8\xa1\x8c"},
{"程","\xe7\xa8\x8b"},
{"合","\xe5\x90\x88"},
{"分","\xe5\x88\x86"},
{"闸","\xe9\x97\xb8"},
{"电","\xe7\x94\xb5"},
{"流","\xe6\xb5\x81"},
};
uint16_t SearchhzIndex(uint8_t  lo, uint8_t  hi) //查找汉字编码位置
{
    uint16_t i = 0;

for (i = 0; i < sizeof(Fontff); i++)
{
if ((Fontff[i].Index[0] == lo) && (Fontff[i].Index[1] == hi))
{
return i;
}
}
    return 0;
}

第二种:将软件编码模式改成UTF-8,这样有一个坏处,写程序的时候会

出现莫名其妙的问题


关于SD-Fatfs

经验分享等。。。待 发表了文章 • 3 个评论 • 126 次浏览 • 2018-04-19 13:27 • 来自相关话题

cubemx更新后,关于SD-Fatfs的生成代码无法直接使用,需要加两个回调函数才能正常使用void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd)
{
  BSP_SD_WriteCpltCallback();
}
void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd)
{
  BSP_SD_ReadCpltCallback();
} 查看全部

cubemx更新后,关于SD-Fatfs的生成代码无法直接使用,需要加两个回调函数才能正常使用

void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd)
{
  BSP_SD_WriteCpltCallback();
}
void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd)
{
  BSP_SD_ReadCpltCallback();
}


有基于HAL库的USB虚拟串口+U盘的复合设备代码吗?

问题困惑洋洋-R&D 回复了问题 • 3 人关注 • 1 个回复 • 1148 次浏览 • 2018-04-18 17:53 • 来自相关话题

SW4STM32下使用printf发送消息,将消息用串口助手接收

问题困惑wansaiyon 回复了问题 • 4 人关注 • 8 个回复 • 1406 次浏览 • 2018-04-18 15:59 • 来自相关话题

STM32cube 103C8的FLASH模拟eeprom设置问题?

问题困惑admvip73 回复了问题 • 2 人关注 • 1 个回复 • 119 次浏览 • 2018-04-17 17:18 • 来自相关话题

STM32446E-EVAL 测试例程(USB_Device\AUDIO_Standalone )问题

回复

新手交流匿名用户 发起了问题 • 1 人关注 • 0 个回复 • 81 次浏览 • 2018-04-15 22:26 • 来自相关话题

关于定时器输入捕获编写中断函数的问题若干。(问题比较基础,还望大牛们指教)

回复

问题困惑小张 发起了问题 • 1 人关注 • 0 个回复 • 108 次浏览 • 2018-04-14 00:08 • 来自相关话题

请问有STM32F103的CAN的通讯程序没?求大神帮助

问题困惑Ekko 回复了问题 • 4 人关注 • 3 个回复 • 911 次浏览 • 2018-04-13 20:26 • 来自相关话题