|
一个项目需要与上位机串口通讯交换数据:, 芯片型号:STM32F407VG, 系统时钟:外部晶振8MHZ,倍频到168MHZ; 固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Examples、USART\USART_Printf; 编译、执行,结果发现串口发送和接收数据都是乱码; 故障分析: 查阅固件库中system.stm32f4xx.c关于时钟配置: /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ #define PLL_M 25 可知STM32F40xxx/41xxx在固件库的默认配置: HSE Frequency(Hz) : 使用外部25MHZ晶振; System Clock source: PLL (HSE), SYSCLK : 168MHZ. PLL_M :25 PLL_N :336 PLL_P :2 PLL_Q :7 由于实际使用的晶振为8MHZ,按照默认的时钟配置当然无法得到正确的波特率,从而导致串口通讯失败。 借助STM32CubeMX,可以方便地配置系统时钟: 根据上图配置系统时钟所需正确参数: M=4 PLL_M N=168 PLL_N P=2 PLL_P Q=4 PLL_Q 接下来修改固件库中相关文件: 修改stm32f4xx.h
串口代码请参考ST官方的,就不贴出来了。经过以上修改,编译运行,已经能够正常进行串口通讯了。 总结:在使用ST传统固件库开发产品过程中,当目标板使用与ST固件库默认值不同的外部晶振时,不能一味拿来就用。应该认真阅读ST官方关于固件库的说明,及时修改相关参数,才能避免多走弯路。 |
关于在Keil开发环境中导入第三方库lib时,出现类型冲突的原因及BUG解决方案!
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
STM32固件库分享,超全系列整理
【MCU实战经验】基于STM32F103的二轮平衡车(6轴上位机 源代...
10张图带你完全掌握STM32 GPIO,从入门到精通,收藏就够了!
微信公众号
手机版