hhhhhhhaa 发表于 2018-8-24 11:54:48

stm32f103 串口通讯 printf 输出中文的问题

使用stm32f103vct6的mcu用printf输出到串口usart2上笔记本用串口调试助手,怎么显示中文啊? 串口调试助手没法收到中文

tyhjrwx2011 发表于 2018-8-24 13:08:26

江苏方言 放到 东北也不能通用,虽然都是汉语

hhhhhhhaa 发表于 2018-8-24 11:58:55

怎么能把中文输出了啊:'(:'(:'(:'(:'(:'(:'(

skyi 发表于 2018-8-24 12:02:06

这个和中文编码相关的,单片机发送对应汉子的编码,一般应该是UTF-8,串口调试助手的显示区要支持UTF-8编码就可以中文显示了,Securt是支持显示中文的

hhhhhhhaa 发表于 2018-8-24 12:24:19

skyi 发表于 2018-8-24 12:02
这个和中文编码相关的,单片机发送对应汉子的编码,一般应该是UTF-8,串口调试助手的显示区要支持UTF-8编码 ...

有没有具体的示例啊

hhhhhhhaa 发表于 2018-8-24 12:49:03

hhhhhhhaa 发表于 2018-8-24 12:24
有没有具体的示例啊

看到没有啊

ls164013 发表于 2018-8-24 15:14:28

自己写一个printf输出函数,串口就可以打印中文了

ls164013 发表于 2018-8-24 15:17:36

本帖最后由 ls164013 于 2018-8-24 15:24 编辑

int fputc(int c, FILE *fp)
{
      while((USART1->SR&1<<6)==0);
      USART1->DR=c;
      return 0;
}
下面是打印函数
sprintf((char *)a,"温度:%.1f C    湿度%.1f ",t,h);
            Show_HZORZF(0,0,a);
         
          //while((ADC1->SR&1<<1)==0);
    sprintf((char *)str,"温度:%d 湿度: %d¿光照:%d ",ADC,ADC,ADC);
我这这样是可以串口输出汉字的

hhhhhhhaa 发表于 2018-8-24 15:24:18

ls164013 发表于 2018-8-24 15:17
int fputc(int c, FILE *fp)
{
        while((USART1->SR&1SR&1

你这的乱码是什么啊?我知道为什么不能输出汉字了,在keil里的中文是UTF-8的编码格式,一个汉字用16进制表示的话是三个举个例子吧
比如汉字“大”按照unicode转utf-8的编码规则,汉字使用3字节序列
所以套用三字节转换公式
0800 - FFFF
1110xxxx 10xxxxxx 10xxxxxx
其中用x代表的16位使用unicode相应的位来填充
0x5927转换为2进制0101 1001 0010 0111
填充到上面公式中的x中变成
11100101 10100100 10100111
用16进制表示为E5 A4 A7
而大的AIISC码用16进制表示的话就是B4F3
串口调试助手只能把AIISC码格式的16进制转换成汉字,不能把UTF-8类型的16进制汉字转换出来,所以才出现了乱码的现象

ls164013 发表于 2018-8-24 15:27:43

hhhhhhhaa 发表于 2018-8-24 15:24
你这的乱码是什么啊?我知道为什么不能输出汉字了,在keil里的中文是UTF-8的编码格式,一个汉字用16进制 ...

第一次用这个 复制粘贴 出了点意外:L
页: [1] 2 3
查看完整版本: stm32f103 串口通讯 printf 输出中文的问题