经典的DMA串口接收方式,接收不定长数据,下面是其中一段代码,MCU为STM32F207,CubeMx生成固件Firmware Package for Family STM32F2 版本1.2.0下一直使用没有问题,但是换用固件版本1.4.0以上之后,接收对方数据就一直出问题了,但是并不完全出问题,它会挑对方的串口硬件(不知道挑的是什么),大多数情况下不会出现接收问题,如果换回1.2.0的固件(只更换stm32f2xx_hal_uart.c与stm32f2xx_hal_uart.h)重新编译后问题就解决(就能接收到对方数据)。不知道这个问题怎么解决,如果不能解决这个问题,只能使用低版本的固件了 void USART6_IRQHandler(void) { uint32_t tmp_flag = 0; uint32_t temp; tmp_flag = __HAL_UART_GET_FLAG(&huart6,UART_FLAG_IDLE); if((tmp_flag != RESET)) { __HAL_UART_CLEAR_IDLEFLAG(&huart6); temp = huart6.Instance->SR; temp = huart6.Instance->DR; HAL_UART_DMAStop(&huart6); temp = hdma_usart6_rx.Instance->NDTR; if(temp>=RX_LEN)bRecCount=RX_LEN; else bRecCount = RX_LEN - temp; GunDataProc(bRxBuf,bRecCount); HAL_UART_Receive_DMA(&huart6,bRxBuf,RX_LEN); } HAL_UART_IRQHandler(&huart6); } |
没人看,失望啊 |
那就对比一下新旧固件的stm32f2xx_hal_uart.c与stm32f2xx_hal_uart.h文件呗 |