低级错误导致:
原来自己的工程里串口用的中断方式,
从官方历程复制串口的DMA程序到自己的工程里,
结果一执行到DMA初始化,就hardfault_handler(),反复重启。
初始化函数里调用了HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)这个函数
程序执行到这里就会复位。
原因竟然是没有更新MSP初始化函数。这HAL库挺坑人的,一个串口初始化还分两部分,经常忽略还有一个MSP初始化函数要修改。
串口使用DMA方式时,MSP函数对DMA做了初始化,中断方式的MSP初始化自然不会初始化DMA,所以一调用前面那个函数就hardfault_handler()复位了!!!!