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

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

[复制链接]
wenyangzeng 发布时间:2026-7-4 15:15
一个项目需要与上位机串口通讯交换数据:,
9 Z0 _7 r9 q& W5 S* o芯片型号:STM32F407VG,! N* [7 Y9 M/ v3 i8 `
系统时钟:外部晶振8MHZ,倍频到168MHZ;
  W7 L* O* ~& P$ O; s固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Examples、USART\USART_Printf;
1 n+ L% R. v# l编译、执行,结果发现串口发送和接收数据都是乱码;# V3 V: z! s6 g6 c- {- e4 l  N
故障分析:
8 `( p8 m0 z% J* z查阅固件库中system.stm32f4xx.c关于时钟配置:
# j: u- b6 h" f% M6 k/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */0 z4 @2 c7 m$ Z/ V! d
#define PLL_M      25
! M/ P$ m3 W, h4 a4 X. c' }$ R
% G5 Z, T5 N4 y, k3 x& Q可知STM32F40xxx/41xxx在固件库的默认配置:  Y3 `, J, o2 Y; O: S
HSE Frequency(Hz)  :   使用外部25MHZ晶振;1 U* o1 R9 u* H$ w  W
System Clock source:  PLL (HSE),1 X; a( |$ t; G8 h
SYSCLK                    :  168MHZ.* D1 y9 E$ o4 I! ~; a: k
PLL_M                     :25
; [$ L8 I2 `" N# u- O, uPLL_N                     :336# _, t4 |1 _& l2 V9 p) N2 n
PLL_P                     :25 l( d& J7 J% Z5 t' r8 t" s2 [
PLL_Q                    :7  }0 d- I9 M2 }( ^0 P* `

. J8 M, o0 X. f2 s4 ?+ N由于实际使用的晶振为8MHZ,按照默认的时钟配置当然无法得到正确的波特率,从而导致串口通讯失败。
. |, {. G& C5 \$ }( C6 R0 x借助STM32CubeMX,可以方便地配置系统时钟:: Q( l8 o$ Y; h/ @

+ M- |6 o8 [, ^1 Y/ ~: `3 ~& c根据上图配置系统时钟所需正确参数:
5 E" j/ [2 u' H6 e8 v" N; N9 OM=4      PLL_M
$ r* w; g- F: yN=168  PLL_N
2 L; }" Y( M7 A/ yP=2      PLL_P- Q# _2 _" Z0 O+ f  A2 f
Q=4      PLL_Q3 ]2 b3 N1 E" p% h

' C* M& x) f$ K7 h& m( ~% o接下来修改固件库中相关文件:8 w% _" l- H. b2 t

6 c- K% h4 e. |1 I0 P( U# X修改stm32f4xx.h+ u5 _/ m- l" X* R6 ]

5 d4 T! d, ?% B4 R
  1. 在70行定义芯片型号:0 v3 s3 n) D2 A' [5 v  f

  2. 9 r8 a! E, N4 b2 t4 {, n$ o2 M/ m" _
  3. #define STM32F40_41xxx# z/ Y9 n/ I+ P+ z. X

  4. 8 S2 d7 r1 g4 E  [9 ]2 E3 H
  5. 在144行定义晶振频率8 V" S) y6 U# P4 x. E
  6. ; \1 k- V0 }3 b# X
  7. #define HSE_VALUE    ((uint32_t)8000000)
    ( o/ h% H0 Y; u' o( {
  8. 2 x9 h; x$ C- `: D0 H4 x- ~
  9. 修改system_stm32f4xx.c8 Z+ J) T  R1 P* j2 ^# r" }! P, Y
  10. #define PLL_M     4
    , X+ ~; u# g9 u5 Z
  11. #define PLL_Q      4
    + H8 f% _; Q- ~9 i# J
  12. #define PLL_N     168
复制代码
* x8 I/ |$ C1 Z5 H% u/ f- `; Z

& F6 J" t! P  Y5 v6 u6 V7 \5 }! J- e" k: w
串口代码请参考ST官方的,就不贴出来了。经过以上修改,编译运行,已经能够正常进行串口通讯了。% p! {6 n8 B* v
总结:在使用ST传统固件库开发产品过程中,当目标板使用与ST固件库默认值不同的外部晶振时,不能一味拿来就用。应该认真阅读ST官方关于固件库的说明,及时修改相关参数,才能避免多走弯路。
7 n4 K( K* T3 {6 V2 s  s- B
t2.png
收藏 评论0 发布时间:2026-7-4 15:15

举报

0个回答

所属标签

相似技术帖

官网相关资源

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