硬汉嵌入式论坛

 找回密码
 立即注册
查看: 877|回复: 6
收起左侧

[UART] 串口接收异常粗暴处理

[复制链接]

11

主题

28

回帖

61

积分

初级会员

积分
61
发表于 2022-7-30 07:13:30 | 显示全部楼层 |阅读模式
本帖最后由 新洲罗远 于 2022-7-30 07:14 编辑

问题:STM32H7B0中断接收连续JPEG数据,经常出现异常死机。也就是在连续接收数据流的时候,人为断开串口接收线,再接通一样的症状。
调试:再接通后一直在进入接收中断。怀疑是接收出错。
处置:将几个出错位都清0。(我用寄存器方式追求速度)
接收中断如下:

//串口1中断服务程序
void USART1_IRQHandler(void)                        
{         u8 rxs;
        if(USART1->ISR&(1<<5))//接收到数据
        {
            rxs = USART1->RDR; //读取接收到的数据

          // 这里处理数据。。。。
        }
          else   //非接收中断处理
         USART1->ICR|=0x01F;        //清除::检测到空闲线路、上溢错误、检测到噪声、帧错误、奇偶校验错误
}
结果:基本没有出现死机了
剩下的问题,LTDC偶尔黑屏一下,随即自行恢复。
回复

使用道具 举报

39

主题

929

回帖

1051

积分

至尊会员

积分
1051
发表于 2022-7-30 10:59:02 来自手机 | 显示全部楼层
你这个确实太粗暴了,原始数据居然直接发送,而不是加工后再发送。正常且可靠的做法,原始数据需要加工,加上起始位和停止位,加上校验比如crc等,然后才发送。接受端检测起始位和停止位,再进行校验,都对了才认为接收到了正确的数据。
回复

使用道具 举报

39

主题

929

回帖

1051

积分

至尊会员

积分
1051
发表于 2022-7-30 11:07:51 来自手机 | 显示全部楼层
还有,数据量大的情况下,数据要拆分成多个数据帧,每个数据帧加上顺序编码,方便数据接收完成后拼接成完整的数据。
回复

使用道具 举报

11

主题

28

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2022-7-30 12:02:07 | 显示全部楼层
谢谢提醒!
回复

使用道具 举报

77

主题

687

回帖

918

积分

金牌会员

积分
918
发表于 2022-7-30 12:04:53 | 显示全部楼层
不要在中断里面处理数据,加个大FIFO,按时处理数据。RX接上拉应该能解决你的问题。
回复

使用道具 举报

11

主题

28

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2022-7-30 13:27:55 | 显示全部楼层
谢谢各位,继续支招!
回复

使用道具 举报

0

主题

13

回帖

13

积分

新手上路

积分
13
发表于 2022-7-30 20:04:59 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 06:30 , Processed in 0.225086 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表