型号:STM32L432KC官方开发板 串口使用的是板载的USB下载口以及串口 用法: 在串口初始化后,while(1)之前调用 接收中断函数 HAL_UART_Receive_IT(),接收一个字节产生中断。在接收中断回调函数中处理保存数据并重新开启接收一个字节的中断。 回掉函数的代码: void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle) { // printf("rx callback!\n"); buf[cnt++] = data; uint8_t ret = HAL_OK; /* Set transmission flag: trasfer complete*/ do { ret = HAL_UART_Receive_IT(UartHandle, (uint8_t *)&data, 1); }while(ret != HAL_OK); } 现象: 上电后会产生一次串口中断,进入这个函数。但此时并没有发送数据。 另外,后续发送任何数据都没有反应。无法产生中断。 |
安装个STM32Cube_FW_L4库,然后跑跑样例程序“STM32Cube_FW_L4_V1.11.0\Projects\NUCLEO-L432KC\Examples\UART\UART_TwoBoards_ComIT”
评分
查看全部评分
就OK了。
评分
查看全部评分
主要是这些都是两块板之间通信的。另外都是在主函数之前就通信完成,while(1)里面不进行操作的那种。
就是说在回掉函数中只用再次开启这个,不用重新使用HAL_UART_Receive_IT()?
评分
查看全部评分
主函数中调用一次就够了
这样子不能再次接收下一次的数据
我用这样的方式在STM32F469Discovery官方板上是可以的。连续的接收数据。
初始化串口后调用,并不是在回调函数里调用的。
看网上的帖子是说需要在回掉中再次使能,我自己在STM32F469上实验了也是这样,就是在STM32L432KC上有问题。
http://www.cnblogs.com/Mysterious/p/4804188.html