GD32 串口接受异常的几个原因

news/2024/6/30 2:46:52 标签: 单片机, 嵌入式硬件, stm32

前面我们介绍过GD32 485发送时出现异常的最常见原因,有小伙伴反馈想要知道GD32 串口接受异常的可能原因,今天我们就来安排。

一、波特率异常导致收发出错

我们知道,串口是异步通讯接口,通讯双方或者多方都需要工作在相同波特率下,如果波特率不对,则发送和接收都会异常。通常引起波特率异常的原因有以下几种:

  1. 外部晶振频率设置错误

GD32 固件库中,波特率的运算是需要去获取挂载这个串口的内部总线的频率

而获取总线频率的的函数中需要用到HXTAL_VALUE这个值,即外部晶振的实际频率。

GD32库中这个值默认是8M或25M,而有的小伙伴在用其他频率的晶振时,虽然根据实际频率修改了配置主频的函数,但没将HXTAL_VALUE这个值修改为实际值,就会导致配置出来的波特率和预想不符,从而导致波特率异常。

  1. 晶振频偏

如果外部和内部晶振出现频偏,也会导致波特率频偏,这个很好理解,那么频偏多少会出现异常呢?根据实际测试和经验,晶振出现2%的频偏,就会导致串口异常。如果使用的外部晶振,可以直接测量晶振的波形:

如果是用的内部晶振,可以通过PA8口输出内部晶振频率,再测量PA8口波形即可(如何使用PA8输出内部频率,后面也会出教程哦)。至于为什么超过2%就出现异常,小伙伴们可以自己思考下哦。

二、接受过载

当串口接收线上数据量较大,而软件由于一些原因比如需要处理更高优先级的任务时,就可能会发生数据寄存器和移位寄存器中的数据都还没有被读走的情况下,又接收到新的数据,此时串口发生接收过载。

串口状态寄存器中的ORERR位将会置“1”,新的数据也将不会被接收到MCU中,从而导致数据丢失。

该问题的解决办法:

(1)使用中断进行数据接收,且适当提高中断优先级,同时需要打开接收过载中断,当发送过载时表示有数据丢失,可以对这一帧数据做算法处理;

(2)使用DMA接受数据,因为DMA不需要CPU参与,故一般情况下不会出现接收过载。

三、接收的数据起始位不标准

我们知道,串口每个byte的数据都有一个起始位,占一个bit时间,如果由于一些原因导致对方发过来的数据起始位过短的话,MCU就无法识别到这个起始位,从而这个byte的数据就不会被接收。小编就见过因为加了隔离芯片导致起始位变短,而传输的第一个数据bit位变长,虽然这个byte的数据时间是符合波特率的,但由于起始位不标准,也将导致接收异常。

实际上这个问题只会在GD部分芯片上出现,比如GD32F405/407/450,这是因为这几颗芯片串口起始位的检测比较严苛,而GD32有的型号做了起始位检测优化,比如GD32F30x、F425/427/470系列,就不会出现这样的问题。

四、干扰

串口的发送和接收,实际上就是一串波形,当波形收到干扰时,也会出现通信异常。这种情况下,小伙伴们就要去通过硬件的方式去过滤到干扰源就可以解决问题了。

以上,就是小编总结的几点串口接收异常的可能原因,小伙伴们有知道其他原因的,欢迎在评论区交流哦。

更多GD32 MCU相关咨询:https://www.gd32bbs.com/


http://www.niftyadmin.cn/n/5534615.html

相关文章

Kotlin基础——Typeclass

高阶类型 如在Iterable新增泛型方法时 interface Iterable<T> {fun filter(p: (T) -> Boolean): Iterable<T>fun remove(p: (T) -> Boolean): Iterable<T> filter { x -> !p(x) } }对应的List、Set实现上述方法时仍需要返回具体的类型 interfac…

Java中的反射编程实用指南

Java中的反射编程实用指南 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将深入探讨Java中的反射编程。反射是Java提供的一种强大机制&am…

DDei在线设计器-API-DDeiFile

DDeiFile DDeiFile是代表一个设计文件&#xff0c;一个文件含有多个DDeiSheet(页签)。   DDeiFile实例包含了一个文件的所有数据&#xff0c;在获取后可以通过它访问其他内容。DDeiEditor中的files属性记录了当前打开的文件列表。 一个DDeiEditor实例至少包含一个DDeiFile实例…

创客项目秀|基于XIAO ESP32S3 sense 的小型相机

在这个科技飞速发展的时代&#xff0c;DIY&#xff08;Do It Yourself&#xff09;文化正成为连接创新与日常生活的桥梁&#xff0c;今天小编给大家带来了来自麻省理工学院的Arnov Sharma 的基于XIAO ESP32S3 sense的小型相机项目&#xff0c;该相机拥有一个圆形的触摸屏幕可以…

uni-app与原生插件混合开发调试3-安卓原生插件开发调试和打包

安卓原生插件开发调试和打包 上面已经介绍了怎么安装开发和调试环境&#xff0c;接下来就是安卓原生插件的具体开发和调试步骤&#xff1a; 将uniapp前端项目的index.vue文件新增代码。代码如图所示&#xff1a; <template><view><view><text>{{titl…

【问题记录】Ubuntu提示: “E: 软件包 gcc 没有可安装候选“

Ubuntu提示: "E: 软件包 gcc 没有可安装候选" 一&#xff0c;问题现象二&#xff0c;问题原因&解决方法 一&#xff0c;问题现象 在虚拟机Ubuntu中进行安装gcc命令时报错&#xff1a;“E: 软件包 gcc 没有可安装候选”: 二&#xff0c;问题原因&解决方法 …

计算机组成原理笔记-第4章 存储器

第4章 存储器 笔记PDF版本已上传至Github个人仓库&#xff1a;CourseNotes&#xff0c;欢迎fork和star&#xff0c;拥抱开源&#xff0c;一起完善。 该笔记是最初是没打算发网上的&#xff0c;所以很多地方都为了自我阅读方便&#xff0c;我理解了的地方就少有解释&#xff1b…

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装&#xff0c;可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 &#xff08;1&#xff09;通过position属性,可以控制下拉选项的位置 &am…