当前位置: 首页 > 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 */
}

相关文章:

  • 有免费建站的网站/7月新闻大事件30条
  • 网站建设制作设计seo优化珠海/杭州网站免费制作
  • access做网站数据库/酒店网络营销推广方式
  • 网站模板后台/搜索软件
  • wordpress登陆卡/志鸿优化网下载
  • 怎么搭建php网站/如何进行关键词优化工作
  • 【已解决】右键以某应用打开xx文件时,没有“始终”选项怎么办
  • 国产软件不惧微软,WPS力扛大旗,新型办公软件争相助力
  • 批次标准化Batch Normalization
  • Callable接口_JUC的常见类_多线程环境使用ArrayList
  • SpringBoot数据访问Redis
  • 【数据结构】手撕八大排序算法
  • 生物信息数据存储、管理规范
  • RNN从理论到实战【实战篇】
  • 【第25天】SQL进阶-查询优化- performance_schema系列实战二:锁问题排查(全局读锁)(SQL 小虚竹)
  • C# 中的闭包一个小问题
  • 《Buildozer打包实战指南》第二节 安装Kivy和Buildozer
  • 达梦数据库导入dmp文件