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

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

[复制链接]
wenyangzeng 发布时间:2026-7-4 15:15
一个项目需要与上位机串口通讯交换数据:,8 d: q7 d2 Z" k" I2 T
芯片型号:STM32F407VG,6 q; F! x( i0 X& K6 J' r! ?
系统时钟:外部晶振8MHZ,倍频到168MHZ;) m9 c$ }, j2 q/ M0 j% t3 s
固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Examples、USART\USART_Printf;9 O2 N' k" J, |/ V
编译、执行,结果发现串口发送和接收数据都是乱码;" ~2 J# k. F. y7 Y$ P
故障分析:
6 c9 F2 n) B7 J: F* c# P5 D2 u. X查阅固件库中system.stm32f4xx.c关于时钟配置:
" E/ `6 [( H  E/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */$ |: A2 a" J9 ]3 ~8 Z
#define PLL_M      25
0 f) s: g6 F( g. y
& c" O6 V4 a- B* ?/ e可知STM32F40xxx/41xxx在固件库的默认配置:
% R8 U2 e% _0 X' J. ^# nHSE Frequency(Hz)  :   使用外部25MHZ晶振;  v9 S: A, v" K8 W6 m
System Clock source:  PLL (HSE),+ L# \7 H" ?( [6 ^+ C! q+ w" G2 ~
SYSCLK                    :  168MHZ.9 U6 L0 E! p+ d# v9 X0 K
PLL_M                     :25
. M, _  @% q  Z* x. wPLL_N                     :336
& D' ]  Q/ L) d9 ]  }PLL_P                     :23 ]5 Q6 |3 M6 C; o$ j
PLL_Q                    :7+ n. q1 k' R# O# ~4 {8 f1 {

* d* y9 W; z" V由于实际使用的晶振为8MHZ,按照默认的时钟配置当然无法得到正确的波特率,从而导致串口通讯失败。
  H0 }& S8 g) @0 w* L借助STM32CubeMX,可以方便地配置系统时钟:  I& |2 |2 x$ W& z. L) ~' r

$ j$ l3 G: a* l% x! m, ?0 V3 d+ D7 F根据上图配置系统时钟所需正确参数:
" E" s& ^4 Z1 T4 `! B( Z5 HM=4      PLL_M
: R+ S9 R0 k) k1 L$ `% vN=168  PLL_N
, V9 I" ^+ h% FP=2      PLL_P
' P+ C7 r# H9 S. q2 |Q=4      PLL_Q
8 C2 i: m$ J7 X0 S. `5 \. ?
# i& P) l2 s* H' ?, {7 p  H" K! s# K接下来修改固件库中相关文件:
- V3 K( i7 ]6 {1 G8 L4 a0 `6 m$ B6 o  V$ h: W3 {9 g7 C9 @6 o* A; O
修改stm32f4xx.h
6 D6 J/ H# G+ H" l+ G; o  c1 G) F# Q* a' e  q7 b
  1. 在70行定义芯片型号:
    . K9 i2 F' r# ?
  2. 8 |; p% X4 I4 K# ~7 T$ E. f# ?7 _0 ?
  3. #define STM32F40_41xxx
    # d# A, j0 i1 b+ r
  4. $ q7 J* @' T# D( S% @& h9 N
  5. 在144行定义晶振频率
    ! L2 F& ?% G, E# ?/ m  g
  6. # d3 b5 L8 F! P  E
  7. #define HSE_VALUE    ((uint32_t)8000000)8 y0 E3 H& [. B" V

  8. * R1 I4 i: I% y! l2 P
  9. 修改system_stm32f4xx.c+ d+ ?! I$ R+ O
  10. #define PLL_M     4
    ' T8 V* e, D1 \! }( \9 v( t
  11. #define PLL_Q      42 s9 y" A$ @& {6 j: O
  12. #define PLL_N     168
复制代码
  S7 Y! R5 _5 z# C4 R7 h+ I0 u

5 B$ q0 V  K* S9 B5 o: E. c5 ]9 U' K; s9 P5 b; b0 O; ~, |
串口代码请参考ST官方的,就不贴出来了。经过以上修改,编译运行,已经能够正常进行串口通讯了。
: g9 e7 z/ Y; a6 n- A总结:在使用ST传统固件库开发产品过程中,当目标板使用与ST固件库默认值不同的外部晶振时,不能一味拿来就用。应该认真阅读ST官方关于固件库的说明,及时修改相关参数,才能避免多走弯路。2 O& {4 J. W6 |& m( |( K) `/ V% T' N
t2.png
赞 收藏 评论0 发布时间:2026-7-4 15:15

举报

0个回答

所属标签

相似技术帖

官网相关资源

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