0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

知道STM32串口通信乱码要怎么处理吗

MCU开发加油站 来源:CSDN技术社区 作者:aizaiyueye 2021-06-16 15:35 次阅读

STM32串口通信以及温度采集搞定,其中主要遇到STM32系列单片机时钟树的问题,串口通信遇到串口调试助手能够接收到数据但出现乱码现象。

开始一直以为是串口配置和程序代码问题,因为是第一次上电在线调试STM32板子,后面主要查串口波特率配置和收发函数程序段,如下图:

c66b74cc-cb60-11eb-9e57-12bb97331649.png

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

c6a06ae2-cb60-11eb-9e57-12bb97331649.png

将重定向函数注释,单独写串口发送字节和字符串函数,依旧失败。最后锁定到系统时钟配置上,由于手上的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,

c6e61736-cb60-11eb-9e57-12bb97331649.png

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

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

c782c3d8-cb60-11eb-9e57-12bb97331649.png

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

版权声明:本文为CSDN博主「aizaiyueye」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/aizaiyueye/article/details/79049816

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5997

    文章

    43948

    浏览量

    620547
  • STM32
    +关注

    关注

    2239

    文章

    10665

    浏览量

    348510
  • 串口通信
    +关注

    关注

    32

    文章

    1577

    浏览量

    54850
  • 函数
    +关注

    关注

    3

    文章

    3859

    浏览量

    61297

原文标题:STM32串口通信乱码详细处理方法

文章出处:【微信号:mcugeek,微信公众号:MCU开发加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32F030F4串口空闲中断接收不定长数据,发生中断后不知道如何计算接收到的字节数?

    我用STM32F030F4串口空闲中断接收不定长数据,发生中断后不知道怎样计算接收到的字节数。
    发表于 04-03 07:12

    STM32F407VET6串口5的三个引脚TX RX GND跟STM32F103VET6串口5的RX TX GND三个引脚相连后烧毁的原因?

    我把STM32F407VET6芯片的串口5的三个引脚TX RX GND分别跟STM32F103VET6串口5的RX TX GND 三个引脚直接相连后!上电103芯片发烫,烧毁!不
    发表于 03-26 08:03

    STM32G031k8t6串口发送为什么会进入硬件中断?

    STM32G031k8t6串口发送进入硬件中断
    发表于 03-13 07:59

    stm32L152RCDISCOVER进行串口通信实验接收乱码怎么解决?

    使用stm32L152RCDISCOVER开发板进行串口通信实验为什么接收乱码
    发表于 03-11 07:56

    嵌入式操作教程:2-12 RS232串口通信实验(查询方式)

    一、实验目的 了解UART 的功能和结构,学习RS232串口通信协议,并实现通过查询方式进行 RS232 串口通信收发。 二、实验原理 RS232 RS232接口是现在主流的串行
    发表于 02-07 14:37

    stm32虚拟串口接收的数据处理

    STM32中使用虚拟串口时,我们需要处理接收的数据。接收到的数据可能是来自其他设备的传感器数据、用户输入的命令或其他任何信息。在本篇文章中,我将详细介绍STM32虚拟
    的头像 发表于 12-20 11:22 764次阅读

    STM32里的串口通信

    STM32里的串口通信STM32里,串口通信是USART,
    的头像 发表于 11-10 15:58 1380次阅读
    <b class='flag-5'>STM32</b>里的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    请问串口通信的误码率大概在多少的时候就会产生乱码

    串口通信的误码率大概在百分之多少的时候就会产生乱码?我之前大概是百分之十几,不知道有没有具体的数值?
    发表于 10-26 08:07

    STM32串口通信简明知识

    STM32串口通信简明知识
    的头像 发表于 10-25 15:48 758次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>简明知识

    ESP8266串口发送AT指令无效怎么处理

    ESP8266串口发送AT指令无效,串口发啥 它回啥。驱动和接线都没问题。怎么处理
    发表于 10-19 07:39

    USB转串口线或者PCMCIA转RS232串口卡这两者哪种可以支持双向通信

    USB转串口线 或者 PCMCIA转RS232串口卡 这两者那种可以支持双向通信
    发表于 10-18 06:32

    STM32单片机如何处理QT上位机串口中发过来的数据?

    STM32单片机如何处理QT上位机串口中发过来的数据?  首先,在使用STM32单片机处理QT上位机串口
    的头像 发表于 09-14 14:22 1657次阅读

    为什么stm32h750VBT6串口通信接收不到自己发送过去的数据?

    请问有没有知道stm32h750VBT6为什么串口通信接受不到自己发送过去的数据?数据溢出会有影响吗?
    发表于 08-04 11:11

    N76E003串口接收字符乱码是什么原因?

    N76E003串口接收字符部分是乱码,偶尔正常。 发送是正常的,仅接收不正常,波特率是115200
    发表于 06-14 12:35

    Qt实现串口通信

    要实现串口通信,需要知道串口通信需要的信息
    的头像 发表于 04-23 17:34 3182次阅读
    Qt实现<b class='flag-5'>串口</b><b class='flag-5'>通信</b>