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 @! P8 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$ b2.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* a15:8位:保留不使用;$ I2 p+ v" s# [* A
7:0位:接收缓存寄存器。
" A( o$ _! k2 P( L* P2.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$ ]' \图43 C: v* _' v7 A; v' ]1 J
15:8位:保留不使用;
3 q0 ?7 \' z7 w& t; a% V7位:发送空中断使能位;$ t9 w! [/ V3 P3 [8 ~
6:4位:保留不使用;# k+ i6 p0 _! ~2 ?1 c
3位:调制状态中断使能位;
0 J( o! @9 s6 X2 \! z" y2位:接收状态中断使能位;
2 ]: T4 m: ^/ G; h  |7 }$ p, {* d1位:发送结束中断使能位;
. u3 m) A9 K( e* E+ M/ A. H0位:数据接收完使能位。- 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- g15: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
图68 _' Z: D+ i4 j7 x0 y) ?
15:8位:保留不使用;
0 r* `& ]' F& t2 L- Q7 P; M7位:波特率使能位;
. O: [  X( p% @! {8 v6位:停止控制位;
& Y+ o/ i, i" F+ Z& Y+ g5位:保留不使用;
! \/ u9 E6 V  m& A; Z7 Q4位:奇偶校验选择位;0 E+ M+ ?- N1 \. |  m
3位:校验位;
, u' ^& Q: N5 [, @) Z2位:停止位;: k0 ?% q: C7 h" ^# r2 ^' R' W
1:0位:数据长度。
8 c" A0 H4 i/ G: I+ D# a8 G2.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* l15:7位:保留不使用;( x7 v3 c! Z- B% Z
6位:红外通信使能位;
: _4 K# h, T% k! S5位:自动流控制使能位;& 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) @: d0位:保留不使用。
4 u1 }6 _& e2 ^4 b# s2 z( }3 Z2.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+ r15:8位:保留不使用;
2 l3 O) @( w& d7位:接收FIFO错误位;
! A; w0 M8 J+ a& X6位:发送器空位;; 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 H1位:溢出错误位;! f6 Z; S4 }% C9 Q) X
0位:数据准备好位。
7 `0 w) C" c; O$ O2.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) B8位数据,无校验,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
图120 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
- _1 U+ L. a" {: |图141 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)
" 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