stm32f091,uart上配置DMA
时间: 2024-03-03 12:51:18 浏览: 131
在STM32F091中,可以通过配置DMA通道实现UART数据的发送和接收。以下是UART发送使用DMA的配置步骤:
1. 配置DMA控制器
首先,需要配置DMA控制器的通道、数据传输方向、数据宽度等参数。以DMA1通道2为例:
```c
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_InitTypeDef DMA_InitStructure;
DMA_DeInit(DMA1_Channel2);
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART1->TDR); // 外设地址
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)sendBuffer; // 存储器地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; // 数据传输方向,从存储器到外设
DMA_InitStructure.DMA_BufferSize = sendSize; // 数据缓冲区大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 禁止外设地址自增
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; // 允许存储器地址自增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; // 外设数据宽度为8位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; // 存储器数据宽度为8位
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; // DMA模式为普通模式
DMA_InitStructure.DMA_Priority = DMA_Priority_High; // DMA通道优先级为高
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; // 禁止存储器到存储器的传输
DMA_Init(DMA1_Channel2, &DMA_InitStructure);
```
2. 配置UART
然后,需要配置UART的DMA发送模式。在此模式下,当UART的发送缓冲区为空时,会自动从DMA缓冲区中读取数据进行发送。以USART1为例:
```c
USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
```
3. 启动DMA传输
最后,启动DMA传输即可:
```c
DMA_Cmd(DMA1_Channel2, ENABLE);
```
以上是UART发送使用DMA的配置步骤,UART接收使用DMA的配置步骤与此类似。需要注意的是,UART接收使用DMA时需要配置DMA通道的数据传输方向为从外设到存储器。
阅读全文