Conmi的正确答案——STM32CUBEMX创建USART1的DMA怎么实现1秒发送一次(HAL)

平台:STM32F103RET6

// stm32f1xx_it.c
/**
  * @brief This function handles DMA1 channel4 global interrupt.
  */
void DMA1_Channel4_IRQHandler(void)
{
  /* USER CODE BEGIN DMA1_Channel4_IRQn 0 */
  // 就是这段可以防止DMA发送完成后不会无限重发
  // 一定要放前面,放在后面没用!!!
  if (__HAL_DMA_GET_FLAG(&hdma_usart1_tx, DMA_FLAG_TC4))
  {
    __HAL_DMA_DISABLE(&hdma_usart1_tx);
  }
  /* USER CODE END DMA1_Channel4_IRQn 0 */
  HAL_DMA_IRQHandler(&hdma_usart1_tx);
  /* USER CODE BEGIN DMA1_Channel4_IRQn 1 */

  /* USER CODE END DMA1_Channel4_IRQn 1 */
}
// main.c
/* USER CODE BEGIN Header_StartDefaultTask */
/**
  * @brief  Function implementing the defaultTask thread.
  * @param  argument: Not used
  * @retval None
  */
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void const *argument)
{
  /* USER CODE BEGIN 5 */
  /* Infinite loop */
  for (;;)
  {
    // 每次发送前使能USART1的发送DMA,后面可以做成函数,通过DMA发送可以减少处理的操作
    __HAL_DMA_ENABLE(&hdma_usart1_tx);
    HAL_UART_Transmit_DMA(&huart1, "test111", 7);
    osDelay(1000);
  }
  /* USER CODE END 5 */
}
上一篇:踩了*


下一篇:2021/07/20 悍匠暑假集训第三天