0%

STM32CubeMX使用上遇到的一些问题

使用DMA发送串口数据问题

  1. CubeMX生成的代码初始化DMA和UART顺序问题,应该先初始化DMA再UART,可以在CubeMX中调整生成初始化代码的顺序。2207031-CubeMX-1.jpg
  2. CubeMX生成的代码使用HAL_UART_Transmit_DMA()后需要手动将串口状态配置成空闲状态,可以在DMA传输完成中断中加(&huart1)->gState = HAL_UART_STATE_READY;

串口接收溢出后接收不到数据

  1. 产生问题的原因:超出接收size、在没接收的时候接收超过1个字节的数据。
  2. 解决方法参考:stm32cube,HAL库 HAL_UART_Receive_IT中断接收多个字符,串口溢出卡死问题
  3. 关闭检测Overrun功能,或者使用错误处理回调函数。

串口接收一帧不定长数据

  1. 可使用tm32f7xx_hal_uart_ex.h中的HAL_UARTEx_ReceiveToIdle()函数。

HAL库操作Flash

  1. 参考:基于STM32F407 HAL库的Flash编程操作 和 STM32F10xxx闪存编程参考手册
  2. 在每次擦除或编程前先要解锁Flash,在HAL库中,只需要调用stm32f1xx_hal_flash.h中的HAL_FLASH_Unlock()函数。
  3. 擦除时最小要以页为单位,传入的地址需要注意是否是页的起始地址。
  4. 编程时要注意4字节对齐,不同单片机可能不同。