|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Heaven_1 于 2022-6-30 13:08 编辑
- \3 g5 |3 @! ?8 J- b& O! r4 W7 l1 B! R% {% S
串口实验教程 ——疯壳·开发板系列 ' E3 z2 L9 j B+ q
' X, U2 l$ U8 l: a! ` a+ F' o* `2 d+ V2 b: u; y; i3 f/ z
图1
; u& E/ L0 ^( R+ w; t: q. W8 \6 X0 T9 i2 v4 E2 n* C% M# G& a
- m- I. V* I4 B8 z! ~- Z! u- G. c8 T9 B2 I
第一节串口硬件电路
2 `7 g. d3 u( A/ V* f; g, S' t0 ]3 R, _6 X3 ]) Q' `& P
串口通过USB口及手环下载调试线引出,连接mcu的P12与P13引脚,如下图所示:4 T& k2 d. `: n/ |- q7 E
( p: Q' r& Q1 Q8 x9 ~- J% p! n
& a0 T) Z; R" e1 O$ t# | ?图26 {; E' V( o3 N- ~( _5 g
* @9 M: c0 y8 ^2 i: x$ U; W+ o/ n. I8 q; Z$ Y6 W
3 N" ^! l& l7 ?0 ^0 s3 O$ l+ x" C8 N第二节 UART寄存器
$ H/ V) l+ k$ S: M* b s2 ~- \4 F8 k. O! x7 y/ W5 V8 O0 Y4 a9 l4 {) w
2.1 UART介绍% B* M% {' J4 x8 e8 d
这个UART符合工业标准16550,并且可以和外围设备串行通信。主设备(CPU)通过APB总线将数据写进UART并且被转换成串行格式并且发送到目标设备。串行数据也可以通过UART被接收存储之后,主设备读取接收的数据。
& H U1 @: V- ^; g+ N F; X% LUART模块不支持DMA,但是它有内部FIFOs,并且支持硬件流控制信号(RTS,CTS,DTR,DSR)。
- I' M8 Z0 V- ^6 H3 ?! m: TUART模块有16字节的发送和接收FIFO;支持硬件流控制(CTS/RTS);影子寄存器来减少软件开销并且有可编程的软件复位;发送寄存器为空的中断模式;IrDA 1.0 SIR模式支持低功耗模式;可编程的字节属性、校验位和停止位(1,1.5,2);可以断开通信及检测通信线是否断开;中断优先级的识别;可编程的串行通信波特率。/ w& H$ w* X' f
2.2 UART寄存器
V4 j2 \8 v% c7 g. s) [) KUART相关的寄存器比较多,所以我们只介绍常用的寄存器,其它的可以参考官方数据手册DA14580_DS_v3.1.pdf,位于目录:..\WT开发板\硬件资料。: c3 k6 a. i4 M8 D: P
2.2.1 接收缓冲寄存器9 u" o. S6 K3 r2 _0 w. {
+ \+ i" ~0 F. F/ p9 M. @3 j
) @0 N+ B H( @2 E6 j( K/ l
) K6 `2 W8 L- ~( V- ?3 Y4 }; v图3
" r6 N( `+ Q2 p3 [, o5 [( n) n. j15:8位:保留不使用;6 R0 j* ^: B) F: [4 k9 [2 P
7:0位:接收缓存寄存器。4 s2 [4 n0 P. ~
2.2.2 中断使能寄存器. u" _: r$ B2 Q
5 C( e9 I6 w* d* J4 }! [" e$ F
+ n; |6 G! j3 C X( s1 ? d4 Q A
- R6 L1 D9 T) k9 y- f0 H
图4
b" D7 B! K, q# B5 F" `3 G7 b. b15:8位:保留不使用;$ Y$ x! e& A, I5 F
7位:发送空中断使能位;# l0 t4 S0 s z& E8 V
6:4位:保留不使用;
& W. b a: R0 F. J* z3位:调制状态中断使能位;
: N9 E" b( H4 x2 @- Y2位:接收状态中断使能位;
: K- _( B" a2 J( K, V* x5 I1位:发送结束中断使能位;
7 ?' }4 X# O3 c: f8 a0 ~ D! J0位:数据接收完使能位。7 A( H" z& F V6 |5 C) i% I
2.2.3 中断识别寄存器/FIFO控制寄存器5 w Z8 |# O8 j6 |& b9 a
1 w% X- \' l4 J7 d" p1 l. F! Y
- n8 Z5 r* }; O; ^) l图5; u+ E6 }9 g1 @" }7 v% T8 A
15:0位:写则为FIFO控制寄存器,读则为中断识别寄存器。. W0 m7 X' A9 } s( O
2.2.4 通信线控制寄存器* ^" t% g9 b" M6 g+ l# c# j1 {
" G8 p+ ~- L* a3 n6 U/ V: o. H! K( V) ]) \5 S
图6
6 f) L. P- A1 N! \15:8位:保留不使用;3 f; |/ r2 R4 g. |" |2 _( ?1 k
7位:波特率使能位;- X' v( p8 M& X' ~; [2 H( k7 E
6位:停止控制位;
( K: w V6 \" K( p2 R5位:保留不使用;
0 l7 W# p3 l, \- I6 I' A3 J4位:奇偶校验选择位;! z( e9 U6 V. @0 y0 ]; }" o
3位:校验位;
# _$ W# M: ^) y& h! i" J' B9 j2位:停止位;
" G* G/ z, J; ?7 k4 L2 U: Z1:0位:数据长度。
- s ^% K t4 S! t9 U |2.2.5 调制器控制寄存器
1 z2 j, d; T* V: d& P# B1 a
A! O5 ^- m$ r) R8 z1 c) Z2 y
0 @+ C ^; v# S, c3 S1 z
' e$ _$ g$ x8 @1 L( \
6 C. t" K7 E. q2 l, ~( h9 o图76 x3 K0 l, M. Z9 V m) Y! O
15:7位:保留不使用;
1 J8 y8 M9 V* u* e3 k: {4 a6位:红外通信使能位;
$ s0 Y, S9 G, a8 X2 j5位:自动流控制使能位;* e5 E8 u! v' M/ I8 s. c# h
4位:回路位,用于测试;
( y% g& |# C: t4 `% S8 m3位:用户指定输出2;8 a& _8 D: e$ X$ d0 a7 U& _, ?
2位:用户指定输出1;- A6 J `; h* I' O& Y. Q6 c9 \
1位:发送请求;
" t. b8 B6 f& w. `: x$ W0位:保留不使用。
/ d6 L6 g, t) A8 Q0 x4 s) {* e2.2.6 通信线状态寄存器2 @' Y4 q" j0 |
\8 q& d+ F( v6 L% I# }
2 ?4 R3 x: z: ~6 T- E% C
k. K: Z, L$ |, B% \8 s, `! y- V; h
; `1 z6 U2 M$ D9 b% c图8$ z" W8 n4 R) `' c) j2 _* g/ a! @# p
15:8位:保留不使用;# a; O% D+ v& l& j
7位:接收FIFO错误位;
* A6 j: U- u8 d. O; e6位:发送器空位; S! `9 n# o5 W, v
5位:发送保持寄存器空位;4 d8 K# f; @6 u3 H
4位:异常停止中断位;
& f& H& T1 I9 E/ F: C) a' @3位:帧错误位;
6 M$ T: ^/ I, R$ l) q2位:校验错误位;
7 V( C7 }* W% C! F# N1位:溢出错误位;" @' v% }! O$ z* H ]+ o k6 n
0位:数据准备好位。. k* z$ @' o ]) B
2.3 寄存器配置讲解
3 u' c+ \# T- r3 }#define CLK_PER_REG (* ( volatile uint16*)0x50000004)
0 O) t: i$ i3 U+ i, Y; p#define UART_RBR_THR_DLL_REG (* ( volatile uint16*)0x50001000)# r" V9 i' }% N P
#define UART_IER_DLH_REG (* ( volatile uint16*)0x50001004)
" r. X1 {1 H% G7 J+ [/ E#define UART_IIR_FCR_REG (* ( volatile uint16*)0x50001008)
/ K9 B6 L& |0 G#define UART_LCR_REG (* ( volatile uint16*)0x5000100C)
: l H$ t4 {6 x, k4 X# P#define UART_MCR_REG (* ( volatile uint16*)0x50001010)
" n- H* X' ^; d! G#define UART_LSR_REG (* ( volatile uint16*)0x50001014)2 w* n9 d( @& y$ j
#define UART_MSR_REG (* ( volatile uint16*)0x50001018)
' L! X; ~7 T$ y4 r+ q4 W# J#define UART_SCR_REG (* ( volatile uint16*)0x5000101C)
) _2 `2 ]' U& D' p启动UART1模块的时钟CLK_PER_REG |= 0x0080; }" D( Z: Z1 E( Y
串口初始化寄存器配置:
# v% P! j5 D+ z* t, E! y. ]首先使能波特率配置UART_LCR_REG = 0X08;: l3 d4 Q9 q$ u5 q) b
配置波特率UART_IER_DLH_REG = 0; UART_RBR_THR_DLL_REG = 9;
{& |- o# ~' P( s* i" R8位数据,无校验,1位停止位UART_LCR_REG = 0X03;0 t" F' `$ e- V6 o% g- v- r# `7 D
关闭红外通信功能UART_MCR_REG = 0X00;
# X3 Z: ]; ?5 ^. ^2 T使能FIFO, UART_IIR_FCR_REG = 0X01;
' Z$ b. _' {5 {* h- o+ H# \/ |) ^" c$ @关闭中断UART_IER_DLH_REG = 0X00;
+ r% x6 C n" {5 G# }接收一个字节,等待接收完成while((UART_LSR_REG&0x01)==0);读取接收数据rx_data = UART_RBR_THR_DLL_REG;
9 e+ y5 B' x: y, h' c, q G6 E发送一个字节0x55,等待发送为空while((UART_LSR_REG&0x20)==0);填充发送数据UART_RBR_THR_DLL_REG = 0xaa;( C6 P( \8 B2 j z; w+ M# k
* H r( S7 O& k1 j6 ]
" V# z: v/ y- ]( u- ~
2 {- d! L5 [/ Y1 i8 R0 }: f2 [第三节 UART实验; n# {2 R: Q9 B. G. G1 C# j
实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
3 K+ ~$ I' M- `& H使用USB转串模块连接手机蓝牙串口,连接方式如下:
7 P' j" @# p& i5 o0 G0 M3 \- W& w (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:6 ?' [" e! o: o6 |/ A6 O6 ]* C5 x
% P n( j9 n$ `& U `
6 L! e( s) m# v! I$ }3 G" C, v
图9
, @6 f3 r8 b2 Z! D/ G* h6 j (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:
3 M/ F" U& ]+ c4 N9 X. W* Z9 b9 t! W }" i4 C
/ p* s P9 H* V图10
% M: \5 O B3 c1 ~$ Q9 n" U使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:% x2 y( ^& w V0 s/ W$ J3 Z& I
(1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:) p( q! o4 S- c5 v' T
0 |; Y0 C1 {# ]# x3 k. g
( h: h4 [, y0 t. y9 z# b+ L
图11
V7 M1 D" K5 g. K) b(2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:; t3 a& z9 J; i4 M1 e, m" X7 b
: P0 Z8 P% P3 Q, @. y+ I3 \3 Q- L5 I- I, D9 g5 s1 H
图12
& Z1 e2 m. E! y将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
4 w& a% P- f) ~打开串口实验的Keil工程uart.uvproj,位于目录:..\WT_Mobile\1.初级教程\DA14580\2_初级_串口\projects\target_apps\peripheral_examples\uart\Keil_5,如下图所示:
- p5 A# B0 l7 i4 j0 w, v" m# V% b9 `: A4 D& b7 r1 ^2 y
# K. }0 C: Q9 g0 ~4 ]5 o
图13
3 B( W ~& q# v& u8 \打开串口调试助手连接串口,波特率为115200。在KEIL中,编译代码,点击DEBUG,然后点击全速运行,就可以看到串口调试助手打印出的信息,发送什么就返回什么,例如发送“WT Mobile Test!”就会返回“WT Mobile Test!”,如下图所示:
7 c7 Q. S* V5 a9 O# L$ p% K( \" v9 y
/ r/ |7 n# {; ^$ Y
! x z: @( y5 u$ m+ C7 \! h& p6 [ G, A+ G
# R7 V A9 w- ~+ s- x- d7 t6 c4 v
图14
4 P x, o$ c4 R
. b. r5 H5 \' }5 v6 N0 x8 {) a6 R1 ]9 p: u5 r4 l
图15$ C8 D8 u/ i* ]& v' f0 w
. L X5 p. l6 Z' h; d4 d
- Q) l5 J! J3 s% I6 B' q文件下载请点击:
串口教程.pdf
(1.43 MB, 下载次数: 0)
3 W2 c) \0 S2 k |
|