|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Heaven_1 于 2022-6-30 13:08 编辑
! t) C" I: x K0 X8 C* a/ Y1 G
串口实验教程 ——疯壳·开发板系列 & a9 c3 M' a+ Y5 D. F* o/ F, ?# y% w
. M+ {7 F5 Y0 n. V2 S9 O
4 ?" Y, k L9 E3 ]& \* y, g图1
! u7 o5 n1 Q6 r' H G
! C e: j" \% I4 U0 I& C% r
7 s( C* X0 E& S+ z! D, C {' R) k r5 s9 Y
第一节串口硬件电路
) L4 `1 `4 o" t! o, v* h/ C. S% U3 k$ h0 E D
串口通过USB口及手环下载调试线引出,连接mcu的P12与P13引脚,如下图所示:; f2 P* b6 a# H. t
% n- y# B3 L6 O4 P' T8 P9 a8 s/ ~5 T- ~/ V
图24 A( U) k2 y5 ~1 Y ^
7 J/ _% w3 l) R
1 ]3 _4 ~* t+ S$ d# `9 ] m, c! D
6 Y1 J! e6 {- t9 f G第二节 UART寄存器
. o/ t8 \) L! n7 T
; |# a6 ]& D3 v4 o) Z2.1 UART介绍6 M# Q! v8 b( V- P- C( s
这个UART符合工业标准16550,并且可以和外围设备串行通信。主设备(CPU)通过APB总线将数据写进UART并且被转换成串行格式并且发送到目标设备。串行数据也可以通过UART被接收存储之后,主设备读取接收的数据。
0 ] c, v* D rUART模块不支持DMA,但是它有内部FIFOs,并且支持硬件流控制信号(RTS,CTS,DTR,DSR)。* ^0 v. X* E. V4 d. I3 F; P4 k2 |% I
UART模块有16字节的发送和接收FIFO;支持硬件流控制(CTS/RTS);影子寄存器来减少软件开销并且有可编程的软件复位;发送寄存器为空的中断模式;IrDA 1.0 SIR模式支持低功耗模式;可编程的字节属性、校验位和停止位(1,1.5,2);可以断开通信及检测通信线是否断开;中断优先级的识别;可编程的串行通信波特率。
( L4 G: q5 b' q/ ^, x2.2 UART寄存器
! r+ R7 A0 K- OUART相关的寄存器比较多,所以我们只介绍常用的寄存器,其它的可以参考官方数据手册DA14580_DS_v3.1.pdf,位于目录:..\WT开发板\硬件资料。& G* I* ]) N9 u I# }$ T+ K
2.2.1 接收缓冲寄存器: Y% I- I$ k: D, d
+ f* y3 {% t( L
. K: D+ M2 c: d" H8 K
+ K/ T: A- } u图3, p( g9 V/ i4 I( ?% g
15:8位:保留不使用;
" R! T9 v" b3 z9 K$ I7:0位:接收缓存寄存器。
/ u8 U" x/ g7 |7 ]2 h$ [2.2.2 中断使能寄存器
1 x$ K) w U: T4 E; }
) p, f6 r1 O4 F) C9 G4 X$ B! l8 K5 d. a# U- `# M
p. Z, `, V% w3 E
图4
2 Y/ F9 f9 k4 j15:8位:保留不使用;
9 H/ A! D3 Y' l/ U( U8 t' [7位:发送空中断使能位;
5 z" I' U& j5 S" Z! C& z2 U6:4位:保留不使用;
5 I. r7 T' a' M3位:调制状态中断使能位;
' c) r2 l" s) P. o2位:接收状态中断使能位;
4 B$ M( e7 K* d& y; z6 H! K9 y1位:发送结束中断使能位;
4 f5 G# o0 w, V1 |2 o0位:数据接收完使能位。 S( [3 F; k4 B$ i N w
2.2.3 中断识别寄存器/FIFO控制寄存器
- H4 V- H& J J/ ]9 u5 z v0 p3 k7 f$ `, K$ Y# e
% r9 }! \4 j0 @/ G1 O
图5 C7 a3 o0 [& i7 ?$ B# I( @3 e
15:0位:写则为FIFO控制寄存器,读则为中断识别寄存器。$ k2 h# S" t" o6 @" ^' F9 v
2.2.4 通信线控制寄存器/ z+ t+ `& T% d2 [+ Z
! q4 o- U7 Z( L7 r, r
2 k4 k! O/ R) _
图6* q/ [5 ^% e9 _) f
15:8位:保留不使用;
$ h; T( Y' [) s' [0 |6 r7位:波特率使能位;, T# j* ]( p$ b# k4 k# I k- N
6位:停止控制位;+ v2 y4 A) q& n% x
5位:保留不使用;
$ b. p+ Y( q: j$ e# C3 ]4位:奇偶校验选择位;) ?$ Z) _, t% t4 d' `1 ]
3位:校验位;" _4 a) U D1 q! x5 U( s& E
2位:停止位;3 `% u0 ^( g- z6 j8 E4 v2 j
1:0位:数据长度。6 m% \# f5 L+ k k% l; S. h" |% _
2.2.5 调制器控制寄存器* x2 M6 Z% o; Z& t! {* S3 P
. F' e8 J- x1 u6 y; g. G1 H/ i* o% S/ U8 o, n
2 M5 c# P. W4 T. N) L/ v7 U3 R- y# Q, P5 C
图7
! w8 P: q6 d# o" p- v$ Q$ Y15:7位:保留不使用;# W' K8 C \# n$ E' N
6位:红外通信使能位;
7 H. t6 ^7 b0 x2 C* H5位:自动流控制使能位;
0 Q! G( q1 H3 O5 Q5 i4位:回路位,用于测试;+ m9 ^) o. u1 {( N3 j% S0 b
3位:用户指定输出2;
: }6 Q5 [/ G1 n* J$ f/ Y2位:用户指定输出1;
8 e0 I5 Y& U. ^+ y& u6 Z1位:发送请求;% f+ }& N% j: t% ?3 @+ F, {
0位:保留不使用。' x: f4 T R9 ]$ c. @
2.2.6 通信线状态寄存器! `) C( N5 {( [* S B
' J. e& I, f% Q& m. q
- G; ?8 Q# W8 x$ _' _% D2 F& x& V
! F) _6 A/ d# A5 A% R图8
8 z! }: S* _& E2 x15:8位:保留不使用;4 `8 k: f- U/ p6 ~1 W
7位:接收FIFO错误位;
$ Q; v0 H) m( I; t) m6位:发送器空位;0 C P Z4 n- T. o
5位:发送保持寄存器空位; Z# F" h6 W4 f' g% @
4位:异常停止中断位;# B: v5 U+ ^2 Z
3位:帧错误位;
0 Z. l& s9 m0 {& e3 l4 L2位:校验错误位;
0 \) Y( X2 ` b! d; d1位:溢出错误位;' }4 t7 ?& x; {2 Q( m
0位:数据准备好位。
; G/ o! E% S3 z) O# f2.3 寄存器配置讲解5 B; o' i/ \# u2 d
#define CLK_PER_REG (* ( volatile uint16*)0x50000004)
. p8 m2 ?' e# l#define UART_RBR_THR_DLL_REG (* ( volatile uint16*)0x50001000)
" H7 M) N; Q+ W3 K+ k#define UART_IER_DLH_REG (* ( volatile uint16*)0x50001004)
9 K* z1 D+ E& v) t* I/ ~4 l#define UART_IIR_FCR_REG (* ( volatile uint16*)0x50001008)% D8 }, z/ N4 O4 c% n! i; M/ X
#define UART_LCR_REG (* ( volatile uint16*)0x5000100C)
1 r! l" h6 w- |" E) f. b, |9 r#define UART_MCR_REG (* ( volatile uint16*)0x50001010)4 b! V' D4 P ]3 a. _
#define UART_LSR_REG (* ( volatile uint16*)0x50001014)
. F" T2 O) G. |2 z#define UART_MSR_REG (* ( volatile uint16*)0x50001018)
C+ C# D6 W/ k#define UART_SCR_REG (* ( volatile uint16*)0x5000101C)
: M8 b9 i8 S. _5 y# [启动UART1模块的时钟CLK_PER_REG |= 0x0080;1 H/ w( _- M/ r0 @* N
串口初始化寄存器配置:
' a5 | |, @$ G8 B; Y2 D; |首先使能波特率配置UART_LCR_REG = 0X08;
* a" `3 h& ?# Y2 S% d4 c# `配置波特率UART_IER_DLH_REG = 0; UART_RBR_THR_DLL_REG = 9;
. p- h6 N9 {! S+ G( y8 t8位数据,无校验,1位停止位UART_LCR_REG = 0X03;; q+ J# Y. j, Y3 V
关闭红外通信功能UART_MCR_REG = 0X00;
% A, ?# C+ ?" y8 j" v8 {4 j# D使能FIFO, UART_IIR_FCR_REG = 0X01;
1 W. v) o7 q+ V" L {关闭中断UART_IER_DLH_REG = 0X00;& o: ]" y2 J5 f( V( o
接收一个字节,等待接收完成while((UART_LSR_REG&0x01)==0);读取接收数据rx_data = UART_RBR_THR_DLL_REG;7 l8 F0 x- L, @
发送一个字节0x55,等待发送为空while((UART_LSR_REG&0x20)==0);填充发送数据UART_RBR_THR_DLL_REG = 0xaa;( ~2 M: }* u( X2 `
; A0 {8 m, v( G8 O$ V1 `- d
, [/ M9 W2 W. Z5 Z. n& T
1 W" G% }$ g) R6 c1 [ T7 o
第三节 UART实验1 f3 D5 O. [& j7 q) I2 v# a; E
实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。5 e; j+ Z' B, q
使用USB转串模块连接手机蓝牙串口,连接方式如下:0 Y' |$ l! W2 y' L- C7 i' K
(1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:
; C8 Z& B7 `& q) f# K) d+ K6 }8 z( H! F* d% k, v
3 y* m g4 G) Z1 d6 g6 I$ {
图9, O: Q* W v, X/ c$ V* b1 e
(2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:# f Y2 f9 v# L: |; z+ {5 ~1 A& D5 W6 r9 |
1 g+ _. V* n. h- w* @& U& I4 \' a% B3 ]4 Z( F
图10
9 w0 G, C& A1 B使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:
: I6 F6 m# _# }3 ^9 f I/ k2 i(1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:: k1 ~4 o0 _' E A5 i* l
& {2 c% p- f5 K( d& L, z+ Q7 ~$ j+ D1 n" q; V% n
图11) {6 X3 G$ l9 X( W" ?) B
(2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:) n( \6 |9 v, J1 [: M
% Y" Z- a7 ^# D
. ]9 I) {, F: N. D0 I8 f; R
图12/ H$ R. w) x; A, }$ T7 h
将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。0 X" ^$ W, f/ v9 c" h! f
打开串口实验的Keil工程uart.uvproj,位于目录:..\WT_Mobile\1.初级教程\DA14580\2_初级_串口\projects\target_apps\peripheral_examples\uart\Keil_5,如下图所示:' F: k6 c' X6 r% k1 H
! b9 o$ i* c2 {" ^& T3 G
* H3 a# X- B: x, x' k) W图13
+ o. o5 l0 D+ K D! s打开串口调试助手连接串口,波特率为115200。在KEIL中,编译代码,点击DEBUG,然后点击全速运行,就可以看到串口调试助手打印出的信息,发送什么就返回什么,例如发送“WT Mobile Test!”就会返回“WT Mobile Test!”,如下图所示:
( c# T' c, g. [) H
0 k% G; b- N4 j# q. X7 K$ N
% J) h2 Y9 e+ j; k# D& R
, d# F9 G1 s2 m! C' d2 h, \. p
) |4 y" ~% d. {: g6 k9 U. e$ x3 E) n
图14
& @5 E0 `! R/ F( R H
; a/ T' J B; c( |: I
6 L( X0 x2 _( r图15
2 G) V5 l. S$ M; U6 K! N& l; U# i9 u5 k, q% ]* f, o9 v
1 R# E, U# T; N) H' `3 d' L文件下载请点击:
串口教程.pdf
(1.43 MB, 下载次数: 0)
5 U# q3 H) W3 |) I8 F9 e8 i |
|