本帖最后由 jf_57482442 于 2022-7-14 16:59 编辑
1、空闲的定义是总线上在一个字节的时间内没有再接收到数据。空闲中断是检测到有数据被接收后,总线上在一个字节的时间内没有再接收到数据的时候发生的。而总线在什么情况时,会有一个字节时间内没有接收到数据呢?一般就只有一个数据帧发送完成的情况,所以串口的空闲中断也叫帧中断
2、在普通中断的时候仅仅保存数据,在帧中断的时候需要执行相应处理函数。如果没有帧中断,必须在接收中断中判断每一个接收数据与帧头帧尾是否相符,效率极低。
3、本示例采用空闲中断+串口DMA,不开接收中断,这样收到空闲中断了直接去处理DMA保存过来的数据,这样能减少CPU的负担
4、打开串口DMA接收,空闲中断,注意此处无需开启接收中断,示例如下
5、空闲中断触发后数据的处理,清中断标记,获取DMA数据长度,接收标记置位
6、 串口的初始化及接收数据输出
7、完
整代码见附件,工程采用MounRiver Studio建立
8、测试效果如下