请选择 进入手机版 | 继续访问电脑版

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

【经验分享】STM32的串口(UART)及串口通信原理(内附代码)

[复制链接]
STMCU小助手 发布时间:2022-5-17 22:00
一、通信接口介绍2 e8 }/ `3 L: k6 b

: D. m; }+ h& _    1、处理器与外部设备通信的两种方式:      0 G+ |. M' K4 m8 `2 I% R6 I, C

7 N/ a- k8 U' r        并行通信0 B- Q" h/ u. k; h6 b* h
$ u0 G; U$ ?/ F+ u  ]
    -            传输原理:数据各个位同时传输。' ~0 l5 X, q: i9 Y: E, m& @

( z$ E( _7 M' L- O: x  U                -优点:速度快
3 S* A" {' x/ v& p' u7 v
7 f! K2 f* E1 [" T9 H                -缺点:占用引脚资源多9 t& T: ^+ D2 Q. l! u* J
  m9 w5 v6 q' k4 r* g0 Q
        串行通信
) |7 h, @5 Y( T) @
$ y7 E  V: N/ X; b   -            传输原理:数据按位顺序传输(一位一位传输)。
8 g! Q2 A: d4 V
1 C# @, x" N0 L8 j$ n                -优点:占用引脚资源少8 t  e: Q; r; E: b& ^' g
7 [8 A& T8 p8 a
                -缺点:速度相对较慢) E( x4 e" V4 @# I9 X0 f

$ |9 [) Z* Q+ U3 P/ d    2、串行通信三种传送方式:" k: W  \* U5 w9 c7 I9 Y# e

! X/ E% X8 d% S1 f: ]* d" ]        单工:
! k5 C2 ^8 a6 O# n7 g5 a6 _5 w/ k* v% X, ~; x
               数据传输只支持数据在一个方向上传输
7 l$ g4 K( `4 W  z2 W8 g/ z0 O
        半双工:& o+ y: g! O1 w3 _

8 F0 B+ m* x: e: e) K               允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
  b, z) D  v6 e) |* C
. V# Z- T, p" k" @- s  H        全双工:
9 @+ M# t. O) k- T7 R5 m) |4 l, G1 V7 B
               允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。* u8 Q1 {- g4 J  i% Z9 Y% [2 h

" O; Y0 H' p  Y4 h @6@17M2T%0HF${CRM(1@Q3P.png
! U% B& z4 X$ D' G
# l2 u& j7 H2 D$ T' A    3、串行通信的通信方式及举例- r+ ^3 e+ F) I3 g. ]
% g) i% [1 D9 e- `, @
        同步通信:带时钟同步信号传输。         -SPI,IIC通信接口# _# n* L% |& N5 h! `
' c) V+ t$ ?( e
        异步通信:不带时钟同步信号。            -UART(通用异步收发器),单总线0 L: b4 _" J) B7 O! c
, {9 z1 b$ W6 U* X! K% {! p
{IYE1VNHID04V`~7M]1PB2P.png & v, i) \0 E: _* ?2 L; u( U
6 [# n' J/ o2 T
二、什么是串口:* F# H4 y! D" l2 g8 |8 [$ M$ ~

, `5 t: N, D/ W    串口是我们的大多数微控制单元(MCU)都具有的基本的外部接口,一般串口最基本的功能就是调试,又能做数据通信的接口(数据量要小一些)。6 e% a  e6 G* N3 j% o  a

+ E" {0 g/ J" V# T: _# r    数据从A到B只能通过1根线,数据就像是羊肉块一样被串在线上
, ?& A' [+ Z8 R, V5 S/ i3 V3 |2 }8 d0 C9 U5 ~6 X
        UART:通用异步收发器
! j! t" G2 H$ u) r" G; h; p" O, b* \/ K6 q0 A
        USART:通用同步异步收发器
& U( `& k1 o! `+ I
5 t- z" x% X! G% @8 w* g: x三、串口电平标准及引脚连接方法:5 d2 ^9 v1 P! c9 e7 |9 R

1 p6 i/ ~7 _3 Y+ Q  a( M    1、电平标准, ~# {$ x2 T4 r% i* Z
! h- m$ s6 r* d3 |/ K! A5 G" S
     TTL是常见的模块的通讯电平标准:串口wifi、串口蓝牙(4针接口:VCC、GND、TXD、RXD)+ Z) s: X' f4 x, y, O( f
0 A. Y! r6 R2 F
     232一般是数据通讯接口:台式电脑的主机背后的九针接口( [. v3 h& E, j" g) S5 L* ], v0 u
/ D2 A% F8 V+ }1 k$ _, {0 Z
{5J}[(WI131SYPS8K6PSLK0.png
9 M& ?0 P7 y. L# M2 `1 R4 L1 v8 ]# }% }) h& J
    2、连接方法
- t! [  y# ]* `$ o3 {8 t9 n( ?, H4 H* J4 E$ ]8 y+ d
        RXD:数据输入引脚。数据接受。4 ?' l0 {6 u# y/ Y2 x

  G) G% @, B" o  J$ R        TXD:数据发送引脚。数据发送。) C: [' B1 K5 z" R- q/ G
3 r/ B! j2 o/ V: }9 |
GD4A`A[72@7O58BQVT`DOV0.png 2 U9 g* _: u9 z
O]WMUM6W`B2B@OT4]XYF00Y.png $ r" w# r9 T8 B" D

. I5 A* ^3 @- Q# C3 W四、STM32串口通信过程5 `. L2 l5 ?6 N8 C& _
: K$ m- c: t- A, t1 O+ G
数据接收过程:1 w+ C% n" G8 T2 N* A. l3 n
, X$ D4 N( B! n) w
322LHZ3](4T8GYOK@_B_SYV.png
; n0 T' I) Z$ C& b, I, ]# i  |
2 [0 K) X% W1 J6 G1 s9 W9 o; F数据发送过程:
6 E2 ~5 t0 w8 x3 K$ F& Y! |( J4 L
7 s; Z. K' z8 t' E  R# P9 ~. p I]ZS_SM]I}ZH3I7@N~8X4[M.png 7 _0 u" l9 F' y0 u) L
, C- f, D/ ~1 `" ]. Y( j5 i
五、STM32串口异步通信需要定义的参数+ [8 Q" v3 w/ C/ Q8 t2 L) Z7 {  O8 x: Q

+ @7 f" ^4 s7 @: b# S- w2 u" I8 O4 B        ①起始位1 S, _- u9 M6 W9 q7 k, n7 b( M
/ d+ m" y) E2 D6 I" ]- D, g- E. P
        ②数据位(8位或者9位)   9位是带奇偶校验位" r; ], X( K4 ?( c9 ?( c
0 J7 G, S7 R% A
        ③奇偶校验位(第9位)   
& {: h, W& w: W$ Z# W1 ^0 {2 L& J3 M4 V
                奇检验就是保证8位数据位中1的个数为基数个,如果1是基数个则检验位就为0,反之为1;# f1 L$ u5 U( C7 x* ]5 S% R
$ A4 k  [0 `$ C6 C  F: o# X& I
                偶检验就是保证8位数据位中1的个数为偶数个,如果1是偶数个则检验位就为0,反之为1;$ z9 I' ]0 U% Q! S) }

1 c) x5 U! K, l" O7 L" O; D7 q        ④停止位(1,15,2位)
# a  Z: U* I6 ]! o( R* B+ _
: t- X7 \' ]0 X, G        ⑤波特率设置* s* A8 o9 f* `9 |( F
$ ^1 @) ?4 x2 {: Y3 X5 `# O
6KRL6DUA5[@T31X[98ROG8I.png
0 U0 R9 r; i$ ]' o- K/ ?" b- \/ V! f8 A8 a6 {5 f
六、UART配置过程  " ^* C; }' ~% y# m& V

1 W7 G' @* }2 C- u* [
  1. //1、串口时钟和GPIO时钟使能
    6 Y8 Q! |6 a5 h  _! G  k0 b. p% T4 `
  2. % Y. c  k9 }6 E: N( L3 }
  3.         ①串口时钟使能: RCC_APBxPeriphClockCmd();
    3 [* f2 H, Q* ^& X
  4. / O3 J0 j, c: s3 k, P3 R
  5.         ②GPIO时钟使能:RCC_AHB1PeriphClockCmd();7 ~* C  x, r1 e8 J  n" Q4 q

  6. , g( {2 ]0 @2 R9 ~: ^) j& _0 ?
  7. //2、设置引脚复用器映射:7 x% K- x; @9 N0 B. z
  8. 6 G9 g7 C5 U. A+ D- u" v
  9.         GPIO_PinAFConfig();
    ) }$ G* h6 m$ i% N8 U, o# {

  10. 0 f- T$ H2 R% ]' ]0 v  f# U
  11. //3、串口参数初始化(GPIO配置)(五大参数)/ t4 w* V3 F) V1 W
  12. 9 p$ \  r/ S2 @% [% L2 S9 I8 X
  13.         GPIO_Init();//初始化
    1 ~: Q  Y% L( j

  14. * F" r( X7 ~7 _+ i$ K4 d
  15. //4、串口参数初始化(六大参数)
      V' y3 G, h% Z8 _6 {5 }
  16. % [/ ?$ D5 T' P, |, [
  17.         USART_Init(); //初始化串口4 w; b- a4 s6 t" `

  18. . d% Y6 {' d8 \7 o- ~
  19. //5.使能串口
    - H9 L% S5 b9 M% ?# F8 N

  20. ; ^" n0 o! c8 ]5 l. C; ~
  21.         USART_Cmd();5 l: [5 \5 J- f# |

  22. / Q  H' A$ j. H3 ~2 J, k
  23. //6.开启中断(如果需要开启中断才需要这个步骤)
    % A: r3 c' z- M: t
  24. , _  I  g( O/ G# O  l
  25. //  设置中断进入的条件:接收数据缓冲区有数据的时候就会进入中断
    ( J) D/ m2 a7 F

  26. & x' V# S- r9 j+ h* P  k
  27.         USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);
    0 o9 h" w3 Z4 Y; ]
  28. ( R4 ]+ v) ~) {0 L# N. _
  29. //7.配置NVIC中断(四大参数)9 T; f+ t5 h6 k3 z7 Y
  30. 7 [7 C6 l3 r2 a  m" f
  31.         NVIC_Init(&NVIC_InitStructure);3 B9 v. I, g' [4 M' }- I
  32. / H3 c- D7 w9 M4 J5 n& X4 N/ \9 F
  33. //8、编写中断处理函数:USARTx_IRQHandler();
复制代码
  1. //串口数据收发:$ b2 L+ J8 Y4 |4 @( x5 \
  2. 3 c0 N" \* t. Z
  3.     void USART_SendData();//发送数据到串口,DR& j2 ]2 D+ ?% Z% R) n  t4 D

  4. ! s8 r* t2 @8 b" c* Q' @( D
  5.     uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
    . Z/ }9 ^! H" }. M  k7 s+ @

  6.   I) G/ P0 F5 D1 X9 ]
  7. //串口传输状态获取:
    5 S" U8 }( x) }0 d* l3 K* ^
  8. + _+ [7 t5 n0 w3 B" P
  9.     FlagStatusUSART_GetFlagStatus();
    6 V9 N4 T) |2 S* G

  10. $ O4 A! \% a! h2 ?1 o8 s
  11.     void USART_ClearITPendingBit();
    7 @. c3 G- m: N. T8 g( [: \6 W

  12. ' g/ v: y; a4 t. N0 k, O0 K8 n& z
复制代码

4 C( ?* ?4 ?/ c9 }- ~* k4 h* K7 t3 u) e/ {* `0 ]
收藏 评论0 发布时间:2022-5-17 22:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版