
STM32串口通信基本原理 通信接口背景知识2 d: O2 ?' |- i" ^6 Z, [+ f 设备之间通信的方式8 k x( S9 s# L3 ~ d2 q$ P8 ?3 k 7 [! d! w0 ^% p* I% V) f 一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。并行与串行通信的区别如下表所示。% j6 A& ^9 _+ A; b, x: ~! t ![]() 1、按照数据传送方向,分为:6 g% }6 `/ ?9 k 单工:数据传输只支持数据在一个方向上传输;* \0 s, Q& M4 Z9 |2 n 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口。- U8 h+ p' r( Y L: [$ Q 全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端。- C6 K4 z! ]- g' A) e9 Z+ N ![]() # ~5 p0 h* Y- A* _+ e6 Y: c! Z 同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口。 异步通信:不带时钟同步信号。比如:UART(通用异步收发器),单总线。3 ~' y n) P+ J" h c+ m 1 A/ u6 h) x, W+ O 在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通讯中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样。; t* s5 i) j$ ~% G , N% @5 H. }) G* \( i% f5 V 在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些用于同步的信号位,或者将主题数据进行打包,以数据帧的格式传输数据。通讯中还需要双方规约好数据的传输速率(也就是波特率)等,以便更好地同步。常用的波特率有4800bps、9600bps、115200bps等。! G- A: B# ?$ d9 E 在同步通讯中,数据信号所传输的内容绝大部分是有效数据,而异步通讯中会则会包含数据帧的各种标识符,所以同步通讯效率高,但是同步通讯双方的时钟允许误差小,稍稍时钟出错就可能导致数据错乱,异步通讯双方的时钟允许误差较大。6 ^1 i# G# X! g 常见的串行通信接口5 o4 ^& X' M7 O+ V ![]() + W0 v A' v: _/ _+ B' |: Y STM32的串口通信接口有两种,分别是:UART(通用异步收发器)、USART(通用同步异步收发器)。而对于大容量STM32F10x系列芯片,分别有3个USART和2个UART。. q( P) M! x) I# U UART引脚连接方法 RXD:数据输入引脚,数据接受; TXD:数据发送引脚,数据发送。 ![]() ![]() ! L% p8 ?/ ~; n/ X9 [ % [. b: ?# Y9 _9 Q 经过电平转换后,芯片串口和rs232的电平标准是不一样的: 单片机的电平标准(TTL电平):+5V表示1,0V表示0; Rs232的电平标准:+15/+13 V表示0,-15/-13表示1。 $ u1 d4 a3 b" G# _; c / |" I9 j' R& f( y* H2 S d( s! k RS-232通讯协议标准串口的设备间通讯结构图如下: ![]() ![]() 台式机电脑后面的9针接口就是com口(串口) 在工业控制 数据采集上应用广泛上图中,最右边的是串口接口统称为RS232接口,是常见的DB9封装。; p! ~1 D9 c! p ![]() ) }( M2 J4 w0 S- M 2脚:电脑的输入RXD/ v, q3 x- V/ O) h4 h ` 3脚:电脑的输出TXD 通过2 ,3 脚就可以实现全双工(可同时收发)的串行异步 通信. H" O4 ^9 D- {4 k. c 5脚:接地 单片机的P3口是有两个复用接口RXD 和TXD。这是单片机进行串行通信的收发口,连接应该错位的对应到电脑的TDX RDX上。注意:单片机和RS232的电平标准是不一样的。 $ `0 y$ B' K {5 ]' x8 j* l7 F 9 @6 v% G/ H! \3 D) z/ ] 单片机的电平标准 TTL电平 :+5V表示1 0V表示0。 RS232的电平标准 +15/+13 V表示1 -15/-13 表示0。) e8 f J* w) g: x. y& i. a 所以 单片机与电脑串口通信就应该遵循下面的连接方式: D8 x0 m% K* o2 `. g 2 ^6 O5 T* _7 {0 m/ G/ w, ^ 在单片机与上位机给出的rs232口之间 通过电平转换电路(最上面图中的Max232芯片) 实现TTL电平与RS232电平之间的转换,PC串口与单片机串口连接方式图:/ m2 d& F1 N7 Y' S" r8 A: N, N ![]() 9 T4 L* I8 A1 f$ V# f+ m7 k % k' ]! R5 W: B 这里的交叉连接的意思是 DB91的RXD连着DB92的TXD。 ![]() 这个时候在电脑上位机上需要安装串口驱动程序。3 w3 r( Y y& U) L6 ]0 z# c 注意,这个驱动程序驱动的是PL2303芯片(在上图的大头里面) 使得RS232信息转换成USB信息。 H7 _3 }. k, w& n% y) [" I# i 1 K( X: Q7 w& B6 K/ a 下图为上图的内部结构:( z" X* B9 E& B' f9 R1 p, @ ![]() 0 A0 z5 s: ~' q( J1 c9 f- F STM32的UART特点. n/ K _3 ^* A 全双工异步通信; - y8 _+ O p$ L 分数波特率发生器系统,提供精确的波特率。发送和接受共用的可编程波特率,最高可达4.5Mbits/s;1 c- w0 B. K% l0 m' p5 T5 E I* m8 s- y 0 K6 D: M: `8 b. H3 c7 O6 ` W 可编程的数据字长度(8位或者9位); ! X5 g2 ]$ k+ u# |0 }4 R) o" q 可配置的停止位(支持1或者2位停止位); 可配置的使用DMA多缓冲器通信;: _* Y% g; G1 p# c # D2 y9 t* l" o, t 单独的发送器和接收器使能位; 检测标志:' p+ r# ^3 R! ^ ) ^/ d9 a/ F M* x. Q. f . I! {, ^5 ^( p ① 接受缓冲器 ②发送缓冲器空 ③传输结束标志; % b: C! M* {( v, x. L- R ! O+ i& w- F% C+ i% d' D 多个带标志的中断源,触发中断;5 r; z i0 M" D& I5 A- c$ U 7 ~3 M4 s3 v7 X( j1 W 6 W$ h2 h0 n7 A3 q 其他:校验控制,四个错误检测标志。& T z( R1 o1 @ : a# {2 D* Y A& S 串口通信过程 ![]() ( T5 m0 i$ q8 c% L. E) U ( g8 _: H5 g# f( `. _+ ^ 串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口,通讯双方的数据包格式要规约一致才能正常收发数据。 ) U' W: y8 t1 N8 Q. q) K $ k3 l8 _6 H7 N! U7 P+ E& G STM32中串口异步通信需要定义的参数:起始位、数据位(8位或者9位)、奇偶校验位(第9位)、停止位(1,15,2位)、波特率设置。. c$ u1 G9 U1 s+ P 5 d5 D8 g s5 I, }8 j$ S$ ~' U UART串口通信的数据包以帧为单位,常用的帧结构为:1位起始位+8位数据位+1位奇偶校验位(可选)+1位停止位。如下图所示:5 p P+ Z0 n1 Q0 X" N3 |$ y ![]() & \8 q9 `) y. J7 ]; l, a 校验方法除了奇校验(odd)、偶校验(even)之外,还可以有:0 校验(space)、1 校验(mark)以及无校验(noparity)。 0/1校验:不管有效数据中的内容是什么,校验位总为0或者1。( N) m1 z5 @, [8 T2 e3 F' I# t , r, c. g6 I& r S7 `7 b UART(USART)框图 ![]() 2 `) o: z7 n+ Y " I( M& X0 s: |* b: i6 V 框图的上部分,数据从RX进入到接收移位寄存器,后进入到接收数据寄存器,最终供CPU或者DMA来进行读取;数据从CPU或者DMA传递过来,进入发送数据寄存器,后进入发送移位寄存器,最终通过TX发送出去。9 {' Q& P6 Z9 S; j' t: y3 p * G/ V+ M+ @0 O; P 然而,UART的发送和接收都需要波特率来进行控制的,波特率是怎样控制的呢?. w4 ~" z& V( D- K5 }3 x $ [- S: X+ w+ F' ^ D8 G 这就到了框图的下部分,在接收移位寄存器、发送移位寄存器都还有一个进入的箭头,分别连接到接收器控制、发送器控制。而这两者连接的又是接收器时钟、发送器时钟。也就是说,异步通信尽管没有时钟同步信号,但是在串口内部,是提供了时钟信号来进行控制的。而接收器时钟和发送器时钟有是由什么控制的呢? - q0 h: e: b/ G2 ~ 可以看到,接收器时钟和发送器时钟又被连接到同一个控制单元,也就是说它们共用一个波特率发生器。同时也可以看到接收器时钟(发生器时钟)的计算方法、USRRTDIV的计算方法。 p1 g2 b7 b; l3 _6 Y |
学习了 |