STM32F7学习笔记(三)-串口DMA

一、打开上一节的工程,在上一节的基础上进行修改

二、配置DMA

在cubemx界面上点击DMASTM32F7学习笔记(三)-串口DMA_第1张图片
因为串口1是挂在DMA2上的,所以点击DMA2,如图中标记的2,随后点击ADD
STM32F7学习笔记(三)-串口DMA_第2张图片
选择USART1_RX,继续点击ADD,将USART1_TX也添加进去,随后配置DMA如下图所示STM32F7学习笔记(三)-串口DMA_第3张图片
其中mode设置可以选择Normal表单次传输,传输一次后终止传输,Circular表示循环传输,传输完成后又重新开始继续传输,不断循环永不停止。此处选择单次传输。

Increment Address表示地址指针递增。串口发送数据是将数据不断存进串口的发送数据寄存器(USARTx_TDR)。所以外接的地址是不递增。而内存储器存储的是要发送的数据,所以地址指针要递增才能将所以的数据发送出去。

串口数据发送寄存器只能存储8bit,每次发送一个字节,所以数据长度选择Byte。

三、生成代码

在主函数中添加代码,添加完成如下所示

int main(void)
{
  /* USER CODE BEGIN 1 */
    uint8_t *data="uart dma test\r\n";
  /* USER CODE END 1 */

  /* Enable I-Cache---------------------------------------------------------*/
  SCB_EnableICache();

  /* Enable D-Cache---------------------------------------------------------*/
  SCB_EnableDCache();

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
	HAL_UART_Receive_IT(&huart1,aRecBuff,1);
	printf("uart test is run!!!\r\n");
   
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  HAL_UART_Transmit_DMA(&huart1,data,strlen((char*)data));
      HAL_Delay(1000);
  }
  /* USER CODE END 3 */
}

四、打开串口调试助手,观察现象,串口每隔1S输出一次数据

STM32F7学习笔记(三)-串口DMA_第4张图片

你可能感兴趣的:(STM32)