关于通讯断帧策略
1 可以利用串口的空闲中断加收发中断:
1.1接收断帧判断:每接收一字节就使能空闲中断,进入空闲中断说明断帧了进行数据缓存,出中断时禁止空闲中断
1.2发送断帧判断:同样处理,不同的是空闲中断使能的位置在要发送内容的前面,这样就不用每发送一个字符就使能一次,出空闲中断同样要禁止该中断。
1.3如果在一个串口同时用中断收发又要断帧:此时可以增加标志以区分是接收断帧还是发送断帧,
2利用DMA和定时器
原理是在DMA中断中每收到一个内容,计数器就增加;在定时器中断中每次中断就读取计数器的值并判断是否与前一次相同:若相同则说明数据不再增长为断帧,不同说明数据还么有结束。需要注意的是定时器启动的位置应再DMA中断中,或者启动和使能定时器在DMA外面,但每次进入DMA就清零定时器计数器从而保证在数据通讯过程中定时器不至于超时溢出。定时器的超时时间设置也很重要,应根据实际的波特率或者分包之间的间隔准确设计。
3 利用DMA和空闲中断判断断帧:
效率比较高,数据传输用DMA不需要MCU参与,也不必非用DMA中断,用查询也可;在空闲中断中进行断帧检测,应为通常DMA比MCU的速度(效率)快很多。
4 根据通讯波特率设置阻塞式/非阻塞式超时时间(死等或者配合定时器标志)也可以进行断帧判断。
5网上说的将定时器的输入通道和收发的TX/RX引脚相连,利用引脚信号触发定时器的捕获中断并与超时时间比较进行断帧标志的输出。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?