找回密码
 注册
关于网站域名变更的通知
查看: 390|回复: 1
打印 上一主题 下一主题

基于hal库的usart无法进入接收回调函数问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-9-18 14:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
2 P5 y; C( ?/ Y1 `2 {) H1 ]
6 _/ H% u) Y6 D( V
遇到的问题:  |# b0 p" F/ X8 A! r0 a
      在while循环中执行中断接收函数,并在回调函数中打印接收到的数据,回调函数调用正常,,0 H' k* l5 o! h
  • volatile uint8_t usartTemp[200] ;
  • int main(void)
  • {
  •   HAL_Init();
  •   SystEMClock_Config();
  •   MX_GPIO_Init();
  •   MX_USART1_UART_Init();
  •   MX_USART2_UART_Init();
  •         HAL_UART_Receive_IT(&huart2,usartTemp,200);
  •   while (1)
  •   {
  •         HAL_UART_Receive_IT(&huart2,usartTemp,200);
  •   }
  • }
  • // 数据接收完成后调用回调函数,这里只有usart2接收数据,所以不进行串口对象判断
  • void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  • {
  •         static uint8_t count = 0;
  •         printf("=============%d============\n",count);
  •         printf("%s\n",usartTemp);
  •         count++;
  • }
      }7 k" v) m2 w* c6 u. `% o, r! R0 B

% U/ O9 _" [2 T" F& k3 g复制代码

# [, _& g$ H6 O! F: x& H; o5 W  L% ?( ^$ ]0 d8 H, o( Y2 x% w

& q# N+ @, P0 ~6 q     既然是中断方式接收数据,总不能一直在while中调用吧,,所以,将第一次调用接收函数置于while函数前,然后在回调函数中再次调用接收函数,开启下一轮数据接收,却发现,程序在进行了一次数据接收后就不再接收数据了,打断点确定回调函数中的接收数据函数确实被调用了,然而就是不再进回调函数了,,,,参照网上资料,添加了__HAL_UART_ENABLE_IT后仍然没用,,使用过基于hal的usart中断接收数据的朋友给指点下吧
& I0 C5 t. b: j) L3 D% o+ q( {. D9 B$ g! [: w
  • volatile uint8_t usartTemp[200] ;
  • int main(void)
  • {
  •         HAL_Init();
  •         SystemClock_Config();
  •         MX_GPIO_Init();
  •         MX_USART1_UART_Init();
  •         MX_USART2_UART_Init();
  •         HAL_UART_Receive_IT(&huart2,usartTemp,200);
  •         // __HAL_UART_ENABLE_IT(&huart2,UART_IT_ERR);
  •         /  __HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
  •         while (1)
  •         {
  •         //        HAL_UART_Receive_IT(&huart2,usartTemp,200);
  •         }
  • }
  • void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  • {
  •         static uint8_t count = 0;
  •         printf("=============%d============\n",count);
  •         printf("%s\n",usartTemp);
  •         count++;
  •         while(HAL_UART_GetState(&huart2) == HAL_UART_STATE_BUSY_RX) {}
  •                 HAL_UART_Receive_IT(&huart2,usartTemp,200);
  • //        __HAL_UART_ENABLE_IT(&huart2,UART_IT_ERR);
  • //        __HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
  • }6 w0 t1 q% X7 Y7 m  u

! }8 l8 M9 Y6 T" w7 ~复制代码

6 h% F# ?  b2 h5 P4 y9 `8 e
  S. J7 M, S1 V% _* ]% ^. c, S8 ^

该用户从未签到

2#
发表于 2020-9-18 18:01 | 只看该作者
谢谢分享                                   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 23:25 , Processed in 0.156250 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表