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

问题描述:

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

问题背景:

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

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

原因与解决:

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

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

相关推荐
Hello_Embed40 分钟前
libmodbus 移植 STM32(USB 串口后端篇)
笔记·stm32·单片机·嵌入式·freertos·libmodbus
来自晴朗的明天3 小时前
14、光耦隔离电路(EL3H7)
单片机·嵌入式硬件·硬件工程
G***技3 小时前
杰和IB3-272:以低功耗高性能打造新一代工业智能交互核心
单片机·嵌入式硬件·物联网
czhaii4 小时前
STC AI8052U单片机特点
单片机
MAR-Sky4 小时前
keil5中数据的不同定义和单片机(以stc8为例)里的对应关系(idata,xdata,data,code)
单片机·嵌入式硬件
北京耐用通信5 小时前
破解AGV多协议互联难题:耐达讯自动化Profinet转Devicenet网关如何实现高效协同
人工智能·科技·物联网·网络协议·自动化·信息与通信
项目題供诗6 小时前
51单片机入门(八)
单片机·嵌入式硬件·51单片机
羽获飞6 小时前
从零开始学嵌入式之STM32——9.STM32的时钟系统
stm32·单片机·嵌入式硬件
ESBK20258 小时前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
来自晴朗的明天8 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程