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

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

[复制链接]
wenyangzeng 发布时间:2026-7-4 15:15
一个项目需要与上位机串口通讯交换数据:,
5 q, m3 C3 T4 Q1 ?芯片型号:STM32F407VG,
: M; \0 g; D- P* |系统时钟:外部晶振8MHZ,倍频到168MHZ;
) l; `: i2 f, i& \6 Y固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Examples、USART\USART_Printf;8 v$ ?% _* y7 r  v# A
编译、执行,结果发现串口发送和接收数据都是乱码;, ?1 E! s0 b; m6 B
故障分析:
/ z# \4 |" ~6 I% b% x! B查阅固件库中system.stm32f4xx.c关于时钟配置:5 ]+ S4 B. m6 S/ Z3 J1 V& W
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N *// D$ r. [7 F/ o# f4 |
#define PLL_M      25' \2 {+ R3 W$ j& J5 l' j7 T) N4 f: k

' z9 @4 p2 _2 X  k1 s- U可知STM32F40xxx/41xxx在固件库的默认配置:
3 s0 w+ F, j4 ^% f& p: P9 pHSE Frequency(Hz)  :   使用外部25MHZ晶振;
2 D9 F% m" ]9 o: @) p, K: nSystem Clock source:  PLL (HSE),3 y* A6 o) T# ], j/ O1 }) q
SYSCLK                    :  168MHZ.- L4 [' e! u4 l0 b  I+ S& g
PLL_M                     :255 L" I' l) u' a% w% S* m, }! e/ w: [3 c
PLL_N                     :336: E# z7 T5 Q: j7 d* j6 z
PLL_P                     :2
' O/ N5 m8 Q; O0 K( T+ w; wPLL_Q                    :7# G9 x: u, Y# z# F/ t
- v/ V/ O+ \. ?# i* c7 I9 n! W
由于实际使用的晶振为8MHZ,按照默认的时钟配置当然无法得到正确的波特率,从而导致串口通讯失败。% M7 g+ H1 K! I% H
借助STM32CubeMX,可以方便地配置系统时钟:2 [4 ^& Y1 y! H- v
* s9 F0 E! B7 ]
根据上图配置系统时钟所需正确参数:
, V7 u: U7 T2 @M=4      PLL_M2 D, [; p0 v3 C$ Y5 o
N=168  PLL_N
2 Z9 ?; L" S" t$ F6 C$ MP=2      PLL_P
5 e% E" |! z! K' AQ=4      PLL_Q3 `& V6 A  h* T: N% p# @+ R# ~

/ O9 h! g: W" W' m. s/ e- _' g, _接下来修改固件库中相关文件:+ v  T' p7 q( i" a

+ |  \) J( d- O0 q) U修改stm32f4xx.h* Z1 n4 f. _- M& Q1 R* q8 p

# y6 H7 w2 z& _+ l, {' R
  1. 在70行定义芯片型号:% s$ n* F, p0 ?  x
  2. + u9 g6 ~. W9 o
  3. #define STM32F40_41xxx
    1 ^# m/ [. R. [$ }

  4. 6 d7 F  Z, D; Y# P
  5. 在144行定义晶振频率9 D$ F6 f5 `- P) s) b, Q
  6. ) m9 v$ z. u5 D- W6 e
  7. #define HSE_VALUE    ((uint32_t)8000000)3 H/ ?: ^3 q6 k* u2 [: E
  8. 1 `+ L2 C! r: J9 E8 {, |: F
  9. 修改system_stm32f4xx.c
    % J, t1 b' [; k8 D( C
  10. #define PLL_M     4
    4 H# [+ }8 S5 l4 v) X
  11. #define PLL_Q      46 ~: {* t0 `" U; O9 ]
  12. #define PLL_N     168
复制代码

) `' d8 w6 N. Q% L% d" S% G* M) w! }% z' o
* i# ?8 A4 z0 s. V
串口代码请参考ST官方的,就不贴出来了。经过以上修改,编译运行,已经能够正常进行串口通讯了。
0 M: ~4 c" R* [! c/ p+ W总结:在使用ST传统固件库开发产品过程中,当目标板使用与ST固件库默认值不同的外部晶振时,不能一味拿来就用。应该认真阅读ST官方关于固件库的说明,及时修改相关参数,才能避免多走弯路。
- Y8 w- s6 g7 _
t2.png
赞 收藏 评论0 发布时间:2026-7-4 15:15

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版