你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F1使用HAL库实现串口中断接收,如何调用回调函数

[复制链接]
GuessWhat 提问时间:2018-8-8 10:04 /
STM32F1使用HAL库实现串口中断接收时,串口中断是如何调用回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)的???
查半天都没找到哪里发起调用,还是说串口中断自动就发起了调用???
收藏 评论9 发布时间:2018-8-8 10:04

举报

9个回答
Stm32McuLover 回答时间:2018-8-8 10:25:29
自动的,你搜索下啊,就可以看到这个函数在哪调用了,去中断文件_it.c文件里面,跳转下就到了

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

随风飘扬 回答时间:2018-8-8 10:28:23
是在串口的中断函数里调用的,在串口中断里会监测各个中断源,根据不同的中断源调用不同的回调函数

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

jyl_518 回答时间:2018-8-8 10:30:30
本帖最后由 jyl518-283289 于 2018-8-8 10:32 编辑
  1. /* USER CODE BEGIN 4 */
  2. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  3. {
  4.         if (htim->Instance == htim2.Instance)
  5.         {
  6. //                HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
  7.         }
  8. }

  9. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  10. {
  11.         if(huart->Instance == USART1)
  12.         {
  13.                 HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
  14.                 HAL_UART_Receive_IT(&huart1,uart1_rx_buf, uart1_rx_len);//开接收中断
  15.                 uart1_rx_flag = 1;
  16.         }
  17. }

  18. void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
  19. {
  20.         if(huart->Instance == USART1)
  21.         {
  22.         }
  23. }

  24. /* USER CODE END 4 */
复制代码

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

废鱼 回答时间:2018-8-8 10:43:12
直接定义HAL_UART_RxCpltCallback这个函数即可,编译时会自动找到该函数。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

zhao.zhao 回答时间:2018-8-8 10:47:15
在串口收到数据后,由于设置了串口接收中断,自动进入中断函数 HAL_UART_IRQHandler(&huart1);
再进入 UART_Receive_IT(huart); 函数,在这个函数中,判断已经满足了用户设置的接收到的数据数量后,进入HAL_UART_RxCpltCallback(huart);函数。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

wenyangzeng 回答时间:2018-8-8 13:17:19
在Stm32f1xx_it.c里的中断函数里直接添加代码就可以了。
void USART1_IRQHandler(void)
{

  HAL_UART_IRQHandler(&huart1);

}

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

feixiang20 回答时间:2018-8-9 00:16:08
串口中断里设置成回调函数 void IC_DataReceive(void) {...回调函数,方便修改。直接写,有利于执行速度。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

abled-232226 回答时间:2019-1-28 15:30:40
6楼的回答很清楚了
mzy2364 回答时间:2019-1-29 11:03:33
  1. /**
  2.   * @brief This function handles USART3 global interrupt.
  3.   */
  4. void USART3_IRQHandler(void)                       
  5. {
  6.         uint8_t Res;

  7.         if((__HAL_UART_GET_FLAG(&huart3,UART_FLAG_RXNE)!=RESET))  //接收中断
  8.         {
  9.                 Res=USART3->RDR;
  10.         }
  11.         HAL_UART_IRQHandler(&huart3);       
  12. }
复制代码
我是直接这样获取串口数据的
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版