|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Heaven_1 于 2022-8-31 13:46 编辑
3 s* ]+ ?' s& {+ j* P) ?
$ m9 }! X/ q4 x/ ~0 o——疯壳·开发板系列 串口实验教程
1 \# I: {& M' r. E- S/ |' K0 Q
2 J D# O+ F0 N7 y6 N! l- p$ f& h$ U7 @/ V! b
: f% l3 b r, X+ V- k
* H! D L) a2 x. i W* S( A1 g- n图15 P% g$ ` f3 L
0 R" H h, W& X) @- V
. A! N- V5 k+ a" n7 g1 c
7 q0 c1 \0 o* U# o/ v' \
第一节串口硬件电路
3 H+ c; T& x1 D, t' L4 [% D# Y% O% k5 |) p
串口通过USB口及手环下载调试线引出,连接mcu的P12与P13引脚,如下图所示:# @* e* s4 G' ?2 I+ y
: Z3 J3 I+ d. G9 P3 n
4 K9 J" r& B" G& h, |
3 _; u6 h" Y, ^1 d( J6 Z图2$ j* s! {5 m B9 N
) `4 C, S5 q m
3 y7 A [+ g3 i2 h! C* y9 g
) _9 a4 M1 W$ r8 [, w第二节 UART寄存器
( y% G o' ?7 E e9 ~0 h) W+ [+ Y! Q+ A4 h$ {1 i
2.1 UART介绍; B: f$ {% ?! } j1 c' k o
这个UART符合工业标准16550,并且可以和外围设备串行通信。主设备(CPU)通过APB总线将数据写进UART并且被转换成串行格式并且发送到目标设备。串行数据也可以通过UART被接收存储之后,主设备读取接收的数据。) z0 S0 B6 v0 a) m
UART模块不支持DMA,但是它有内部FIFOs,并且支持硬件流控制信号(RTS,CTS,DTR,DSR)。# o" K, F# J' u
UART模块有16字节的发送和接收FIFO;支持硬件流控制(CTS/RTS);影子寄存器来减少软件开销并且有可编程的软件复位;发送寄存器为空的中断模式;IrDA 1.0 SIR模式支持低功耗模式;可编程的字节属性、校验位和停止位(1,1.5,2);可以断开通信及检测通信线是否断开;中断优先级的识别;可编程的串行通信波特率。# n3 f1 U# j" ~6 ]" a6 V5 j+ S
2.2 UART寄存器3 b+ Y# R1 O7 B; H8 ]& {* Q4 x
UART相关的寄存器比较多,所以我们只介绍常用的寄存器,其它的可以参考官方数据手册DA14580_DS_v3.1.pdf,位于目录:..\WT开发板\硬件资料。/ `7 E) V" C. q& ^2 v
2.2.1 接收缓冲寄存器# A7 C3 z$ Y0 e4 c0 l# ~) N( O
2 B0 d. Q% s; U, g
. S8 n4 U0 g9 z( X! n$ p0 y$ ^
+ `) ]6 |1 ^- T$ K9 q
图3) s7 q% x, M B6 J3 ^
15:8位:保留不使用;( \( y! k7 \( S8 p
7:0位:接收缓存寄存器。* R$ u" p) `9 T, J% e1 U* C, f
2.2.2 中断使能寄存器: G. q& e2 d2 h! U, {" A3 [
( M7 U1 q7 M- C4 K: i
5 J* ?1 z9 B# n7 s
1 X, v- b. E1 {" o
图48 ~$ [4 Q8 d. b: p4 I
15:8位:保留不使用;
/ t: ^7 j2 a7 X8 B9 l7位:发送空中断使能位;+ S" K7 ~4 Z: O$ E9 c% Q
6:4位:保留不使用;- s% Q) z4 Q" b/ K2 z( a: E
3位:调制状态中断使能位;
3 N. V7 m1 B6 v# L0 u2位:接收状态中断使能位;9 {6 i7 J* Y7 E4 _
1位:发送结束中断使能位;, H( L6 K: f$ K5 ^, R Y
0位:数据接收完使能位。
6 C2 d6 F, W6 G2.2.3 中断识别寄存器/FIFO控制寄存器* u4 H2 |9 |- x
! E9 Z; i. H9 E* [$ R
1 ?8 @" R- }+ X% D+ d( K
图57 w3 h8 P( M# I' j
15:0位:写则为FIFO控制寄存器,读则为中断识别寄存器。
2 l4 d, X/ p" ]5 k2.2.4 通信线控制寄存器
4 @2 Q/ h7 ^) x7 A; N+ W2 q' j. k$ N( `9 o: M( n7 L- q
2 t: h9 F" R$ _
图6
0 ~$ h* X9 G# t c: C15:8位:保留不使用;
( C# R: C" S+ X; D7位:波特率使能位;
. l% r. E R3 U5 l. l: V3 F7 H. @6位:停止控制位;1 S6 t. f3 n+ P$ q0 r
5位:保留不使用;9 e" z; ?& k0 K9 ^7 F$ @* V7 W
4位:奇偶校验选择位;$ _' T; W3 B" M
3位:校验位;
" X' Z1 Y5 S, Z0 Y7 s! Z2位:停止位;5 W4 R( [+ y$ L" r
1:0位:数据长度。+ S# \" x4 x: T' h2 n4 N, \
2.2.5 调制器控制寄存器
, B; {: `6 y! g) g7 s) {5 j8 Z6 H# U% u' J# e- p8 w2 i5 W
! `# {, g& d8 u/ o
9 B# b# k2 `' }$ |$ [* C1 i
. X& Y. p/ D3 }& \5 A2 L* Z7 m% P
图7$ y% q* m7 A% r3 Z3 X: G G5 x
15:7位:保留不使用;2 D" |3 O% ?, P, E7 X1 i
6位:红外通信使能位;3 m1 `4 O8 O# R4 ]: P% {
5位:自动流控制使能位;
+ ]3 K% a) O8 S3 Y& g4位:回路位,用于测试;6 e+ O/ j2 T; ]- F
3位:用户指定输出2;1 g7 q, i( t# `$ W2 l. `3 Q
2位:用户指定输出1;# l) M( o0 _! m' X& Z
1位:发送请求;" j& t" p+ ]4 ?
0位:保留不使用。! T: l/ C+ I% u: A4 c) k3 K2 v8 i
2.2.6 通信线状态寄存器
7 T; w% J' X9 H4 T7 P9 f% r
, R4 c6 j* r4 u7 k- c$ |# J
- i# `0 U% l# ?6 U( \) ~, k# t% |' W
% U4 d) @ C% w. E' B0 F! G
1 h$ T6 _# V! U/ G; t9 Z图8" G7 n- i# g: b
15:8位:保留不使用;
" Y. x, | p, t7位:接收FIFO错误位;
% c4 a; I8 O5 n7 m1 ]4 l6位:发送器空位;
3 g4 b& _* E$ {% z5 Y5位:发送保持寄存器空位;
/ k5 e1 b& B( _# p; y% ~& f# p4位:异常停止中断位;
6 l `6 r! y( w3 N5 _+ a0 k3位:帧错误位;2 U3 Y/ _# q- z) x4 I- T
2位:校验错误位;
( `" _: O2 K: z8 U: o" c! C5 O1位:溢出错误位;6 J1 H, [, p6 k) r# U, k
0位:数据准备好位。
% B9 }" i% V/ w/ \7 ~2.3 寄存器配置讲解
$ W S6 M2 d& d6 R#define CLK_PER_REG (* ( volatile uint16*)0x50000004)
- S: f* e, s8 |5 g$ G h#define UART_RBR_THR_DLL_REG (* ( volatile uint16*)0x50001000)8 }" q$ b0 y' X- R; n
#define UART_IER_DLH_REG (* ( volatile uint16*)0x50001004)
: |) z1 s+ g: E( Z#define UART_IIR_FCR_REG (* ( volatile uint16*)0x50001008)
3 v" L8 z: P, v9 ~$ u#define UART_LCR_REG (* ( volatile uint16*)0x5000100C)
5 M1 Y& n3 D) [+ Q. i0 P#define UART_MCR_REG (* ( volatile uint16*)0x50001010)/ u8 J ~0 m* }: ^- K" {. u( @
#define UART_LSR_REG (* ( volatile uint16*)0x50001014): c$ b( X2 Q) D! k/ h/ U
#define UART_MSR_REG (* ( volatile uint16*)0x50001018)
: ], `9 F1 D! z& j( q+ p8 l& G9 j% H#define UART_SCR_REG (* ( volatile uint16*)0x5000101C)+ d ]* T' _ b) h" n; o
启动UART1模块的时钟CLK_PER_REG |= 0x0080;
1 ~0 y# h' k+ M+ v" W' B串口初始化寄存器配置:
! {1 X* W: {5 W! h, D' A& v( q9 p首先使能波特率配置UART_LCR_REG = 0X08;) k, H4 h5 T1 |% x# g" Y8 o
配置波特率UART_IER_DLH_REG = 0; UART_RBR_THR_DLL_REG = 9;
7 ?8 z! U, I. h: j& r% c# I8位数据,无校验,1位停止位UART_LCR_REG = 0X03;; |4 ]8 ]( G5 o1 H
关闭红外通信功能UART_MCR_REG = 0X00;7 z9 u3 n( T; P" D
使能FIFO, UART_IIR_FCR_REG = 0X01;
) T1 J- s: N b. j$ q1 y关闭中断UART_IER_DLH_REG = 0X00;
* Q+ B# @/ V& G接收一个字节,等待接收完成while((UART_LSR_REG&0x01)==0);读取接收数据rx_data = UART_RBR_THR_DLL_REG;
2 j x8 C r0 d2 b- z1 {# `( R9 i2 v发送一个字节0x55,等待发送为空while((UART_LSR_REG&0x20)==0);填充发送数据UART_RBR_THR_DLL_REG = 0xaa;" `% c3 t2 o4 f4 v( k% p
9 I D" A( J8 N3 Y: y$ Q" S5 } u _6 f7 G* V6 ^& i
3 ~# b4 G+ p! R* j第三节 UART实验! a$ Q _. j# n" ^$ L" _4 l& X
实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
$ V' o" o* V- ^* k2 W% x3 L% M; S使用USB转串模块连接手机蓝牙串口,连接方式如下:8 F7 ~6 G5 c) J( J. u
(1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:' z9 w+ B! p! L' Y4 Z
% D. N6 J8 c9 B5 e2 k- K& y0 G
4 a2 C5 c ^8 c% N, `4 k6 l图9" Q& ]. U. r8 ^) W: K0 K
(2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:
! o" K/ D/ E% N, d6 K/ ]5 S! i4 U) Q* T, O
8 [( r: \2 J8 Z
图10; A# d1 G$ f# ]* C3 O: P
使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:0 M0 l4 [% @0 W4 |. K
(1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:4 k6 U8 t: C* @0 \7 a
' j4 ?; s( n6 l! A1 n8 K
5 O) f' G4 O3 }
图11 [: k: r; k1 K7 J& ~4 X2 c
(2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:, \" w* ~6 n, { T
' J Z) Y: P8 h: g$ Q/ c& }
4 {6 T! {- F4 l* [2 V+ y" X# Z
图12
$ C& c7 ?% w, ]% z将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
7 B# O/ Y6 ^5 N4 v! K% ^打开串口实验的Keil工程uart.uvproj,位于目录:..\WT_Mobile\1.初级教程\DA14580\2_初级_串口\projects\target_apps\peripheral_examples\uart\Keil_5,如下图所示:- T7 \+ Y; \ X+ {
4 m, j4 T, p7 C3 _. w
* d' R5 x B; z) [/ V. f图137 P* z$ b, `4 b- A
打开串口调试助手连接串口,波特率为115200。在KEIL中,编译代码,点击DEBUG,然后点击全速运行,就可以看到串口调试助手打印出的信息,发送什么就返回什么,例如发送“WT Mobile Test!”就会返回“WT Mobile Test!”,如下图所示: y: z! X6 N ]) o0 J, p) r7 K8 f* n
, ?' Y# }8 C; o! z$ _) s( o
) t9 k" V4 E* k$ D. G% V5 `6 S" O0 v! M2 _: _+ x6 H8 o5 w6 N
! o% o3 J- s. x; J3 [" Z
图14
9 A) x3 Z4 o/ ~# u
! g, _3 T0 Q2 S0 U7 v1 K4 { j6 A" z# H% {( n
9 K+ k. s4 `; m4 P3 Z$ D. K) s+ ~! `$ C- M+ z
( Y, B1 [. b/ l7 `9 l( S( X+ x1 j; {
6 q- p" N y8 r8 ?+ v2 N2 q文件下载请点击:
串口教程.pdf
(1.43 MB, 下载次数: 0)
7 s& H1 [& h6 w5 ~, ]' Q% }" e% R/ i4 j6 {& X: d% H$ q/ |2 @
|
|