之前对于串口中断的理解是只要使能了串口中断,比如接收中断,那么只要已接收到数据,就会进入中断服务函数,但是这次用了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); } |
STM32F407 定时器触发DMA 求助大神
【MCU实战经验】基于STM32F407的音频播放器设计
盘古UE-STM32F407工控板原理图
【STM32F429心得\疑问】+STM32F4之FSMC和FMC
STM32F429读取IO口传输的数据速率
STM32F407ZGT6 手摸芯片背部重启
STM32F4 SPI 动作时,软件片选信号被拉高,IO口程序逻辑失控
STM32F401RE NUCLEO求助,串口一直不能进中断
读取STM32F407内部温度传感器值错误
STM32F429多路内部ADC独立采集的办法
因为中断接收要接受完10个数据才会调用回调函数,并且调用之前会关掉中断,所以下次再发来就没用了,所以你需要在回调函数里再次调用HAL_UART_Receive_IT。
坐这个实验还是推荐用标准库的方法
我可不可以这么理解,如果我只从串口助手发送一个数据,那它岂不是不会进入回调函数 我已经试过了 好像是这样的
这个我刚试了是可以的,但是我这么写HAL_UART_Receive_IT(&huart2, &data3,5); 接收五次才回调,我用串口助手发送了五次为什么没有进入回调