平台: ST官方NUCLEO-767ZI开发板
使用串口2实现,其他的串口应该是类似的
使用HAL库,其他F系列应该也是类似的
DMA接收的硬件双缓冲区切换功能目前只能做到定长接收,如果检测到接收数据长度不够设定的接收长度,芯片会攒够设定的接收长度数据之后才会触发中断,而且使用这种模式,DMA是一定要设置为循环模式而非单次触发模式的,切记。。
串口DMA发送和正常的差不多,但是接收的话这种双缓冲模式会跳转到对应的DMA接收中断中,然后跳到传输完成回调函数中,用户在传输完成回调函数里面处理数据,硬件自动切换接收的缓冲区的,实现“乒乓”操作,不会再跳到串口中断的接收部分处理逻辑了。如果用HAL库的模式,就应该按照上面说的已经在出现传输完成标志的时候切换硬件缓冲区了,自己实现的话就需要做好相关逻辑的处理。
使用这种模式需要自己编写两个缓冲区的处理回调函数并且绑定到串口DMA句柄外设变量上。。
|