知道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搞定,串口通信显示正常。
版权声明:本文为csdn博主「aizaiyueye」的原创文章,遵循cc 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aizaiyueye/article/details/79049816


逻辑芯片输入的低电平有效和高电平有效
边海防监控解决方案
关于STM32配置中断和GPIO针脚问题
Mini LED背光显示器成本有望低于OLED
用于光声皮肤成像基于四维光谱-空间计算的光声显微技术
知道STM32串口通信乱码要怎么处理吗
关于基于FPGA的HDMI多模式显示模块的设计
患难见朋友,微软力挺高通骁龙810!
如何进行电线承受最大电流估算的计算详细方法和公式概述
强大微处理器助力3D内容风行
苹果拒绝Type C,或采用无线智能连接器接口或磁吸设计
为何称唱衰美国芯片“霸主”言论,还言之尚早
注资10亿美元!微软力求实现人工智能的终极梦想
镜子广告机将带来新科技的广告传播模式
博帝最新展示USB-C接口的PXD便携式SSD
贝启科技受邀参加“创响中国”OpenHarmony技术论坛并发表主题演讲
可以从哪一些方向来加快区块链落地的速度
边缘计算和边缘AI为何重要?
印度7000兆瓦核电厂正在建设中 计划未来十年内增加20000兆瓦的核电容量
智能机器人三大核心技术(二)