你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除

[复制链接]
wenyangzeng 发布时间:2026-7-4 15:15
一个项目需要与上位机串口通讯交换数据:,
芯片型号: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

  1. 在70行定义芯片型号:

  2. #define STM32F40_41xxx

  3. 在144行定义晶振频率

  4. #define HSE_VALUE    ((uint32_t)8000000)

  5. 修改system_stm32f4xx.c
  6. #define PLL_M     4
  7. #define PLL_Q      4
  8. #define PLL_N     168
复制代码



串口代码请参考ST官方的,就不贴出来了。经过以上修改,编译运行,已经能够正常进行串口通讯了。
总结:在使用ST传统固件库开发产品过程中,当目标板使用与ST固件库默认值不同的外部晶振时,不能一味拿来就用。应该认真阅读ST官方关于固件库的说明,及时修改相关参数,才能避免多走弯路。
t2.png
收藏 评论0 发布时间:2026-7-4 15:15

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版