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

问题描述:

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

问题背景:

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

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

原因与解决:

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

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

相关推荐
光电大美美-见合八方中国芯1 小时前
用于无色波分复用光网络的 10.7 Gb/s 反射式电吸收调制器与半导体光放大器单片集成
网络·后端·ai·云计算·wpf·信息与通信·模块测试
独小乐1 小时前
012.整体框架适配SDRAM|千篇笔记实现嵌入式全栈/裸机篇
c语言·汇编·笔记·单片机·嵌入式硬件·arm·gnu
不吃鱼的羊1 小时前
ADC扫描组Scan Group
单片机
国产化创客2 小时前
ESP32 (ESPectre)+Grafana构建专业级CSI监控面板
物联网·grafana·信息与通信·智能硬件
LCMICRO-133108477462 小时前
长芯微LPC556D1完全P2P替代DAC8830,是引脚兼容的16位数模转换器,该系列产品为单通道、低功耗、缓冲电压输出型DAC
stm32·单片机·嵌入式硬件·fpga开发·硬件工程·电压输出型dac
charlie1145141913 小时前
嵌入式C++教程实战之Linux下的单片机编程(9):HAL时钟使能 —— 不开时钟,外设就是一坨睡死的硅
linux·开发语言·c++·单片机·嵌入式硬件·c
以太浮标3 小时前
华为eNSP模拟器综合实验之- DHCP、DNS、HTTP和FTP服务器配置案例Client-Server
linux·服务器·windows·http·华为·信息与通信
钿驰科技3 小时前
水泵无刷电机驱动板如何实现恒压控制?
单片机·嵌入式硬件
xingzhemengyou13 小时前
STM32 DMA
stm32·单片机·嵌入式硬件
森利威尔电子-3 小时前
森利威尔 SL3160A 降压型 DC - DC 转换器:10V - 150V 宽输入,稳出 5V/2.5A
单片机·嵌入式硬件·集成电路·芯片·电源芯片