|
之前对于串口中断的理解是只要使能了串口中断,比如接收中断,那么只要已接收到数据,就会进入中断服务函数,但是这次用了HAL库的中断。 它的使能函数是HAL_UART_Receive_IT(&huart2, &data, 10); 如果一有数据过来,那么就会进入相应的回调函数 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 本来高高兴兴的打算做一个从串口助手发数据,单片机只要一接收到,就把这个刚接收到的数据发给电脑串口助手。 但是问题来了,程序跑起来之后,从串口助手发第一次,单片机接收到了,然后往串口助手那边发出数据,可是第二次就不行,就相当于这个中断只用了一次就用不了 望大神帮忙看看 代码如下几句: HAL_UART_Receive_IT(&huart2, &data, 10); //使能接收中断 while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//接收中断的回调函数 { HAL_UART_Transmit(&huart2, &data2, 1,10); } |
微信公众号
手机版
因为中断接收要接受完10个数据才会调用回调函数,并且调用之前会关掉中断,所以下次再发来就没用了,所以你需要在回调函数里再次调用HAL_UART_Receive_IT。
坐这个实验还是推荐用标准库的方法
我可不可以这么理解,如果我只从串口助手发送一个数据,那它岂不是不会进入回调函数 我已经试过了 好像是这样的
这个我刚试了是可以的,但是我这么写HAL_UART_Receive_IT(&huart2, &data3,5); 接收五次才回调,我用串口助手发送了五次为什么没有进入回调