1.HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)与HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart)相对应,如果忘记停止DMA接收下次打开是肯定会失败的,在由于用户交互时最应该注意。
在实际使用过程中关于HAL提供的驱动最好对于返回值都加上错误处理方便定位问题。
2.不同的串口的接收最好不要写统一的公共函数,不然最后很难改,除非所有串口的接受与发送确实可以套用同一套机制,比如DMA+任务通知或者DMA+队列(实际还有更多)
3.任务通知对于任务与任务之间确实很方便,但是对于数据可能不会那么安全,队列对于水安全,但是效率不会很高
4.64M的W25QXXX的擦除时间在Freertos操作系统下需要至少两分半(实际测试下来有长有短,可能是因为其他任务没挂起,因为是实时系统,测试下来擦除对数据输出没什么影响就没有加挂起操作,加上用户体验感也不会很好),所以网上的驱动对于擦除时间的设置100s可能是不够的,会导致擦除失败,擦除失败会导致初始化失败,硬件初始化失败最好也暴露出来,写失败的原因要么地址不对要么初始化没成功,针对内部flash有些写失败可能是字节没对齐,外部目前没遇到过要求按照字节对齐的情况
擦除失败也有可能是地址设置的不对,如果地址超出了实际地址也会出问题,最好在调试阶段观察一下真正的擦除地址设置是否正确
对于异常并不是一定不会发生,所以异常信息一定要暴露出来