GD32F407ZGT6在FreeRTOS下串口中断接收异常情况及解决方法

问题描述:

GD32F407ZGT6在FreeRTOS下串口中断定长接收时,出现卡死/接收不全/接收错误的情况。(9帧数据只接收到两帧,其中第二帧的数据错误,然后程序卡死)

问题背景:

有一个传感器,可以通过外部设备对齐发送读写指令,这个传感器接收到读写指令以后会返回一个响应码。我用单片机通过ttl转RS485对齐发送指令,这个传感器能够接收到我发送的指令,并且能够返回正确的响应,用单片机读这个响应的时候出现上述问题。

已经确认硬件连接没问题,因为能够正常发送数据。中断优先级配置低于系统管理的优先级,在中断服务函数中用到了FromISR写消息队列。目前怀疑是任务调度或者系统保护什么的打断了接收数据的过程。(定长接收数据,每次接收8位有效数据,循环九次)

原因与解决:

卡死的原因是在任务中误用了FromISR以及的发送队列函数参数类型不对。接收不全的原因是我在中断服务函数中写的每接收一帧数据就要写一次队列,导致中断服务函数执行时间过长,来不及读下一帧数据。

现在改为读到数据直接存入数组,然后计数。待9帧数据都存入数组后触发if条件,执行中断服务函数中if条件中的语句,即将数组内的元素按顺序写入队列。这样,只有第九次触发接收中断时,中断服务函数执行的时间较长,但由于后边没有数据了,不妨碍数据接收。

相关推荐
iCxhust16 小时前
8086 汇编位测试使用方法
汇编·单片机·嵌入式硬件·微机原理·8088单板机
SUNNYSPY00116 小时前
AO3404-ASEMI锂电池保护(BMS)专用AO3404
单片机
dxxt_yy16 小时前
一机双能·普查+OTDR——成都鼎讯 DXG-800 光缆普查仪适配风电能源全场检测
能源·信息与通信
H__Rick17 小时前
C51学习-DAY6
单片机·嵌入式硬件·学习
西城微科方案开发17 小时前
HC89F0531-SSOP24增强型8位单片机功能特性全面解析
单片机·嵌入式硬件
纽格立科技17 小时前
DRM 发射端链路图(上)
前端·人工智能·车载系统·信息与通信·传媒
崇山峻岭之间17 小时前
单片机步进电机梯形S形加减速实验
单片机·嵌入式硬件
一路往蓝-Anbo18 小时前
第四篇:PWM 输出与驱动 —— 能量控制的艺术与功率保护
stm32·单片机·嵌入式硬件·模拟电子·硬件设计
布子麟18 小时前
NodeMcu(ESP8266)之WIFI基础应用 +AT透传
单片机·嵌入式硬件
果丁智能18 小时前
智慧校园一卡通深度融合方案:基于超级SIM卡的手机碰一碰智能开锁技术落地实践
数据结构·人工智能·python·科技·算法·智能家居·信息与通信