|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
CC3200AI实验教程 ——疯壳·开发板系列 串口
- c1 z& A/ Q- T' |* H
4 g9 [" H, P# Y/ i3 L& l' V, K, N8 x- V* W% T a7 w4 ^5 R
- I' |( Z" q' C
串行接口分为异步串行接口和同步串行接口两种。异步串行接口统称为通用异步收发器(UART)接口,同步串行接口有SPI和I2C等,同步串行接口除了包含数据线外,还包含时钟线。
8 x2 r. F0 k3 B2 P$ r 本次实验中我们使用的是UART,也就是异步串行通信接口。UART的相关标准规定了接口的机械特性、电气特性和功能特性等,UART的电气特性标准包括 RS-232C、RS-422、RS-423和RS-485等,其中RS-232C是最常用的串行通信标准。RS-232C是数据终端设备(DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准,其中DTE包括微机、微控制器和打印机等,DCE包括调制解调器MODEM、GSM模块和Wi-Fi模块灯。
! z+ i- k) h2 ~0 w# ]* V% e RS-232C机械特性规定使用25针D型连接器,后来简化为9针D型连接器。RS-232C的电气特性采用负逻辑:逻辑“1”的电平低于-3V,逻辑“0”的电平高于+3V,这个TTL的正逻辑(逻辑“1”表示高电平,逻辑“0”表示低电平)不同,因此通过RS-232C和TTL器件通信时必须进行电平转换。
; M2 [$ T7 ~ x7 E# l. M 目前微控制器的UART接口采用的是TTL正逻辑,和TTL器件连接不需要电平转换。和采用负逻辑的计算机相连接时需要进行电平转换(我们一般使用USB转串模块)。4 l( q/ P6 q) A7 Y" ~8 ^; d
CC3200包含两个可编程UART接口(UARTA0~1),主要特性如下:
4 Y% [9 g/ Y( e* e. D. E a、可编程的波特率发生器,允许速度高达3Mbps;
/ W2 @: X1 k W0 j b、独立的16*8发送和接口FIFO,减轻CPU中断处理负载;
& }$ J6 x: q/ T | c、可编程FIFO长度,包括提供传统双缓冲接口的单字节操作;9 b* @! q6 g) {) ?6 {" } V
d、FIFO触发阈值包括1/8、1/4、1/2、3/4和7/8;
2 a5 ~2 o$ o' m2 h" v e、标准的异步通信起始、停止和奇偶校验位。
% X- D" v, t; u1 W1 Y& V" b CC3200的UART接口具有以下可编程串行接口特性:( ]0 I" I" W& e* I. ~
a、可编程的5、6、7或8位数据;
; v+ D7 n" V2 y* Y% X b、偶、奇或无校验生成/检测;1 K* Y, B$ i+ o- e7 O- r
c、1或2个停止位生成;( Y2 i J, M, z5 t) o$ r
d、支持RTS和CTS调制解调器握手;% E: k* y% e( }& C* J( L2 o
e、标准的FIFO阈值中断和传输结束中断。
3 |% H0 D( c; x/ a# m- T. L CC3200的UART支持DMA,使用DMA可实现高效传输,UART具有单独的DMA发送和接收通道。支持当FIFO中有数据的单个请求接收和可编程FIFO阈值的突发请求接收以及FIFO中有空间的单个请求发送和可编程FIFO阈值的突发请求发送。
( [& H: ]) f1 x 1.1寄存器" @+ G# T5 E8 O2 u7 |8 H
UARTDR为数据寄存器(也是FIFOs的接口)。4 _+ a6 @7 E7 i1 V" P* G
在发送数据时,如果FIFO使能了,则写入该寄存器的数据会发送到发送FIFO 中。如果FIFO关闭,数据会被存储在发送保持寄存器中(发送FIFO最低一个字)。写该寄存器意味着通过串口发送。
$ I9 x" a! @) L 在接收数据时,如果FIFO使能了,数据字节和4位状态位被发送到12位宽的接收FIFO中。如果FIFO关闭,数据字节和状态被存储在接收保持寄存器中(接收FIFO中的最低一个字)。可以通过读取该寄存器来获取接收数据。如图1.0.1所示为UARTDR寄存器,如图1.0.2为其位定义。4 i5 Z S) {. J* u
7 X2 |' K- |7 L2 r, P
. k. k3 k$ g( J3 a. u/ [2 J 图1.0.1 UARTDR寄存器0 m5 s) C7 X. w3 h* h6 Q$ a2 c
; g# U9 [! M/ n
+ [% s2 T, P/ g/ t) x/ q/ x
图1.0.2 UARTDR寄存器位定义% e4 H; {3 e t/ C/ w4 V
UARTRSR_UARTECR是接收状态寄存器/错误清除寄存器。除了UARTDR寄存器之外,接收的状态位也可以通过UARTRSR寄存器获取。如果从该寄存器读取状态信息,则状态信息对应与在读取UARTRSR寄存器之前的UARTDR的状态信息。当有溢出条件发生时,状态位中的溢出标志位会立刻被置位。UARTRSR寄存器不能被写。写任何值到寄存器UARTECR中将会清除帧、校验、打断和溢出错误。复位会清零所有的位。如图1.0.3所示为UARTRSR_UARTECR寄存器,如图1.0.4为其位定义。
% d; y. | n* Z# O0 O5 H9 t8 y
5 |* K* q/ i( p. P' n3 A, k% _
+ ^- K, l, p* Q- ^8 y
图1.0.3 UARTRSR_UARTECR寄存器' z2 B8 h7 b T) C' p
. D) ?5 A7 ^# t0 p4 H5 F9 D
( I# z. O! l/ H 图1.0.4 UARTRSR_UARTECR寄存器位定义! |0 C# v5 g g- q4 O" g
UARTFR为标志寄存器。在复位之后,TXFF、RXFF和BUSY标志位为0,TXFE 和RXFE位为1。RI和CTS位指示调制解调器的控制流和状态。这里需要注意的是,调制解调位只在UART1中有效,在UART0中是保留位。如图1.0.5所示为UARTFR,图1.0.6为其位定义。
) `- M- `( _$ a# W7 L f
7 M# S( o( U! M, X5 j- O
. U8 I0 \; t) ]( q8 | 图1.0.5 UARTFR寄存器
6 R7 [/ V. P8 J% z/ I {- z/ t
5 k T- e7 y$ a! }! h* Q
& C( s3 S% t5 Z& c2 s 图1.0.6 UARTFR寄存器位定义
1 D* q& y" x5 T UARTIBRD寄存器是波特率除数的整数部分。复位之后所有的位被清零。最小值为1(当UARTIBRD为0时),此时UARTFBRD寄存器无效。当改变UARTIBRD 寄存器时,只有在当前的字节传输完成之后才生效。波特率除数的任何改变都必须在写UARTLCRH寄存器之后。如图1.0.7所示为UARTIBRD寄存器。, @1 s, o/ j/ I0 w& Z' ]
* g& d; X' e' W, ^
3 n p* L& x% Z# _$ S+ x# s8 X 图1.0.7 UARTIBRD寄存器( I7 C/ q3 ~" h
UARTFBRD寄存器是波特率除数的小数部分。复位之后所有的位被清零。当修改UARTFBRD寄存器的值时,只有在当前字节发送或者接收完成之后才会有效。波特率除数的任何改变都必须在写UARTLCRH寄存器之后。如图1.0.8所示为UARTFBRD寄存器。# ]3 V6 ?* M% \* U
}8 Z2 ^/ t* ]: X; D0 o% ^6 x$ J- H
! D: o: v$ ^" [9 A7 h! G 图1.0.8 UARTFBRD寄存器
$ z& G- f) J+ S% m, s+ t# Y- a UARTLCRH寄存器是线控制寄存器。该寄存器控制串口的数据长度、校验和停止位的选择。当更新波特率除数寄存器的时候,必须也要重写该寄存器。因为波特率除数寄存器的写选通信号和该寄存器是连接在一起的。如图1.0.9所示为UARTLCRH寄存器,图1.1.0为其位定义。8 s: f. I! c7 [- c
2 V5 e; T' V5 p& g& }7 V
' S& p+ a& F; F; U
图1.0.9 UARTLCRH寄存器1 ?% g1 P; I$ e9 Z" [8 N
3 [( J/ x; s1 v& a$ I: L) _
6 N# h8 o$ `, D0 g4 E, q2 W- }# O
/ l6 B l* q4 Q# D% z
图1.1.0 UARTLCRH寄存器位定义
2 @. j0 c5 }" T7 ?6 _4 M UARTCTL是控制寄存器。在复位之后,除了发送和接收使能位之外,其它位都被清零。UARTEN位用于使能UART模块。在配置串口模块时必须将该位清零。如果在串口进行发送或者接收的操作时关闭串口模块功能,则在完成当前发送或者接收操作之后才关闭。如图1.1.1所示为UARTCTL寄存器,如图1.1.2为其位定义。
* y8 k( u1 G% L 注意:在UART使能的状态下,UARTCTL寄存器不能被改变,否则结果是无法预测的。修改UARTCTL寄存器时建议按照下面的操作进行:! C/ |' ?3 @, c1 @: B0 X
1、关闭UART;& o U9 z9 N6 t6 i1 F7 V" r
2、等待当前字节的发送或者接收操作完成;
* c4 e6 ?: h% a' Y; v6 e# W) T 3、通过清零UARTLCRH寄存器中的FEN位来清除发送FIFO;. R9 @! d+ S! F# L; n9 D7 p
4、重新写控制寄存器;' o0 Z7 d& l- X* z
5、使能UART模块。4 v: A5 T( Y/ a3 {# r
1 H" M2 h% W' S" o8 ~/ }+ v. ]! X
* X- w6 L- I& f; S 图1.1.1 UARTCTL寄存器
+ g" r( v' f2 \! L, Y u; ~ Y7 K1 v2 w$ P1 {2 J4 h9 S
) L* @1 o* j4 G- Y9 M" Z 图1.1.2 UARTCTL寄存器位定义+ x8 m. X1 u4 x& N$ O. p
UARTIFLS是选择FIFO产生中断阈值的寄存器。可以使用该寄存器来定义FIFO的阈值,同时UARTRIS寄存器中的TXRIS和RXRIS位被触发。产生中断是基于一个发送操作超过阈值而不是等于阈值。也就是说FIFO中的数据超过规定的阈值之后才会产生中断。例如,如果接收的触发阈值设置为一般(8字节),那么在串口模块接收到第9个字节的时候才会产生中断。在复位之后,TXIFLSEL和RXIFLSEL位被配置,所以FIFOs在接收一半时触发中断。如图1.1.3所示为UARTRIS寄存器及其位定义。. X: a F$ _! ^; S; C/ P
. J6 d- D( `( {, h' [/ \
8 |. k/ R1 |2 r- S7 w& E' ~ S' S
图1.1.3 UARTIFLS及其位定义. m, j0 n7 f, D- s! v$ h
UARTIM是中断掩码置位/清零寄存器。读取该寄存器则获得当前中断的掩码值。进行置位时,对应的中断将被发送到中断控制器。清零操作则对应的中断不会被发送到中断控制器。如图1.1.4所示为UARTIM寄存器,如图1.1.5为其位定义。
1 w# p; b$ d. m: G7 w
/ a0 P/ {# i5 P' x) n: N
4 w2 [! _5 }" z, @* Q: l
图1.1.4 UARTIM寄存器5 k' ~$ W( s2 \& x" W: r: J
2 j# H) ^: X+ Q& i8 Q
& d$ P! e) y0 J' i 图1.1.5 UARTIM寄存器位定义
/ X( r- {+ F4 E8 z# R3 \% u( s5 V UARTRIS是源中断状态寄存器。可以读取到当前中断源。写操作无效,如图1.1.6所示为UARTRIS寄存器,如图1.1.7为其位定义。$ S: S: i- D. O0 ~+ e0 \" b8 K$ b
* f" h4 d/ K3 \9 @$ Q
- K" Q6 Y7 e0 q 图1.1.6 UARTRIS寄存器
1 S" G5 @( Y. h+ a2 V* J$ o' T$ |+ m
4 s! b L8 @: c% E% F
) ^1 J6 P8 M1 z( U' O9 @+ k 图1.1.7 UARTRIS寄存器位定义$ I! J0 @+ V$ b; p4 y( o
UARTMIS是中断掩码状态寄存器。读该寄存器获取对应中断的掩码值。写操作无效。如图1.1.8所示为UARTMIS寄存器,如图1.1.9为其位定义。
; i- D z/ [/ Y+ ] h4 t& E @" G( H4 s+ m+ a3 G# g; T
" |$ \1 e2 e4 ?& K: C
图1.1.8 UARTMIS寄存器
2 i9 C3 D7 {' ]! O+ g- i1 R3 D. T: F! |# I: y" V5 i) i n
3 q% f' K; s( A8 N9 N! g3 G 图1.1.9 UARTMIS寄存器位定义
3 \# A6 R$ K( Q; k/ }: X UARTICR是中断清零寄存器。置位则对应的中断被清除(清除中断源寄存器和中断掩码寄存器中对应的位),清零操作无效。如图1.2.0所示是为UARTICR寄存器,如图1.2.1为其位定义。
( L- ^7 \+ @" K! t8 \, s0 }3 ]- z1 M& T2 O- Y5 W5 ^: X
u( l6 n J1 `: v
图1.2.0 UARTICR寄存器
' Z( u+ w7 \; H! y3 U- r/ R3 m; O. }1 g) h( N5 z( G; A
& p2 {4 {! v0 F0 h8 O' }
图1.2.1 UARTICR寄存器位定义! ^5 n7 _% B' E- H$ Z. I5 r
UARTDMACTL是DMA控制寄存器。如图1.2.2所示为UARTDMACTL寄存器及其位定义。9 W# C0 c6 f2 @2 I
' b* O/ N) T/ X5 ?! J4 |% m1 N
3 P) A' W; T" K# u5 T0 e
图1.2.2 UARTDMACTL寄存器及其位定义3 |# H% r5 G* t' r/ X; F
1.2实验现象
' J3 M9 e- t8 @" q& O: ~! J+ p! ^7 L 打开CC3200_Uart_Demo文件夹里的工程,该工程主要是把CC3200的UARTA0的波特率为115200bps,8位数据位,1个停止位,无奇偶校验位,如图1.2.3所示。
" j6 U6 d+ n* u1 a. K2 \. g* c$ P, A! r9 Z$ w+ x
: L4 w" K4 O# {4 v$ I' h+ J 图1.2.3 串口参数设置/ Y# U: h- ^ r. [
当串口接收到数据后,把接收到的数据再通过串口发送出去,编译工程,打开Uniflash,把bin文件下载到CC3200板子上(具体步骤请参考GPIO小节)。
7 u/ y0 B1 r2 B. [$ H1 j 把“CH340G_VCC”和串口选择的第一个“RXD”和第二个“TXD”拨码开关均拨到“ON”。! X& Q8 k0 P0 T1 Z( L$ B @
插上USB数据线接到电脑,打开串口助手,选择串口号,波特率设置为115200bps,按下板子的复位可见串口打印,如图1.2.4所示。! o. j d7 @. H" w! b! _
_# M! h2 l% M- U
$ w* H6 d- X! B" I: U+ i, N5 O6 M 图1.2.4 复位时串口打印9 ]6 {' y# N2 N3 C F* l
在发送框内输入疯壳的网址,点击发送,串口助手收到CC3200的回传,如图1.2.5所示。
6 B( R( v+ L( Q( y0 {1 b9 x" K. a; \* q7 ?
/ i+ ^ N2 ^1 Q, L 图1.2.5 串口助手收到回传
( Y- G% p+ O6 Z ^: K1 e* s+ a- O1 v& u6 [' C: c( S5 w+ Z
4 f9 W0 y& K. l9 X j# B
9 a$ v4 d8 j5 @0 s& j4 P
文件下载请点击:
【4】串口.pdf
(2.72 MB, 下载次数: 0)
$ e S$ \3 d, ]
4 R) S# O6 t: r J6 O7 f |
|