stm32f091,使用hal库uart上配置DMA
时间: 2024-03-03 18:51:18 浏览: 184
STM32H743实现UART串口通信【支持STM32H7系列单片机_HAL库驱动】.zip
5星 · 资源好评率100%
在STM32F091中,可以通过使用HAL库提供的函数来配置UART使用DMA进行数据传输。以下是UART发送使用DMA的配置步骤:
1. 开启DMA时钟
需要先开启DMA时钟,以DMA1为例:
```c
__HAL_RCC_DMA1_CLK_ENABLE();
```
2. 配置DMA通道
使用HAL库提供的函数配置DMA通道,以DMA1通道2为例:
```c
hdma_tx.Instance = DMA1_Channel2;
hdma_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; // 数据传输方向,从存储器到外设
hdma_tx.Init.PeriphInc = DMA_PINC_DISABLE; // 禁止外设地址自增
hdma_tx.Init.MemInc = DMA_MINC_ENABLE; // 允许存储器地址自增
hdma_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; // 外设数据宽度为8位
hdma_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; // 存储器数据宽度为8位
hdma_tx.Init.Mode = DMA_NORMAL; // DMA模式为普通模式
hdma_tx.Init.Priority = DMA_PRIORITY_HIGH; // DMA通道优先级为高
HAL_DMA_Init(&hdma_tx);
```
3. 配置UART
使用HAL库提供的函数配置UART使用DMA进行数据发送,以USART1为例:
```c
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart1);
```
4. 启动DMA传输
使用HAL库提供的函数启动DMA传输,以发送数据为例:
```c
HAL_UART_Transmit_DMA(&huart1, (uint8_t*)sendBuffer, sendSize);
```
以上是UART发送使用DMA的配置步骤,UART接收使用DMA的配置步骤与此类似。需要注意的是,UART接收使用DMA时需要将数据传输方向配置为从外设到存储器。
阅读全文