| 
 
| 今天花了1天时间调试不定长数据接收功能期间参考了很多例程,但总是问题不断。费了九牛二虎之力最后总算是调通了。整个过程下来发现坑还是非常多的,在此分享下我的经验之谈: 1.打开IDLE中断后此中断并不会调用中断回调函数,因此中断处理函数绝对不能放在回调函数当中,必须直接放到stm32f4xx_it.c文件的void UART8_IRQHandler(void)函数中:
 void UART8_IRQHandler(void)
 {
 /* USER CODE BEGIN UART8_IRQn 0 */
 
 /* USER CODE END UART8_IRQn 0 */
 HAL_UART_IRQHandler(&huart8);
 /* USER CODE BEGIN UART8_IRQn 1 */
 if(__HAL_UART_GET_FLAG(&huart8,UART_FLAG_IDLE) != RESET)
 {
 if (rxd_uart8[0] == 0xCC && rxd_uart8[1]<18  && u8rxd_end == 0x33)
 {
 if (u8rxd_end == 0x33 && CalcBlockCrc(rxd_uart8+1,rxd_uart8[1]-1) == u8rxd_crc8)
 {
 U8Analyze_Package();
 }
 }
 __HAL_UART_CLEAR_IDLEFLAG(&huart8);
 HAL_UART_AbortReceive(&huart8);
 HAL_UART_Receive_DMA(&huart8,rxd_uart8,19);
 }
 /* USER CODE END UART8_IRQn 1 */
 }
 | 
 |