当前位置: 首页 > news >正文

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

用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 */
}

相关文章:

  • 【MySQL进阶教程】MySQL管理
  • 狗厂的N+1+2毕业,我觉得还是挺良心的
  • SAP ABAP——SAP包(一)【包概要简述及创建】
  • 【Redis】Redis实现分布式锁
  • 普通土万象
  • 蛇形矩阵(简单明了的方法)
  • linux环境安装mysql5.7版本
  • Vue过滤器
  • linux系统中利用QT实现串口通信的方法
  • ESP32蓝牙+EC11旋转编码器实现对电脑音量控制
  • 57 mac 中 SIGINFO 信号, jdk8 支持, 但是 jdk9 不支持?
  • 【Linux】在Linux上写一个进度条小程序
  • 【寒假每日一题】DAY.6 有序序列的合并
  • 2022年度总结,迎接2023
  • (二十)正则表达式
  • 多节点Linux环境打造
  • Spring Boot配置文件数据也可以轻松加密?
  • 第十三届蓝桥杯C++B组省赛 J 题——砍竹子(AC)
  • 拓扑排序 (算法思想+图解+模板+练习题)
  • SAP FICO常用报表和事务码大全
  • 人民日报钟声:国际社会应共同维护科学溯源的正确方向
  • 广东省副省长刘红兵任湖南省委常委、宣传部部长
  • 澎湃读报丨解放日报9个版聚焦:上海,加快建成具有全球影响力的科技创新高地
  • 总书记考察的上海“模速空间”,要打造什么样的“全球最大”?
  • 成都世运会倒计时100天,中国代表团运动员规模将创新高
  • 中方发布《不跪!》视频传递何种信息?外交部回应