首页 » 科学 » 【避坑指南】STM8大年夜双串口同时大年夜量数据通讯导致系统卡去世_串口_单片机

【避坑指南】STM8大年夜双串口同时大年夜量数据通讯导致系统卡去世_串口_单片机

雨夜梧桐 2024-12-01 01:01:47 0

扫一扫用手机浏览

文章目录 [+]

产品越繁芜,解释功能就越多,单片机须要的外设也会相应的多很多,但是这么繁芜的问题就不在这里谈论,我现在要谈论是单片机双串口频繁通讯造成去世机的问题。

当时我用到了两个串口,串口1与身份证刷卡模块通讯,当有效刷卡时,身份证刷卡模块会自动异步传输身份证信息到单片机串口1,而串口2是与摄像头模块通讯,拍照后转成16进制自动异步传输到单片机串口2,由于身份证信息和摄像头拍摄图片数据量较大,分别有1K和50K字节,串口通讯速率比较慢,无法快速的吸收,这就导致了,单核的单片机进行双串口同时吸收数据,那么看下串口我的吸收代码。

【避坑指南】STM8大年夜双串口同时大年夜量数据通讯导致系统卡去世_串口_单片机 科学

这是STM8串口中断函数,正常来说当串口吸收到起始位旗子暗记后,串口缓冲器便会开始吸收到一个完全的字节且收到停滞位后置为寄存器标志,由于中断都有优先级处理,一样平常都不会有相互冲突的问题,但是我在这个产品上须要用到两个串口且通讯比较频发,碰着了寄存器标志被冲刷掉的问题,做了大量的测试,末了创造是卡去世在while语句这,导致我的代码涌现了严重BUG,导致去世机,也便是我的代码在等待串口吸收标志时候迟迟没有等到,然后一贯在串口这个while的位置去世等,导致一贯无法跳出中断。

后来我在while这里做了计数延时等待处理,就成功的办理了这个问题,定义了一个局部变量在while里面计数,当超过了5毫秒的韶光便自动跳出中断函数。

办理方法如下:

给各位小伙伴避坑

相关文章