EDA365电子论坛网
标题:
【开发教程9】ARM功能手机-串口实验教程
[打印本页]
作者:
FutureX
时间:
2022-6-22 19:20
标题:
【开发教程9】ARM功能手机-串口实验教程
本帖最后由 Heaven_1 于 2022-6-30 13:08 编辑
% v9 z0 _8 w) q" X5 W
( t: {! E3 n. k5 L& X
串口实验教程
——疯壳·开发板系列
7 B/ r; `4 \6 `3 ^
/ [2 @4 f, ?2 P" i$ a a: _3 V
[attach]348102[/attach]
: F" L# a! q4 Y8 Q
图1
# @9 o* t, o; h9 ^ r
N# Z" Y2 ]6 @
% Y" \; x2 a- B$ V/ `
! l' Z$ D$ w7 w$ R9 l9 ?
第一节串口硬件电路
1 Z! ]# ?: {/ g* u/ V
' ]. ~ N2 j0 }
串口通过USB口及手环下载调试线引出,连接MCU的P12与P13引脚,如下图所示:
) h5 M* g! ^& H, Q; @
* I- e9 m" k+ R6 n9 ^5 W
[attach]348103[/attach][attach]348104[/attach]
8 J" l8 a& o/ c. [
图2
0 v1 z' `5 ~2 S8 r8 @! P
8 f4 \4 [; \5 m# `1 I+ h
e% U+ V) e. r
6 \; A* K. ]5 t4 M+ R; \
第二节 UART寄存器
; ]+ ?: \2 H' `0 e
- x' s# l2 `* s$ b
2.1 UART介绍
% U+ Y) ^4 t* e* W! _7 ^
这个UART符合工业标准16550,并且可以和外围设备串行通信。主设备(CPU)通过APB总线将数据写进UART并且被转换成串行格式并且发送到目标设备。串行数据也可以通过UART被接收存储之后,主设备读取接收的数据。
" z0 ]/ A1 a8 b& _
UART模块不支持DMA,但是它有内部FIFOs,并且支持硬件流控制信号(RTS,CTS,DTR,DSR)。
" n, ~) x. z3 G' h# [+ h. ^
UART模块有16字节的发送和接收FIFO;支持硬件流控制(CTS/RTS);影子寄存器来减少软件开销并且有可编程的软件复位;发送寄存器为空的中断模式;IrDA 1.0 SIR模式支持低功耗模式;可编程的字节属性、校验位和停止位(1,1.5,2);可以断开通信及检测通信线是否断开;中断优先级的识别;可编程的串行通信波特率。
& P/ @( o0 J" n: M+ I2 X5 q7 {
2.2 UART寄存器
7 a3 n1 l9 o7 C' p2 d, r% C7 `9 N+ |
UART相关的寄存器比较多,所以我们只介绍常用的寄存器,其它的可以参考官方数据手册DA14580_DS_v3.1.pdf,位于目录:..\WT开发板\硬件资料。
/ [ a, _ o+ K1 w( k& p! f4 ?, e
2.2.1 接收缓冲寄存器
* ~- L/ T l* ]2 R3 w: p
, w- P6 G' v2 w) |* ~
[attach]348105[/attach]
$ b) `! V5 F: I6 _
[attach]348106[/attach]
- @, w5 R @1 h* O) j
图3
( b4 E+ r- h3 x. j* a
15:8位:保留不使用;
$ I2 p+ v" s# [* A
7:0位:接收缓存寄存器。
" A( o$ _! k2 P( L* P
2.2.2 中断使能寄存器
; t4 |) E: Q2 l2 ]
+ `/ L7 Z! u8 O+ I5 i# z/ N: y
[attach]348107[/attach]
$ b/ t4 b5 X8 P+ f, N d3 Q9 t# e! e
[attach]348108[/attach]
5 l+ g" e$ ]' \
图4
3 C: v* _' v7 A; v' ]1 J
15:8位:保留不使用;
3 q0 ?7 \' z7 w& t; a% V
7位:发送空中断使能位;
$ t9 w! [/ V3 P3 [8 ~
6:4位:保留不使用;
# k+ i6 p0 _! ~2 ?1 c
3位:调制状态中断使能位;
0 J( o! @9 s6 X2 \! z" y
2位:接收状态中断使能位;
2 ]: T4 m: ^/ G; h |7 }$ p, {* d
1位:发送结束中断使能位;
. u3 m) A9 K( e* E+ M/ A. H
0位:数据接收完使能位。
- e: o; h! ?9 N& h+ `) e- U
2.2.3 中断识别寄存器/FIFO控制寄存器
# H2 J" f* e6 S6 a
# _3 B; i4 B1 b
[attach]348109[/attach]
# p# h; }: T7 }5 ?" m
图5
. k( Q4 g' U: _2 T- g
15:0位:写则为FIFO控制寄存器,读则为中断识别寄存器。
# X+ m5 Z+ h& W+ d6 W9 Z# X6 _
2.2.4 通信线控制寄存器
. a1 N C# z5 Q. a8 u1 J, m
$ P( p% y1 _6 z, }5 U
[attach]348110[/attach]
% P% V1 ^+ W3 \/ p( S3 E
图6
8 _' Z: D+ i4 j7 x0 y) ?
15:8位:保留不使用;
0 r* `& ]' F& t2 L- Q7 P; M
7位:波特率使能位;
. O: [ X( p% @! {8 v
6位:停止控制位;
& Y+ o/ i, i" F+ Z& Y+ g
5位:保留不使用;
! \/ u9 E6 V m& A; Z7 Q
4位:奇偶校验选择位;
0 E+ M+ ?- N1 \. | m
3位:校验位;
, u' ^& Q: N5 [, @) Z
2位:停止位;
: k0 ?% q: C7 h" ^# r2 ^' R' W
1:0位:数据长度。
8 c" A0 H4 i/ G: I+ D# a8 G
2.2.5 调制器控制寄存器
& n: l3 _! Y1 j0 m$ n: j4 Q
1 `5 N* j/ _5 A% L
[attach]348111[/attach]
6 }$ ^6 u* S2 S7 ?5 g
[attach]348112[/attach]
5 Q4 D/ b7 Y+ s4 ]' K/ p: V0 I( p8 |
[attach]348113[/attach]
) e/ X2 |" w* b1 ?; L0 ~4 A
图7
: V% J& x0 L3 U* l
15:7位:保留不使用;
( x7 v3 c! Z- B% Z
6位:红外通信使能位;
: _4 K# h, T% k! S
5位:自动流控制使能位;
& w9 V/ V, ], |4 n2 S
4位:回路位,用于测试;
8 h7 [% b5 v9 x% V; [/ g7 v0 z! N) N
3位:用户指定输出2;
( c. y$ y8 }' F1 G
2位:用户指定输出1;
% K2 G2 @: g% n
1位:发送请求;
& _- N8 l) @: d
0位:保留不使用。
4 u1 }6 _& e2 ^4 b# s2 z( }3 Z
2.2.6 通信线状态寄存器
' h( J( C+ B$ L* M# J
' D1 B Y3 q& o
[attach]348114[/attach]
8 [* p- g* Y% z- k9 i9 s" S
[attach]348115[/attach]
* o+ R) A# z, U" f" x
[attach]348116[/attach]
6 M& f9 C' W: C8 `0 Q' K
图8
0 ?) E) x$ T& G. S9 Y+ r
15:8位:保留不使用;
2 l3 O) @( w& d
7位:接收FIFO错误位;
! A; w0 M8 J+ a& X
6位:发送器空位;
; T1 L s. j2 k6 u# {6 i+ Y
5位:发送保持寄存器空位;
' b& K/ c U8 U9 ^
4位:异常停止中断位;
o4 z8 U+ ]: |+ x
3位:帧错误位;
: `) _) p7 m, }1 b3 n7 y: B
2位:校验错误位;
1 l: l+ S) I1 ~$ N" N2 H
1位:溢出错误位;
! f6 Z; S4 }% C9 Q) X
0位:数据准备好位。
7 `0 w) C" c; O$ O
2.3 寄存器配置讲解
0 k- {( B# [1 ~" U6 Q D
#define CLK_PER_REG (* ( volatile uint16*)0x50000004)
0 d0 d( {4 D5 \' r" |% p& p
#define UART_RBR_THR_DLL_REG (* ( volatile uint16*)0x50001000)
6 c$ ^5 y) B* [1 T& S2 A2 T( J5 A
#define UART_IER_DLH_REG (* ( volatile uint16*)0x50001004)
: }. L& d& Y, H
#define UART_IIR_FCR_REG (* ( volatile uint16*)0x50001008)
- M7 o% V) ]* V! U. u* D# E
#define UART_LCR_REG (* ( volatile uint16*)0x5000100C)
; x" C/ y X i& h+ A. m" o
#define UART_MCR_REG (* ( volatile uint16*)0x50001010)
0 e: L; j( a5 w; a7 [$ p8 S3 t" n
#define UART_LSR_REG (* ( volatile uint16*)0x50001014)
2 O( H6 e( ?8 R
#define UART_MSR_REG (* ( volatile uint16*)0x50001018)
$ n% q7 l2 K, A) e/ ~9 {
#define UART_SCR_REG (* ( volatile uint16*)0x5000101C)
. c$ t2 C7 J8 X( ^3 ]( n: \
启动UART1模块的时钟CLK_PER_REG |= 0x0080;
! D6 f- V7 k8 Z: T
串口初始化寄存器配置:
4 \% U% \ _8 T5 [! g9 |
首先使能波特率配置UART_LCR_REG = 0X08;
) e/ q8 r1 u. `: C5 S: M& S! I
配置波特率UART_IER_DLH_REG = 0; UART_RBR_THR_DLL_REG = 9;
7 b' E+ i6 L; W: X' Q) B
8位数据,无校验,1位停止位UART_LCR_REG = 0X03;
# U0 w$ u4 v$ [* O2 I+ R) M
关闭红外通信功能UART_MCR_REG = 0X00;
% k: d5 p. a# a9 v! a
使能FIFO, UART_IIR_FCR_REG = 0X01;
$ y" Y: Q, |* [& }/ L, X% x! K
关闭中断UART_IER_DLH_REG = 0X00;
0 p0 {% @, b3 w5 f; h" |) z
接收一个字节,等待接收完成while((UART_LSR_REG&0x01)==0);读取接收数据rx_data = UART_RBR_THR_DLL_REG;
/ Q7 C3 x- X9 i
发送一个字节0x55,等待发送为空while((UART_LSR_REG&0x20)==0);填充发送数据UART_RBR_THR_DLL_REG = 0xaa;
$ O5 l/ F" i% {2 v7 M1 y
2 @; e, v% I. X8 K- d) o8 A
. ~+ C2 k3 r4 C4 }
4 e- J4 d& [: V
第三节 UART实验
+ n# ]8 z3 U3 T' A M" E# U
实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
% M+ c6 u6 g" \ }- e
使用USB转串模块连接手机蓝牙串口,连接方式如下:
; Y4 c4 r$ U$ d, l; p$ ?: o8 ~
(1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:
) x+ N0 G; k' ^2 O6 X7 i4 F& e
O& w a- d( G; }! \/ c2 c: T3 p6 w
[attach]348117[/attach]
) F$ P( N1 n, A/ X3 ~
图9
1 B# `. {) c0 A+ h2 B0 ?5 G
(2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:
' J% M b) D# Z( w4 J! Z ?" {4 T4 a
: ` ~$ k4 W* Q& d
[attach]348118[/attach]
. g' p* L. A# r* P
图10
|% t. {$ f- U2 T2 C4 }
使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:
. x, m; J* m9 ^! t5 E6 {
(1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:
' T+ G- X; {5 n0 j
* J' ^' e* y! t3 A* b, |; Q3 `% A; R
[attach]348119[/attach]
, b: m1 n3 }# g
图11
u5 Y: W- n" D4 _! _( z
(2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
5 c$ y4 _. B8 o2 _9 z* Y5 R, O
" P M1 @- H3 q# ~
[attach]348120[/attach]
' O; v% ]* R) c9 v N2 }4 W1 k6 X
图12
0 h+ M4 f f) x6 q
将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
8 u* E4 z8 ]; [. @' ~4 z0 Y3 U. U
打开串口实验的Keil工程uart.uvproj,位于目录:..\WT_Mobile\1.初级教程\DA14580\2_初级_串口\projects\target_apps\peripheral_examples\uart\Keil_5,如下图所示:
+ e' C/ H' @; ?6 c. q: ~. y
! S3 A! D* C1 v- s Z# s: [2 n
[attach]348121[/attach]
i: i @4 S) ~- @( [
图13
" s7 S- R- F0 C; l0 R$ f$ r* [
打开串口调试助手连接串口,波特率为115200。在KEIL中,编译代码,点击DEBUG,然后点击全速运行,就可以看到串口调试助手打印出的信息,发送什么就返回什么,例如发送“WT Mobile Test!”就会返回“WT Mobile Test!”,如下图所示:
3 r1 M1 C( @2 `6 j+ G& n# X$ H$ N
# t' g8 `" Q7 V. D! O" j: c
[attach]348122[/attach]
% p" l9 Y% O: r' R
* h" p& c. q7 ^ H
14.1.png
(17.92 KB, 下载次数: 5)
下载附件
保存到相册
2022-6-22 19:19 上传
- _1 U+ L. a" {: |
图14
1 w3 Z* ~+ ]8 W
: Q6 R$ _' ?* T
[attach]348126[/attach]
% ]3 ~0 o& F9 c6 N; h: A; w, n
图15
* P! ^4 c8 h5 t
% j" j1 j; ~6 z
) X0 q) j6 V) ]& B" F0 ]
文件下载请点击:
串口教程.pdf
(1.43 MB, 下载次数: 0)
2022-6-22 19:20 上传
点击文件名下载附件
下载积分: 威望 -5
" Q0 e9 J5 I* j
作者:
mnfvbnk
时间:
2022-6-27 18:27
串口是3根线,
$ n) Q, s( B$ n- ^
一根发送,一根接收,还有一个是地线
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2