STM32串口通信乱码详细处理方法

STM32串口通信以及温度采集搞定,其中主要遇到STM32系列单片机时钟树的问题,串口通信遇到串口调试助手能够接收到数据但出现乱码现象,开始一直以为是串口配置和程序代码问题,因为是第一次上电在线调试STM32板子,后面主要查串口波特率配置和收发函数程序段,如下图:

波特率设置成115200没问题,试着降低波特率改成9600和4800但问题依旧没有解决,紧接着如下处理:


将重定向函数注释,单独写串口发送字节和字符串函数,依旧失败。最后锁定到系统时钟配置上,由于手上的STM32开发板改用了12M的晶振,根据单片机时钟树的理解和解读,一般采用外部时钟HSE,系统时钟配置成72M,8*9=72,,12*6=72,对于 SYSCLK、HCLK、PCLK2、PCLK1 这四个时钟的配置一般是:PCLK2 = HCLK = SYSCLK=PLLCLK = 72M,PCLK1=HCLK/2= 36M。UART1挂载在APB2总线,而PCLK2 = HCLK = SYSCLK=PLLCLK = 72M,


因此在system_stm32f10x.c文件中的setsysclockto72()函数中,(system_stm32f10x.c文件实现了 STM32的时钟配置,操作的是片上的 RCC这个外设统在上电之后,首选会执行由汇编编写的启动文件,启动文件中的复位函数中调用systemInit 函数就在这个文件里面定义。systemInit 函数默认调用setsysclockto72()配置系统时钟,系统的时钟就被初始化成 72M。这样便将系统时钟配置成了72M,否则为12*9=108M。但测试运行仍然接收到乱码。

继续找问题所在,查看 在stm32f10x.h里,有下面这段代码,


原因是库使用默认8MHz晶振,可以通过宏使用25MHz或12M晶振。具体定义在stm32f10x.h文件中,HSE_VALUE,一开始定义成了8000000,改成12000000搞定,串口通信显示正常。

### 解决STM32串口打印出现乱码方法 对于STM32串口通信过程中遇到的乱码问题,在使用STM32CubeMX 6.13.0 和 STM32Cube_FW_H7_V1.12.0版本时,可以采取如下措施来排查并解决问题[^1]。 #### 配置波特率一致性 确保发送端接收端之间的波特率设置完全一致。任何一方配置错误都会导致数据传输失真,进而造成显示异常。建议先确认PC终端软件(如Tera Term, SecureCRT等)以及MCU内部USART初始化函数里的参数设定是否匹配。 #### 检查硬件连接可靠性 仔细核查线路连接情况,特别是TX/RX引脚间的配对关系及其物理接触状态良好否;另外还需关注电源供电稳定性,因为电压波动也可能影响到正常通讯质量。 #### 调整字符编码方式 如果应用程序涉及多语言文字处理,则需特别留意所选编解码方案能否兼容目标平台特性。例如当向UART接口写入含有中文字符的数据流之前,应事先转换成适合嵌入式环境解析的形式,像UTF-8格式就较为常用。 ```c // 示例代码片段:修改HAL库默认字符串输出宏定义实现自定义编码支持 #define HAL_UART_Transmit_CustomStr(huart,buf,size) \ do{\ char *str=(char*)buf;\ while(*str){\ uint8_t utf8_char[4]={0};\ int len=utf8_encode((unsigned char*)&utf8_char,*str);\ HAL_UART_Transmit(huart,(uint8_t *)utf8_char,len,100);\ str++;\ }\ }while(0) void uart_send_string(const char* string){ HAL_UART_Transmit_CustomStr(&huart1,(uint8_t*)string,strlen(string)); } ``` 上述C语言程序展示了如何基于标准HAL驱动扩展功能以适应更复杂的文本序列传送需求。这里引入了一个辅助性的`utf8_encode()`函数负责完成单个ASCII或Unicode符号至相应字节序列的映射操作。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值