1 可以利用串口的空闲中断加收发中断:
1.1接收断帧判断:每接收一字节就使能空闲中断,进入空闲中断说明断帧了进行数据缓存,出中断时禁止空闲中断
1.2发送断帧判断:同样处理,不同的是空闲中断使能的位置在要发送内容的前面,这样就不用每发送一个字符就使能一次,出空闲中断同样要禁止该中断。
1.3如果在一个串口同时用中断收发又要断帧:此时可以增加标志以区分是接收断帧还是发送断帧,
2利用DMA和定时器
原理是在DMA中断中每收到一个内容,计数器就增加;在定时器中断中每次中断就读取计数器的值并判断是否与前一次相同:若相同则说明数据不再增长为断帧,不同说明数据还么有结束。需要注意的是定时器启动的位置应再DMA中断中,或者启动和使能定时器在DMA外面,但每次进入DMA就清零定时器计数器从而保证在数据通讯过程中定时器不至于超时溢出。定时器的超时时间设置也很重要,应根据实际的波特率或者分包之间的间隔准确设计。
3 利用DMA和空闲中断判断断帧:
效率比较高,数据传输用DMA不需要MCU参与,也不必非用DMA中断,用查询也可;在空闲中断中进行断帧检测,应为通常DMA比MCU的速度(效率)快很多。
4 根据通讯波特率设置阻塞式/非阻塞式超时时间(死等或者配合定时器标志)也可以进行断帧判断。
5网上说的将定时器的输入通道和收发的TX/RX引脚相连,利用引脚信号触发定时器的捕获中断并与超时时间比较进行断帧标志的输出。
时间: 2024-11-05 12:16:05