STM32CubeMX系列教程6:直接存储器访问 (DMA)
生成报告以及代码,编译程序。在usart.c文件中,可以找到刚才的DMA设置。
/* Peripheral DMA init*/ hdma_usart1_tx.Instance = DMA2_Stream7; hdma_usart1_tx.Init.Channel = DMA_CHANNEL_4; hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE; hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE; hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; hdma_usart1_tx.Init.Mode = DMA_NORMAL; hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW; hdma_usart1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; HAL_DMA_Init(&hdma_usart1_tx); __HAL_LINKDMA(huart,hdmatx,hdma_usart1_tx);
在main函数前面添加发送的数据。
/* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/ uint8_t aTxMessage[] = "\r\n**** UART-Hyperterminal communication based on DMA ***\r\n WaveShare Open7XXI-C Board \r\n"; /* USER CODE END PV */
在main()函数的while(1)循环中添加应用程序,通过DMA将数据发送出去。
/* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_UART_Transmit_DMA(&huart1, (uint8_t *)aTxMessage, sizeof(aTxMessage)); HAL_Delay(1000); } /* USER CODE END 3 */
编译程序并下载到开发板。用USB线连接开发板到电脑,在电脑上打开串口调试助手。选择对应的串口号,设置波特率为115200。按下复位按键会接收到如图信息。