开启辅助访问 切换到窄版

打印 上一主题 下一主题

STM32串口通信数据乱码的相关问题

[复制链接]
作者:汇源A原阳 
版块:
MCU单片机技术 stm 发布时间:2020-1-16 19:15:00
13870
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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搞定,串口通信显示正常。



点“阅读原文”了解更多

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表