|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Heaven_1 于 2022-6-30 13:08 编辑 3 Z8 \3 v: l; M6 ?
+ y* j t% N5 b+ J6 K- s串口实验教程 ——疯壳·开发板系列
@1 V% q! W& E& G1 P+ Y8 K# u! P' i$ p& ], T" F
5 N% O3 [. X( U
图15 N( E% \# u# x$ r: j; h# |, L
$ n! Z0 c1 q7 s. a* P, T
5 l! j/ u: w8 G$ g% {/ f3 R3 @/ P
第一节串口硬件电路
. c* h) q, ]) s. n4 }; N D* E1 k2 M! g& ?+ R
串口通过USB口及手环下载调试线引出,连接mcu的P12与P13引脚,如下图所示:
& j. k6 t/ G1 F
9 R9 i( }9 B) o6 N* k$ _+ o
- D/ e* f3 i9 j% p2 u: d# |图26 b* O2 `" I' W) D% E( i8 D; K
! x, E3 E0 Z: ^
5 g$ B: U! ?! z z6 D
: O1 R( r* a8 A( x/ p5 \第二节 UART寄存器/ M8 ]5 |% ?. `- W% K* G) F+ B
% N2 p7 U1 C/ \: T2.1 UART介绍5 ^( ^; W5 o3 N) m
这个UART符合工业标准16550,并且可以和外围设备串行通信。主设备(CPU)通过APB总线将数据写进UART并且被转换成串行格式并且发送到目标设备。串行数据也可以通过UART被接收存储之后,主设备读取接收的数据。& E3 ]+ f# x+ x8 Y" K- m) Q
UART模块不支持DMA,但是它有内部FIFOs,并且支持硬件流控制信号(RTS,CTS,DTR,DSR)。
0 C3 b- J! ?5 l" aUART模块有16字节的发送和接收FIFO;支持硬件流控制(CTS/RTS);影子寄存器来减少软件开销并且有可编程的软件复位;发送寄存器为空的中断模式;IrDA 1.0 SIR模式支持低功耗模式;可编程的字节属性、校验位和停止位(1,1.5,2);可以断开通信及检测通信线是否断开;中断优先级的识别;可编程的串行通信波特率。3 A4 ~: n7 d5 v- N" @! N2 i
2.2 UART寄存器
, l, u5 B3 n" s5 |- j% ^$ AUART相关的寄存器比较多,所以我们只介绍常用的寄存器,其它的可以参考官方数据手册DA14580_DS_v3.1.pdf,位于目录:..\WT开发板\硬件资料。) o c9 ?4 a: [" Y9 N K7 z
2.2.1 接收缓冲寄存器
2 M& G3 A% Q/ g. ?. x
! T1 q* C+ X6 A6 Z5 b" {5 j, n
% V0 ?9 j9 o4 z* @! [) F/ q+ x) {; q1 p0 N/ H
图3
$ d5 v% r0 ~$ J# d15:8位:保留不使用;$ v; v9 X4 O$ _
7:0位:接收缓存寄存器。) e, K+ a3 w0 N/ }
2.2.2 中断使能寄存器( S; N% ]/ I7 m& f) ^3 }
* X2 ]2 c* s4 S) s2 {
4 g' @7 \, L! B4 J+ r5 F
9 o% P" X$ M# e, I2 J' u& D图4
4 d6 Q8 I4 s& v4 `15:8位:保留不使用;
: \% {! T( h, j# X0 g: G$ e7位:发送空中断使能位;
2 B# L8 t' I& r {6:4位:保留不使用;2 R/ g6 P/ h/ i9 V
3位:调制状态中断使能位;
( i2 ^+ S6 G/ Y: W' x2位:接收状态中断使能位;/ S3 `; k' y! e; ~+ E( O. j
1位:发送结束中断使能位;1 d7 @6 {; Q, }/ y8 v
0位:数据接收完使能位。/ ~7 h& y. l4 d+ p7 ^, x" F
2.2.3 中断识别寄存器/FIFO控制寄存器$ r8 t8 b' |' ~$ O
4 z- E' s D' w
% f$ S3 k0 M& l* @' o5 y4 [图5- c; h2 q2 C) b8 O0 S" Y/ F
15:0位:写则为FIFO控制寄存器,读则为中断识别寄存器。
, i/ ~& e. e- [* n e5 G2.2.4 通信线控制寄存器' s5 e6 b& M1 z; E- m
; B( L$ J6 S5 v4 U- h
) A# x7 Y, Z; S' w- |4 W图6
% i- `9 D7 i. f15:8位:保留不使用;0 p5 }$ p' i- s; x) f
7位:波特率使能位;. i( r! C* v9 q. i6 a, b1 m
6位:停止控制位;
) c. W! X( V) J7 U% O# ~# P+ q1 `5位:保留不使用;
( T% d7 b9 V' Q) W9 v4位:奇偶校验选择位;
) C: ?1 P8 @% U4 A' _9 y3位:校验位;( m' ]6 t% U! r. a5 e8 j; S
2位:停止位;
# P) T/ B% b7 I- y0 T5 ]$ d1:0位:数据长度。& y0 h, A1 o& S. S5 w6 L1 b
2.2.5 调制器控制寄存器
& Q- w2 a8 t$ J! y* O
" ^. h4 V, i% T, c3 o
# f2 N2 c- N& [5 K& R: [/ i; A7 N2 A7 c# J1 g) W* d
* O' }3 x, H+ o
图7
; k) d( X/ Y: [6 K4 x9 a* R15:7位:保留不使用;; ], a! _3 d+ T; ~
6位:红外通信使能位;
% q0 @1 h. Y) w0 G* f u% }5位:自动流控制使能位;# X* Q7 o# e6 h, Q9 X- u1 x& y
4位:回路位,用于测试;
3 l( \1 z+ t5 b3位:用户指定输出2;
; E/ @& b0 J9 q2位:用户指定输出1;) }' X- L2 Y% }5 Z% {/ b) Y
1位:发送请求;
! |7 V% \ u5 f7 m, c$ X0位:保留不使用。
7 Y5 s' e* E- I) b2.2.6 通信线状态寄存器2 Y n- q+ S* k# E, i
! T; z7 M8 d- k/ e9 [, f3 j: L" }/ D- r! ?
# H0 F1 {% @/ w- j" P) W7 `
/ N" L; o0 z0 m% r7 `$ m9 x图8
: l8 [6 A7 i; @' G7 ^2 e0 S15:8位:保留不使用;0 s+ q+ ^( G$ I6 ]- O2 Q6 E
7位:接收FIFO错误位;
7 v3 ^/ ~+ Q9 y; w8 f" \: O6位:发送器空位;
8 E3 k5 l" c4 C2 |, z2 p5位:发送保持寄存器空位;
1 x1 M. Q Y. R( R$ z9 A6 ]# |4位:异常停止中断位;2 _/ G6 p a1 p% N
3位:帧错误位;
' t0 x3 x2 |4 }$ i2位:校验错误位;* S" |2 k( @8 S
1位:溢出错误位;, s) c1 c. v4 f1 B
0位:数据准备好位。1 a6 l3 s: a) ^4 _9 j" `4 a/ J
2.3 寄存器配置讲解. k: G, v" q6 I( o
#define CLK_PER_REG (* ( volatile uint16*)0x50000004)* U9 j* a m% a# |. n7 H6 ?
#define UART_RBR_THR_DLL_REG (* ( volatile uint16*)0x50001000)
/ o% v$ c1 k. t- L# i#define UART_IER_DLH_REG (* ( volatile uint16*)0x50001004)
: z, K" [& e- W#define UART_IIR_FCR_REG (* ( volatile uint16*)0x50001008)# x$ y' F) a) Z$ ?3 ?
#define UART_LCR_REG (* ( volatile uint16*)0x5000100C)
. r' u6 M" q6 h) U/ P#define UART_MCR_REG (* ( volatile uint16*)0x50001010)7 [, s# }7 y2 g3 q, y, U# N
#define UART_LSR_REG (* ( volatile uint16*)0x50001014)
& a* u4 l6 U: Z#define UART_MSR_REG (* ( volatile uint16*)0x50001018)9 ^7 B+ W, u2 q/ z& }( ~2 A
#define UART_SCR_REG (* ( volatile uint16*)0x5000101C)
4 z3 u, c$ M8 N1 Z( \ v& R7 b9 {启动UART1模块的时钟CLK_PER_REG |= 0x0080;: ^' H# y' } ]" S7 w* }5 y
串口初始化寄存器配置:( R, y% F N/ j( G
首先使能波特率配置UART_LCR_REG = 0X08;# K, V, S6 h+ l
配置波特率UART_IER_DLH_REG = 0; UART_RBR_THR_DLL_REG = 9;
8 i! w; Z6 l9 d5 ]& a) r) S8位数据,无校验,1位停止位UART_LCR_REG = 0X03;
" t0 S5 V) Q) m% _$ d8 E) Q关闭红外通信功能UART_MCR_REG = 0X00;
2 M- K, c9 N3 {. Y使能FIFO, UART_IIR_FCR_REG = 0X01;
% |" P) t. z ]* w3 F3 ] V# S关闭中断UART_IER_DLH_REG = 0X00;
" h5 u0 E* x a# Q, D& B! k8 f" e2 j; ^接收一个字节,等待接收完成while((UART_LSR_REG&0x01)==0);读取接收数据rx_data = UART_RBR_THR_DLL_REG;
) y& J2 m2 G' E- V$ e发送一个字节0x55,等待发送为空while((UART_LSR_REG&0x20)==0);填充发送数据UART_RBR_THR_DLL_REG = 0xaa;5 z- Z. |% P( D; _
7 x1 R' U6 f. _! ?* F0 {) n
0 N [0 M! _3 }+ E7 _8 X
( z8 V( w0 }9 T n: z第三节 UART实验
( u& Q. Q: e& \4 j! i实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
( ?! _0 `; {6 T9 U* l* p$ V8 o( g使用USB转串模块连接手机蓝牙串口,连接方式如下:
! s% l: q7 F- X: L. t7 e8 _ (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:. Q7 n! |! A* M% f0 D" ~3 e# b0 o& U
- B: V3 x4 M1 J n6 F. i9 l1 @8 Z2 ]
( I, W" ^( n7 L3 s$ I2 y# Y图91 O$ w7 u) z8 `6 G$ j
(2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:6 J( [1 _# a7 f0 J8 a8 ~
( K6 E2 b! v* _( A( O0 O
) _' p0 S7 S2 |. M图10; r# q3 Q- V; [: q
使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:
& p/ b& s/ }1 L, S) o9 k' L3 T! o(1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:+ B6 j) [# {: a
! S V6 S& r* K% M; k. C# }8 b+ z# X
图11
$ B0 U7 L- x4 u, `% x(2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
! B. ~6 @+ D2 u5 g/ S. Y& ^ i1 H5 q B) s1 ?" s3 l/ B; R! p5 q! x
! {$ }# \+ A2 W1 b* {& t7 h. U
图12! Q/ ], K7 ?) I) A) v& @" M( q
将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
) H+ n& H! r8 Q. }+ r% ?打开串口实验的Keil工程uart.uvproj,位于目录:..\WT_Mobile\1.初级教程\DA14580\2_初级_串口\projects\target_apps\peripheral_examples\uart\Keil_5,如下图所示:
* `6 L( c8 D, C8 C6 ^' W
8 w4 z/ h3 v& z1 Y: [9 n' E, P. n C5 e) C5 R0 C0 G9 T1 N: ~
图13
) r+ ?( K& D& x1 h* q$ e# ]打开串口调试助手连接串口,波特率为115200。在KEIL中,编译代码,点击DEBUG,然后点击全速运行,就可以看到串口调试助手打印出的信息,发送什么就返回什么,例如发送“WT Mobile Test!”就会返回“WT Mobile Test!”,如下图所示:
/ D. ?% [# W& R, K" L& q' ]3 ?2 A) }# ~2 e8 ~+ @
& q7 x1 r9 i& d4 R4 ~) O/ L* i( b; i$ d7 \1 O
# L% n3 `) t' o1 h1 O1 z6 S
图14
* p7 Q* d T. C7 ^1 c7 C R5 T0 q$ x; h% `
. g" Q0 ]. ^" J
图15
6 _, Z! `" G# K# z! Q* |& A3 g
]. r" @9 U' |
, \# ~; h' o4 m5 _* u文件下载请点击:
串口教程.pdf
(1.43 MB, 下载次数: 0)
3 p; z, O8 H6 {4 J# w2 G8 \! U |
|