|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Heaven_1 于 2022-6-30 13:08 编辑
7 x) X) X. P3 r F! F
( {: m% F+ ^% V+ b串口实验教程 ——疯壳·开发板系列 4 I' n. T/ h, x' e( z
( l L* G. N1 N0 G& c* I
8 L1 o9 _7 W5 O图1/ S2 o: y4 s7 U9 a, d( D
. A( H3 J: T2 ?0 v3 ^; [! k a$ d, w! M1 A$ i X
: l4 g0 g4 I w7 x5 }9 R: j" c5 G
第一节串口硬件电路
) e& `" k( `% L. }# ]/ J. Y: S2 w* R% l& E
串口通过USB口及手环下载调试线引出,连接mcu的P12与P13引脚,如下图所示:
n7 H. Y0 d, C
/ i9 v# `2 e0 |7 p+ n- c! h! f; t4 \: ~( |
图20 o7 p2 v6 T- s* P. d8 f7 |5 m
7 J3 f9 A6 v/ a& q% ]. E
9 z- D) r( D3 u& Y
2 C6 b* i: X% o2 p5 S8 J第二节 UART寄存器
# P. t0 v3 i* S* [6 P- P- l2 k: t6 r
( K4 t% X% b2 \; ~5 ?9 b: _2.1 UART介绍
) G! F1 A3 M. [9 R 这个UART符合工业标准16550,并且可以和外围设备串行通信。主设备(CPU)通过APB总线将数据写进UART并且被转换成串行格式并且发送到目标设备。串行数据也可以通过UART被接收存储之后,主设备读取接收的数据。: A1 Q3 A3 o5 V. Y
UART模块不支持DMA,但是它有内部FIFOs,并且支持硬件流控制信号(RTS,CTS,DTR,DSR)。& l* O; F- G; }; ]
UART模块有16字节的发送和接收FIFO;支持硬件流控制(CTS/RTS);影子寄存器来减少软件开销并且有可编程的软件复位;发送寄存器为空的中断模式;IrDA 1.0 SIR模式支持低功耗模式;可编程的字节属性、校验位和停止位(1,1.5,2);可以断开通信及检测通信线是否断开;中断优先级的识别;可编程的串行通信波特率。
6 g7 G. T) [7 M- g( J1 u2.2 UART寄存器 M. _; H' a- L& X! k
UART相关的寄存器比较多,所以我们只介绍常用的寄存器,其它的可以参考官方数据手册DA14580_DS_v3.1.pdf,位于目录:..\WT开发板\硬件资料。( q. \& D3 A! w r
2.2.1 接收缓冲寄存器, H. }" f1 S4 K9 Y) x8 J
( K6 _9 u$ Q5 t4 I! P% H
& h: F3 J6 L4 u! D6 T
1 z2 }5 h0 q) m* i2 W图3
1 ?" V- X; [1 m15:8位:保留不使用;% @; ~- p* o2 r) x* `' v. C$ J
7:0位:接收缓存寄存器。7 d+ @8 N* v- S6 ^
2.2.2 中断使能寄存器
2 U+ _: _; H. P% U- n/ ~/ V4 }( i% D$ \
- o% V: A% ~% f0 B5 l% A5 w4 X! R- U: B! K; R
图4/ \1 U# f& i+ M5 f, \) Y6 p
15:8位:保留不使用;2 i! {$ D" W s; q
7位:发送空中断使能位;9 X) x* e. G- `% ], t
6:4位:保留不使用;
* [8 ~) O0 S" V) ~4 I3位:调制状态中断使能位;0 y# N/ \4 M/ g3 w _$ {
2位:接收状态中断使能位;
3 G% ~/ C# K- r1位:发送结束中断使能位;& C5 i; o: \# u! y* K2 F( y
0位:数据接收完使能位。
% k, }. Y2 z5 L2.2.3 中断识别寄存器/FIFO控制寄存器( ^. G1 G4 G& i. {2 V |9 K
3 ?% p7 G+ d" y' B' B7 N; k& b
- \( b9 M3 J) N$ |& ?8 x+ |
图5& C/ Z+ A0 } Z6 Q" B
15:0位:写则为FIFO控制寄存器,读则为中断识别寄存器。. E# x- s- z3 o
2.2.4 通信线控制寄存器
$ u$ ]6 z8 l' l" U( D: M8 o3 W& d- P- _6 `' q
9 T4 z9 t% u7 z/ g图62 ~9 o9 i% q/ r; q
15:8位:保留不使用;
" M: {- ?9 L* G% S- @/ `7位:波特率使能位;2 [7 Q' M* _" V! V& z
6位:停止控制位;
0 H9 g& ?6 a9 ?9 W; Y" T- A5位:保留不使用;' z- R8 c" ?3 t5 f3 i: D$ n" R+ M1 q
4位:奇偶校验选择位;5 H9 L0 D7 z9 D0 w
3位:校验位;1 D# F5 }2 y3 g( }' o1 w) p+ M
2位:停止位;" _- G: m# ?/ U7 Q8 s7 H( z2 S2 p7 `
1:0位:数据长度。 Y' f* z1 c+ ]( G
2.2.5 调制器控制寄存器
m7 c; I& b. J2 k. r5 n8 G/ b! X0 L0 e* v( O; l
N( x4 }0 x/ z1 g6 h7 d* S# m: i1 V# ?( y, W1 U
, [* h/ O: s1 g$ j6 ~1 Q; ]) J图7+ A% ^# k& F$ F, J6 y
15:7位:保留不使用;
1 {, X% I0 f+ r6 H6位:红外通信使能位;8 O# ^! y: n& ]+ j+ G! O
5位:自动流控制使能位;
0 ^* f/ B8 t# Z# q9 e4位:回路位,用于测试;' b9 S( k1 o: B1 f6 b
3位:用户指定输出2;
6 N3 J z w9 V5 E2位:用户指定输出1;
: W2 ~6 `$ H7 w8 }1 d0 b1位:发送请求;! h" ], W' O7 T z) H1 W
0位:保留不使用。
7 R) P" ~3 h8 j" Q2.2.6 通信线状态寄存器 _# o0 I4 E, r1 K T0 M
/ ^& X/ n0 H: Q _" v
& A/ C; F# Z- J) t& i. e
" w. w5 B3 {, j) Z( ]
3 I* H H' C. K% Z6 J图8/ {0 A1 b0 v5 k! ~- t7 B
15:8位:保留不使用;3 t t0 V+ T- c
7位:接收FIFO错误位;
: J) C' }8 @4 e0 P v6位:发送器空位;4 }& o# H) g7 H2 A
5位:发送保持寄存器空位;$ @, o- n K) f0 I N0 U# v& I
4位:异常停止中断位;
% E% Z# _; |( d5 [2 {7 C1 C3 Z. v3位:帧错误位;- Q4 o1 H% j# U) Y. E x
2位:校验错误位;5 g9 Y" ^# K0 I
1位:溢出错误位;
. m' n) Y& C+ g% d) M0位:数据准备好位。" `. p' e; ~5 P4 ~9 z. `- w# l
2.3 寄存器配置讲解
& k' p+ z; ~. M8 F& o* I7 @#define CLK_PER_REG (* ( volatile uint16*)0x50000004)
1 B3 m6 z( k6 c# N2 o, \. L/ s& R#define UART_RBR_THR_DLL_REG (* ( volatile uint16*)0x50001000)
( h8 x7 ]" E- r+ p; e/ e6 c1 o" o#define UART_IER_DLH_REG (* ( volatile uint16*)0x50001004)
2 j! r5 c& B3 V4 T9 _8 \2 T#define UART_IIR_FCR_REG (* ( volatile uint16*)0x50001008)& y% A1 ]9 J& O8 ?' a
#define UART_LCR_REG (* ( volatile uint16*)0x5000100C). j+ o1 h1 X. ]0 E6 k' m
#define UART_MCR_REG (* ( volatile uint16*)0x50001010)
4 ?' ?2 w+ _( W* C1 c, E) M, @#define UART_LSR_REG (* ( volatile uint16*)0x50001014)3 U( C* {8 r) l# _1 z
#define UART_MSR_REG (* ( volatile uint16*)0x50001018)
$ x( B8 n5 O# c9 F, g5 |#define UART_SCR_REG (* ( volatile uint16*)0x5000101C)
0 Y$ b, P: I+ N8 \ T启动UART1模块的时钟CLK_PER_REG |= 0x0080;
+ j3 l8 k" Y+ s; K, D( r8 z串口初始化寄存器配置:
3 B( G+ |# M$ U6 }2 P& K" y/ B首先使能波特率配置UART_LCR_REG = 0X08;
2 `# K! [' m7 H7 ]/ \) E配置波特率UART_IER_DLH_REG = 0; UART_RBR_THR_DLL_REG = 9;6 B3 D' Y6 ]! F. u/ T7 p4 P1 t
8位数据,无校验,1位停止位UART_LCR_REG = 0X03;4 U" n! c2 P% X( G' _
关闭红外通信功能UART_MCR_REG = 0X00;) M8 z& Z9 C) L5 ~8 a! @
使能FIFO, UART_IIR_FCR_REG = 0X01;2 v! i& P3 I1 s, q5 F% v. q1 b i
关闭中断UART_IER_DLH_REG = 0X00;6 D- a a/ a2 A2 f- h
接收一个字节,等待接收完成while((UART_LSR_REG&0x01)==0);读取接收数据rx_data = UART_RBR_THR_DLL_REG;6 {6 c) f/ p1 K' s: d
发送一个字节0x55,等待发送为空while((UART_LSR_REG&0x20)==0);填充发送数据UART_RBR_THR_DLL_REG = 0xaa;
4 T) t! H& w( O3 c9 y
) t5 {9 d/ ]2 A4 i+ C P- n" _; s; F7 M1 _5 d0 b. H2 L2 g
' A! S0 _* N9 e4 I# B. R% {
第三节 UART实验
0 L' i/ P/ A* h7 k; R d2 S9 }实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
4 P. o% [% [2 T6 j0 p使用USB转串模块连接手机蓝牙串口,连接方式如下:
1 W0 |) q" V* U" H (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:, r$ o( m% B* ^' A
, n+ x0 c6 {( S# J' |. J' A
' m# M, r! \) S! R0 t# p图92 ^2 I4 E0 A& W3 S( b0 q
(2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:+ Y' ~: h" ^. J5 u+ S
0 o( t( d, t3 V4 N# h
* e4 K4 i7 h) _图10% a5 W: [8 M5 H+ [8 U
使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:3 ^! F# X/ g: I7 e, {$ i0 \. \9 H
(1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:! @* p i' k; l- U) ~! i, D
' F0 N% | U/ S. p+ j9 n
8 J/ ]0 l8 d1 G; m+ q: @图11
! K6 M" l; G5 W) X% R4 d# c(2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示: Q+ d- t4 X3 t! O3 h. g
# [- q4 |2 m+ k
. V7 s$ V! `% A# U/ P& U8 a" R) ?图128 a$ X/ k& O' M# w1 |- Z7 @+ H
将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。7 ^" J/ w# p- I9 s) R1 l
打开串口实验的Keil工程uart.uvproj,位于目录:..\WT_Mobile\1.初级教程\DA14580\2_初级_串口\projects\target_apps\peripheral_examples\uart\Keil_5,如下图所示:
* j; z# L; t6 G+ P% X4 |- ]* r) B, K, I5 h
v& B' C7 l) z
图13
6 V9 ]; ^4 k! }' r打开串口调试助手连接串口,波特率为115200。在KEIL中,编译代码,点击DEBUG,然后点击全速运行,就可以看到串口调试助手打印出的信息,发送什么就返回什么,例如发送“WT Mobile Test!”就会返回“WT Mobile Test!”,如下图所示:
: P% Z3 T: }- Q! G1 F, i8 G; E8 Y' } g8 p5 u
6 C$ J& T% ?. R/ t \
1 s! g/ Z# w# e5 ^: Y' {
1 l% z9 h' h" _0 G
图14% M& i) }, \* t
l+ Q) C; M% h6 P8 k- a9 h
+ D7 | p$ d0 [1 N- x" T5 n2 z图15" }# V6 I) u) m* Y7 m" A
u" ]5 X/ a5 P% A5 Q, F @% w' q3 I
文件下载请点击:
串口教程.pdf
(1.43 MB, 下载次数: 0)
2 {; O; W/ J! a/ y' s' Q |
|