STM32/STM8技术william hill官网
直播中

feier567

8年用户 137经验值
擅长:控制/MCU
私信 关注
[问答]

STM32用printf串口输出中文乱码,要怎么解决?

波特率没设置错,据说是keil的编码问题,但设置成GB2312还是乱码。main.c文件之前在写注释的时候乱码,用文本编辑器从ANSI转成UTF-8了,现在串口输出中文又乱码。文本编辑器又转不了GB2312。

回帖(8)

人中狼

2017-5-26 21:51:02

最佳答案

试试这个,打开你keil的EDIT下拉菜单,最下面有一个configuration,点击它,在editor选项里有一个encoding,这里选择   GB2312
举报

吴少我

2017-5-26 23:41:31
809496325QQ替你分忧
举报

TYS

2017-5-27 08:49:19
没理解了是printf输出的是乱码  还是.c文件中的中文是乱码
   要设置成2312编码之后才能复制粘贴文本到keil中不出现乱码 已经乱的我也想转过来
      正常使用printf要么勾选 usemicrolib选项  要么自己比如说  网上提供的方法   自己做个函数然后再用printf
举报

feier567

2017-5-29 22:35:21
引用: 1030402679 发表于 2017-5-27 08:49
没理解了是printf输出的是乱码  还是.c文件中的中文是乱码
   要设置成2312编码之后才能复制粘贴文本到keil中不出现乱码 已经乱的我也想转过来
      正常使用printf要么勾选 usemicrolib选项  要么自己比如说  网上提供的方法   自己做个函数然后再用printf ...

之前是.c文件的中文乱码,我把文件编码转成了UTF-8解决了。但现在用到printf,输出的中文是乱码。
举报

TYS

2017-5-30 18:58:55
引用: feier567 发表于 2017-5-29 22:35
之前是.c文件的中文乱码,我把文件编码转成了UTF-8解决了。但现在用到printf,输出的中文是乱码。

我用printf 可以输出中文啊   貌似就是这个重定向文件 貌似也得勾选microlib 需不需勾选不太了解
//Printf重定向文件!
int fputc(int ch, FILE *f)
{

USART_SendData(USART1, (unsigned char) ch);// USART1 ???? USART2 ?

while (!(USART1->SR & USART_FLAG_TXE));

return (ch);

}
void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data)  
{  
    USART_SendData(USARTx, Data);  
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){}  
}  
void UART_PutStr (USART_TypeDef* USARTx, uint8_t *str)   
{   
    while (0 != *str)   
    {   
        UART_PutChar(USARTx, *str);   
        str++;   
    }   
}
举报

feier567

2017-5-30 19:55:04
引用: 1030402679 发表于 2017-5-30 18:58
我用printf 可以输出中文啊   貌似就是这个重定向文件 貌似也得勾选microlib 需不需勾选不太了解
//Printf重定向文件!
int fputc(int ch, FILE *f)

谢谢,我弄好了。printf重新定向没问题。就是c文件编码问题,应该把c文件编码转成ANSI,然后编辑器设置成GB2312,这样中文注释和printf输出中文都正常了
举报

王书成

2017-8-30 10:42:02
引用: feier567 发表于 2017-5-30 19:55
谢谢,我弄好了。printf重新定向没问题。就是c文件编码问题,应该把c文件编码转成ANSI,然后编辑器设置成GB2312,这样中文注释和printf输出中文都正常了

能教教我怎么弄吗?我也出现这种问题
举报

更多回帖

发帖
×
20
完善资料,
赚取积分