在USART文章中讲解了串口的轮询和中断模式,本文介绍一下通过DMA模式控制串口传输。
直接存储器访问 (DMA) 用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何 CPU 操作的情况下通过 DMA 快速移动数据。这样节省的 CPU 资源可供其它操作使用。说白了DMA就是一个搬运工,将数据从一个地方搬到另一个地方而不需要CPU处理。作为一个搬运工,要他正常工作必须要确定几个重要的参数:
传输模式:数据从哪里搬到哪里。三种可能的传输方向:存储器到外设、外设到存储器或存储器到存储器
通道选择:就是数据传输的是走那条道路
仲裁器:多个DMA传输是优先级高的优先传输
数据长度:每次传输的数据长度,可以一个字节,两个字节(半字),四个字节(字)
指针递增:如果使能了递增模式,则下一次传输的地址将是前一次传输的地址递增 1(对于字节)、2(对于半字)或4(对于字)
打开STM32CubeMX重新建工程,配置和上一章配置一样。只是这个工程中,在DMA设置栏添加UASART发送TX和接收RX的DMA。发送选择 DMA1 Channel 4通道,方向从存储器到外设。优先级为低。接收选择DMA1 Channel 5通道,方向外设到存储器,优先级为低。Mode为Normal,Data Width选择Byte。