0%
使用DMA发送串口数据问题
- CubeMX生成的代码初始化DMA和UART顺序问题,应该先初始化DMA再UART,可以在CubeMX中调整生成初始化代码的顺序。
- CubeMX生成的代码使用
HAL_UART_Transmit_DMA()
后需要手动将串口状态配置成空闲状态,可以在DMA传输完成中断中加(&huart1)->gState = HAL_UART_STATE_READY;
串口接收溢出后接收不到数据
- 产生问题的原因:超出接收size、在没接收的时候接收超过1个字节的数据。
- 解决方法参考:stm32cube,HAL库 HAL_UART_Receive_IT中断接收多个字符,串口溢出卡死问题。
- 关闭检测Overrun功能,或者使用错误处理回调函数。
串口接收一帧不定长数据
- 可使用
tm32f7xx_hal_uart_ex.h
中的HAL_UARTEx_ReceiveToIdle()
函数。
HAL库操作Flash
- 参考:基于STM32F407 HAL库的Flash编程操作 和 STM32F10xxx闪存编程参考手册
- 在每次擦除或编程前先要解锁Flash,在HAL库中,只需要调用
stm32f1xx_hal_flash.h
中的HAL_FLASH_Unlock()
函数。
- 擦除时最小要以页为单位,传入的地址需要注意是否是页的起始地址。
- 编程时要注意4字节对齐,不同单片机可能不同。