SMT32串口使用中断 和使用 RTOS的对比

文章介绍了如何使用CubMX工具配置STM32的时钟、串口和中断,并展示了在中断服务函数中调用HAL库的串口处理函数以及自定义回调函数。在RTOS环境下,通过任务调度,实现串口的非阻塞接收和发送,以及LED灯的控制。

用cubemx配置时钟,串口,中断和RTOS

STM32的中断在文件
stm32f1xx_it.c

其中

void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */

  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */

  /* USER CODE END USART1_IRQn 1 */
}

USART1 中断的服务函数 USART1_IRQHandler()
中断服务函数里面就调用了串口中断处理函数 HAL_UART_IRQHandler()
其主要作用就是判断是哪个串口产生中断,清除中断标识位,然后调用中断回调函数 HAL_UART_RxCpltCallback()。

在文件
stm32f1xx_hal_uart.c
中 有

__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
  /* NOTE: This function should not be modified, when the callback is needed,
           the HAL_UART_RxCpltCallback could be implemented in the user file
   */
}

可以用户自定义。

在文件
stm32f1xx_it.c
的最下方 重写回调函数:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  if (huart->Instance == USART1)
  {
    //HAL库串口发送函数
    HAL_UART_Transmit(&huart1,(uint8_t *)Buffer, 1, 0xffff);
    //串口接收函数
    HAL_UART_Receive_IT(&huart1,(uint8_t *)Buffer, 1);

  }
  
}

这就完成了串口中断的程序

在rots中如此定义,也可以达到类似的效果。轮询vs时间触发

void Led_Task(void const * argument)
{
  /* USER CODE BEGIN Led_Task */
  /* Infinite loop */
  for(;;)
  {
    //HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);

    //HAL_UART_Receive(&huart1, (uint8_t *)Buffer, 1, 0xffff); //一次 阻塞
    
    HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
    
    HAL_UART_Transmit(&huart1,(uint8_t *)Buffer, 1, 0xffff);
    HAL_UART_Receive_IT(&huart1, (uint8_t *)Buffer, 1); //循环 非阻塞
    //HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
    osDelay(1000);
  }
  /* USER CODE END Led_Task */
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘诺西亚的火山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值