精华内容
下载资源
问答
  • 【STM32】串口通信出现乱码(使用官方标准库)

    千次阅读 多人点赞 2020-09-26 16:18:00
    解决stm32串口通信出现乱码,sscom串口调试助手,官方标准库。

    Author:AXYZdong 自动化专业 工科男
    有一点思考,有一点想法,有一点理性!
    定个小小目标,努力成为习惯!在最美的年华遇见更好的自己!
    CSDN@AXYZdong,CSDN首发,AXYZdong原创
    唯一博客更新的地址为: 👉 AXYZdong的博客 👈

    在这里插入图片描述


    • 开发板:stm32f407VET6
    • 开发环境:keil5 MDK
    • 为了使文章的内容完整,增加了一下原因的叙述,没有兴趣的话可以直接跳转到 问题解决

    • 问题产生

    最近学习了一下32的串口通信,串口配置还是很简单的,不过后面串口调试助手上面出现的乱码。很让人头疼。

    当然第一时间去百度寻求解决办法。

    百度搜索总结:

    • 在程序不出现问题的情况下,一定是外部晶振设置的问题。但是也要排查下面 👇 两个问题

    先排查这两个问题

    1.USB转串口的问题

    • 解决方法: USB转串口坏了的话,换一个好的就没事了。(ps:这个出现的概率比较小)

    2.波特率不同步的问题

    • 出现乱码,首先检查一下,串口助手的波特率是不是和程序设置的是一样的,如果一样的话出现乱码,参考下面的解决方法。

    插播一条反爬虫信息,读者可以忽略:


    在这里插入图片描述

    • 外部晶振对串口的影响

    stm32的串口使用的是外部高速时钟的时钟源

    串口外设是挂在APB总线上的,一般用于低速外设,它是AHB总线时钟分频所得。
    这样设计分频是为了降低低速外设的开关损耗。

    然而AHB总线的时钟又源自于高速时钟源。高速时钟源可以是高速内部时钟、高速外部时钟、高速内部或外部时钟PLL倍频所得。

    所以最终串口的波特率受高速时钟的影响。

    在这里插入图片描述

    • 问题解决

    首先找到自己板子上外部晶振,并确定它的大小。

    在这里插入图片描述

    ▲ 博主板子上晶振是8Mhz

    在官方标准库中,外部时钟频率配置默认 25MHz 的晶振。

    而我们需要将外部时钟频率配置成适合自己板子的

    找到 stm32f4xx.h ,在 .h 文件120行左右的地方,默认是这样的:

    /**
     * @brief In the following line adjust the value of External High Speed oscillator (HSE)
       used in your application 
       
       Tip: To avoid modifying this file each time you need to use different HSE, you
            can define the HSE value in your toolchain compiler preprocessor.
      */    
    #if !defined  (HSE_VALUE) 
      #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
      
    #endif /* HSE_VALUE */
    
    ▲ 默认25Mhz

    下面只需定义一下自己开发板的外部时钟源频率即可:(加个宏定义

    /**
     * @brief In the following line adjust the value of External High Speed oscillator (HSE)
       used in your application 
       
       Tip: To avoid modifying this file each time you need to use different HSE, you
            can define the HSE value in your toolchain compiler preprocessor.
      */    
    	
    #define HSE_VALUE   ((uint32_t)8000000)    // 定义自己开发版上的外部时钟源频率
    #if !defined  (HSE_VALUE) 
      #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
      
    #endif /* HSE_VALUE */
    

    附:如果串口助手没有收到任何东西,请检查连接 TXRX 端子的杜邦线是否松动。


    • 总结

    • 对于 stm32 的 F1 和 F4 等系列,如果出现串口通信出现乱码的问题,都可以尝试使用上述方法解决。

    • 自己开发板上的外部晶振要了解,如果某一总线的时钟来源于外部时钟源,自己使用的外设恰好挂靠在该总线上,利用官方标准库,一定要将 stm32f4xx.h 文件中相关配置加以修改。


    【参考文献】
    [1]:https://blog.csdn.net/qq_34179721/article/details/97427395?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-2

    「你可能还想看」系列文章:
    【STM32】点亮LED
    【STM32】GPIO输入—按键检测
    【STM32】0.96寸OLED显示屏(7针SPI协议)软件模拟SPI
    【STM32】1.44寸TFT液晶屏显示字符、汉字和图片
    【STM32】stm32f407 + DS18B20 碰出不一样的火花
    【STM32】5分钟了解STM32的串口通信
    【STM32】串口通信—用代码与芯片对话
    【STM32】EXTI—外部中断/事件控制器
    【STM32】TIM—基本定时器
    【STM32】PWM 输出 (标准库)

    【STM32】CubeMX+HAL 点亮LED
    【STM32】CubeMX+HAL 输出PWM

    【STM32】ST-LINK下载器下载后需复位,程序才运行的问题

    其他相关文章:
    【信号与系统】笔记合集,你确定不收藏吗?我已经收藏了
    我用50行代码居然「让天猫精灵把客厅灯开了」
    流程图在线绘制,快速、便捷、高效!


      本次的分享就到这里


    11

    好书不厌百回读,熟读自知其中意。将学习成为习惯,用知识改变命运,用博客见证成长,用行动证明努力。
    如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
    听说 👉 点赞 👈 的人运气不会太差,每一天都会元气满满呦!^ _ ^ ❤️ ❤️ ❤️
    码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了👉关注👈我哦!
    更多精彩内容请前往 AXYZdong的博客


    如果以上内容有任何错误或者不准确的地方,欢迎在下面👇留个言。或者你有更好的想法,欢迎一起交流学习~~~

    展开全文
  • 串口接收数据乱码

    千次阅读 2019-03-12 11:02:00
    1.检查波特率等设置是否正确 2.检查文字编码是否正确 3.打印字节流 ...6.https://blog.csdn.net/kabini/article/details/1601324 串口通信丢包处理 转载于:https://www.cnblogs.com/BelieveFish/p/1...

    1.检查波特率等设置是否正确

    2.检查文字编码是否正确

    3.打印字节流

    4.添加sleep线程(单片机还没发完,程序就接完了,所以解析错误)

    5.定义数据包

    6.https://blog.csdn.net/kabini/article/details/1601324 串口通信丢包处理

     

    转载于:https://www.cnblogs.com/BelieveFish/p/10515327.html

    展开全文
  • stm32 串口通信数据乱码

    千次阅读 2019-04-01 22:23:33
    小白最近在写stm32的标准库的串口通讯程序,本来很简单的串口通讯,却硬生生被上位机接收到乱码的问题折磨了好久,反复百度了好几次,始终没搜到正确解决方法,不过最后终于在...虽然最后问题和这位大佬不太一样,但是...

    小白最近在写stm32的标准库的串口通讯程序,本来很简单的串口通讯,却硬生生被上位机接收到乱码的问题折磨了好久,反复百度了好几次,始终没搜到正确解决方法,不过最后终于在http://www.eeworld.com.cn/mcu/2018/ic-news081240692.html这篇帖子上找到了答案。虽然最后问题和这位大佬不太一样,但是我也是它列出的几个情况之一——外部时钟问题。正如这位大佬所说,串口通信用的是外部时钟,而在stm32f10x.h/stm32f4xx.h中的HSE的设置值HSE_VALUE默认是25MHz。因为官方的开发板是用的25MHz,但是有些开发板用的是8MHz,所以这个地方没改的话就可能出现乱码。我把这里一改,就ojbk了
    HSE_VALUE

    展开全文
  • 因为通信过程中不定时,偶尔,随机出现传送数据乱码,困扰了我好多天,在各大论坛上也未找到解决办法,问了很多于是精简自己的程序框图,从最基本的串口读写入手,寻找问题,最终发现是因为自己把串口配置函数放在了...

    因为通信过程中不定时,偶尔,随机出现传送数据乱码,困扰了我好多天,在各大论坛上也未找到解决办法,问了很多于是精简自己的程序框图,从最基本的串口读写入手,寻找问题,发现是因为自己把串口配置函数放在了大循环while里面,而且等待时间设置不合理,导致每次循环时,又会重新去配置串口,造成了延时,导致后面的数据读取紊乱。

    因此,像我一样的初学者得注意了,有两种修改方法都是可以的:

    1.串口配置以及串口关闭最好是放在while循环外面,而且当串口配置放在外面时,接收到的数据显示速度明显加快了很多;

    由于生成应用程序后,LabVIEW界面自动处于运行状态,此时,我在运行的状态下,去配置串口号,波特率等信息(由于在大循环外面),就会导致命令发送不出去,得关闭运行状态,配置好参数后重新打开,这对于应用者来说很不方便,于是就又寻找一种解决办法:

    2.把串口配置放在大循环里面,设置合理的等待下一个整数倍毫秒函数。这样自动运行状态时,用户可以配置参数,比较方便。该函数功能:

    等待直至毫秒计时器的值为毫秒倍数中指定值的整数倍。该函数用于同步各操作。可在循环中调用该函数,控制循环执行的速率。但是,第一个循环周期可能很短。连线0至 毫秒倍数输入,可迫使当前线程放弃对CPU的控制。

    我方法一中设置的为,自以为已经够可以了,可是当后来对这个函数有了深入的了解过后,重新配置参数,发现在方法二中设置为时,不再出现收到消息乱码的问题。这就是我的实际经验,由于开始学,找了很久找不出问题所在,终于在一步步摸索中找到问题所在。遇到跟一样问题的学习者,可以参考我上述的方法试试,看看这能不能给你指引方向。


    展开全文
  • 本程序主要解决了串口接收数据的过程中出现乱码数据丢失的情况,特别适合于串口通信的初学者.希望能够对大家有所帮助
  • 1、查看你使用的USB转串口是3.3V的串口还是5V串口,如果发送方使用的是3.3V然后你使用的USB转串口是5V是可以收到数据的但收到的数据都是错误的 2、查看波特率、奇偶校验、停止位等是否设置正确。 3、如果是STM32,...
  • 项目需要使用android采集串口设备的数据,硬件使用CH34X芯片的“USB转UART”,当设备连接在计算机上时,读取数据是正常的。在计算机上使用两种方式进行了读取:方式一:使用Xshell方式二:自行编写代码:自己编写的...
  • stm32 F407串口通信出现乱码

    千次阅读 2017-05-08 11:03:18
    一直用正点原子的例程,后面开始在官网上下载库,完成自己写,到串口通信这里,发现写的东西跟例程一样,输出一直是乱码; 折腾半天是因为 晶振的问题。 我的板子HSE晶振为8M,分频是8;官网提供的25M,分频为25;...
  • 看的视频是野火的野火F407开发板-霸天虎视频-【中级篇】,使用的固件库也是野火的(问题就出在这),在做串口实验的时候,上位机接收到的数据显示总是乱码,但是使用正点原子的串口例程通信就是正常的。 void USART...
  • 在每次发送完数据之后, 检查串口是否发送完成,而不是检查串口数据寄存器是否为空, 特别是在循环发送的时候, 检查数据寄存器是否为空的话,很容易出现影子寄存器被覆盖的现象, 而造成乱码。 ...
  • 串口输出中文乱码

    千次阅读 2020-07-29 17:14:03
    最近在使用OpenMV,但是由于没有转接板和软排线来连接串口,不过手上有一块STM32F4的开发板,于是就想到将其作为一个转接,通过其接收OpenMV发送的数据,并将其转发到电脑上,结果串口助手一直输出乱码。 寻找问题...
  • 在操作过程中遇到表现:整体程序功能都没有问题,在调试过程中(不连Jlink)将串口直接连到电脑通过串口助手查看数据时显示乱码,此时只要把Jlink(SW)连上显示就正常了, 不是波特率问题。在乱码时不连Jlink,四孔...
  • 如标题所示,各种仪器仪表进行串口通讯,都可能遇到运行后发现串口数据出错,接收到的都是乱码,不知道是哪个环节出了问题,怎么办?乱码的原因通常有两个:1、波特率 数据位 校验位 不匹配,即我们的网络转串口设备...
  • 问题是这么发生的,负责驱动的同事上个月离职了,调试他留下来的驱动程序时发现串口数据收发都不对。 用示波器抓取波形,发现输入输出波形不一致,但是大体形状相同,后来排查下来怀疑是波特率不对 对照波特率计算...
  • 我在用C++做一个串口程序,用了MSComm控件,新手遇见了点问题,我用串口助手试了试我的程序,如果十六进制发送那么我接收的数据串口助手发送的数据不一致,出现乱码。我还想把我接收到的数据存储在txt文件中,...
  • 树莓派4b串口SSH登录 出现乱码

    千次阅读 2020-01-27 15:48:15
    前段时间收到树莓派4B再一次使用串口登录的过程中出现乱码,具体情况如下: 1.已经打开了串口串口登录功能 2.putty软件已经和树莓派连接上了(因为我按回车时候有返回字符,只是字符乱码了) 3.USB转TTL 设备...
  • 在保证串口能接收到稳定数据的情况下,串口输出乱码很可能是重串口设备的波特率与STM32设置的波特率不同导致,小编使用HC-08的蓝牙无线串口模块,以及CH340的USB转串口进行连接,实现电脑端与STM32完成无线串口传输 ...
  • 接收到的数据,一开始老是乱码。 [img=http://hi.csdn.net/attachment/201202/28/1370179_1330395622L012.jpg][/img] 为什么? 第二,我比特率之类的参数已经和显示器参数都设置好了。 第三。是不是因为乱码的...
  • 串口调试助手出现乱码

    万次阅读 2012-09-07 17:50:16
    首先用一个正确的程序试一下确保软件本身没有什么问题, ...自己今天下午调了一个串口发送字符串的程序,就是因为没有把波特率和VPB时钟频率匹配好,导致一直出现乱码 当 UART_BPS 设为9600,Fpclk 为(Fosc/4)*1
  • 发送端数据太快的问题 需要在发送端加延时;   用这个东西监控一下端口状况: ...我用过一个串口跟踪器一样的东西,但是这个东西也...用串口监控软件监控串口,在出现乱码的时候先确定下是发送的问题还是接收到问题
  • 解决串口接收中文乱码问题
  • 在用原子的F407探索者开发板时,由于是用的野火的工程模板,导致了一些串口发送乱码、定时器定时不准的问题。如果你也有类似的问题,这个或许可以帮到你。 原因 SYSCLK 系统时钟来源有三个方面:HSI,HSE 和 PLL。在...
  • 自己在开发调试过程中走了很多的坑,找了很多的文章,总结起来希望以后再碰到的时候能想起来,其中参考了大佬的相关回答:大佬的链接使用谷歌的串口调试工具有时会出现乱序和乱码以及缺数据的现象乱序问题有以下几种...
  • 使用nwjs平台 借助chrome api读取串口数据. nwjs版本:0.13.0或以上版本(及其它环境),如果不继续开发,本文件压缩包里的文件可直接拖入nwjs运行. 调试借助软件:vpsd(串口虚拟软件) 注意,本程序打开的商品为com3端口,...
  • 串口乱码

    2014-07-28 10:54:31
    1.USB转串口的问题 解决方法:我曾用一个12块钱的那种U转串,出现乱码,换一个好的就没事了 ...但是当波特率为 115200 时,解受到的数据出现乱码的现象! 真的不知道,原因出现在哪里! 希望高手们,大虾们
  • speed.c中的get_FCLK,get_PCLK等函数都修改好了,可是串口一直出现乱码。查看MPLLCON, CLKDIVN,寄存器的值都是正确,就是UBRDIV0不正确,源代码找了好久都找不到错来。这问题一直纠缠了好几天。后来发现是在get_...
  • 用stm32写了个串口程序 上位机发送一个数字 返回一个数字,可是返回的是些不认识的字符,波特率已经同步9608 数据停止位 等都是一样的,tx接rx 还是乱 换了3个串口调试助手都是一样的,有谁知道,谢谢解答

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,773
精华内容 1,909
关键字:

串口数据出现乱码