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

STM32串口通信出现乱码

[复制链接]
STMCU小助手 发布时间:2022-12-23 16:00
问题产生8 |: k/ l# B7 |* a0 J& i; n2 `
最近学习了一下32的串口通信,串口配置还是很简单的,不过后面串口调试助手上面出现的乱码。很让人头疼。
" s1 B6 H* v$ {! e- \' p% S/ L
当然第一时间去百度寻求解决办法。
4 q+ p* m4 H+ ~% \2 A- C. G- n5 }0 \* g* E6 W6 z  H" Q5 [- F
先排查这两个问题2 j2 ^( L% O2 S5 y
1.USB转串口的问题! m& B* w" B! i. R* E) |3 U
解决方法: USB转串口坏了的话,换一个好的就没事了。(ps:这个出现的概率比较小)+ ?' N1 v7 v0 q+ d) D% O: d

9 b/ T% t& F0 g( d6 o

" c: n- ?0 N$ Z0 A2.波特率不同步的问题

/ r, n" h+ G, d( a3 |$ ~出现乱码,首先检查一下,串口助手的波特率是不是和程序设置的是一样的,如果一样的话出现乱码,参考下面的解决方法。
# Y+ ]: H! B7 D  Z& B
: E9 b0 S5 w  g2 [9 f/ K. V

9 g& K, N5 D8 w6 n外部晶振对串口的影响
/ o: }  m* q2 _stm32的串口使用的是外部高速时钟的时钟源
/ x6 o$ q! s; m* y, ^

/ |2 L; s1 Q2 `3 y* ^, N8 c$ r: o$ P串口外设是挂在APB总线上的,一般用于低速外设,它是AHB总线时钟分频所得。
" y& ?* R4 }, J, f9 X  k4 ]+ _. t这样设计分频是为了降低低速外设的开关损耗。9 ~9 e. g4 [  V  k; U! I& t# \: V6 v: K
! B4 q( D. F8 f
然而AHB总线的时钟又源自于高速时钟源。高速时钟源可以是高速内部时钟、高速外部时钟、高速内部或外部时钟PLL倍频所得。$ R: T* T& `2 Q- s" H; j

8 l! G  U1 O; v: w  ]8 A所以最终串口的波特率受高速时钟的影响。: Z6 ]# o: P, A. J  `! N2 {
. O+ o/ M- k# `' D- [# O. v' p6 Z+ m
20200529211121373.png
4 l- l$ S1 |* I% {9 k
) I: t0 @( Y3 r3 O

9 v  c3 \. A, x/ `" A问题解决6 v. C: M7 {+ w# n3 \
首先找到自己板子上外部晶振,并确定它的大小。
5 C" B. p2 `! @: N
+ p8 Z4 z! L# A- M
20200601171957548.jpg 4 H! L. K2 {5 v$ t+ j) L
/ y2 D( e/ {7 @- z" W2 B
▲ 博主板子上晶振是8Mhz! C7 g% J) o1 R" \8 v" Q+ ^  G) \
在官方标准库中,外部时钟频率配置默认 25MHz 的晶振。
( x& h1 t3 M1 }' n; v1 v. Q" H7 V! y$ `
而我们需要将外部时钟频率配置成适合自己板子的。
5 ]  m+ J& p) w* r* X; [8 G
1 i: ]7 s& ~, D" W2 \* w找到 stm32f4xx.h ,在 .h 文件120行左右的地方,默认是这样的:
2 ?( n: n, x. V% x+ A% m2 R$ @
) S  q* u3 r, U- y
  1. /**, g( i9 B# a" \/ p2 q
  2. * @brief In the following line adjust the value of External High Speed oscillator (HSE)" O5 d2 V9 V2 v$ |- u5 K. w8 b' j
  3.    used in your application 4 ?& h2 @0 o+ T' a" W+ ?
  4.    
      }' M, a' v$ h4 |+ U. o" B& L& M
  5.    Tip: To avoid modifying this file each time you need to use different HSE, you
    ; B% T& l! \7 g. h
  6.         can define the HSE value in your toolchain compiler preprocessor.
    4 ^4 D# r6 i# O  d1 k. X
  7.   */   
      T9 M% y1 r8 p2 p
  8. #if !defined  (HSE_VALUE)
    1 x1 M- ~" l4 n
  9.   #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
    4 V! G- w( h8 Q6 J, w4 y
  10.   , b- g! g2 b. o2 @/ o6 z" q2 a
  11. #endif /* HSE_VALUE */' R0 y) e6 g- m4 |
复制代码
# V2 E3 t; D" o
▲ 默认25Mhz- x8 Y- z5 Z5 @: P# N; G
下面只需定义一下自己开发板的外部时钟源频率即可:(加个宏定义)2 l/ _9 G" ]% s- @+ ~- j3 `3 V
  1. /**
    3 ]3 Y5 Y+ W0 C) j
  2. * @brief In the following line adjust the value of External High Speed oscillator (HSE), x  b! a! O) \- d
  3.    used in your application , O4 r% r3 T1 ?2 G" F9 Q+ @
  4.    
    6 B" w% `' y* G: G" \- M
  5.    Tip: To avoid modifying this file each time you need to use different HSE, you
    & P, ]3 }' x, h( Q+ u2 j! p
  6.         can define the HSE value in your toolchain compiler preprocessor.! V6 M' H- x' L. x8 y' K
  7.   */    & j  [3 Z  j2 [6 \$ J) f' Z7 d
  8.        
    $ x" Z) k- M2 u
  9. #define HSE_VALUE   ((uint32_t)8000000)    // 定义自己开发版上的外部时钟源频率
    8 w  c' |* g3 \) ~$ a0 r: X2 q6 x7 ?
  10. #if !defined  (HSE_VALUE)
    6 I+ w$ Y$ d6 x' Q7 p& }
  11.   #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
    ) E2 W$ j4 r" A( v9 \& h2 b
  12.   
    - f* p" M6 x) V
  13. #endif /* HSE_VALUE */
复制代码
- s9 n! B. h2 G7 C+ R; z/ H" Q  H
附:如果串口助手没有收到任何东西,请检查连接 TX 、RX 端子的杜邦线是否松动。
# ^$ P8 `9 w& M+ y! c9 I, K1 B" W5 Y9 G( y, ]0 a: A$ c

  x" r" q$ f- f  H总结4 z2 F8 \) t1 G0 |) x9 q
对于 stm32 的 F1 和 F4 等系列,如果出现串口通信出现乱码的问题,都可以尝试使用上述方法解决。8 v- M: l4 G& }$ E% e
+ s3 j7 q5 `# w8 g- k
自己开发板上的外部晶振要了解,如果某一总线的时钟来源于外部时钟源,自己使用的外设恰好挂靠在该总线上,利用官方标准库,一定要将 stm32f4xx.h 文件中相关配置加以修改。
6 v: ?: V( g( Y; w+ I5 E! ^————————————————
( F4 P/ q5 Q- m版权声明:AXYZdong
! N* ^2 P4 f6 O! P2 J7 C# s$ f' j
, h/ V& D8 S. ?7 Q! k3 A2 S
赞 收藏 评论0 发布时间:2022-12-23 16:00

举报

0个回答

所属标签

相似技术帖

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