利用 串口+DMA+IDLE中断+无锁队列,提高串口接收效率
接收会产生的中断有三种:
- 串口空闲中断:正常接收(小于 dma 设置的 buffer_size 时)
- DMA传输完成中断:刚好为 dma 设置的 buffer_size 时,不过一般也不会出现,
如果出现了的话也应该增加缓冲区大小
- DMA的半传输中断:(这里没有用到,如果内存有限制可以自行开启)
注意:
- 环形队列的缓冲区要设置为 2 的幂次方的大小
- 串口中断一般可以设置为最低优先级,因为是 DMA后台自动接收的,
所以中断优先级最低并不会丢失数据
- 用户缓存 buff_read 可以随意设置,没有限制,但为了节省内存,
一般小于等于 DMA 的接收缓存 usart_buff_rx
1