找回密码
 注册
关于网站域名变更的通知
查看: 199|回复: 1
打印 上一主题 下一主题

【开发教程9】ARM功能手机-串口实验教程

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-22 19:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Heaven_1 于 2022-6-30 13:08 编辑 * A7 ?0 k+ n' `- a5 t% _% x, G
$ K* w: }- m, ~9 g
串口实验教程
——疯壳·开发板系列
! i( |9 y6 [0 e$ ^1 z: T! Y+ e

7 R: N) ~! I  o) ^* G) D8 b* t- W$ e& z1 G
图1
( @2 m, x1 n; `7 G; w: \
! G" N' O# v8 l  N" o/ W
2 \) {$ B2 Q) U, j
, g" p6 \1 x/ A/ m' w. [  c第一节串口硬件电路
. d4 R" w: [$ b
# ]0 c# P9 I; l9 j, Q串口通过USB口及手环下载调试线引出,连接mcu的P12与P13引脚,如下图所示:( s% @: {/ O7 S

" C3 g3 D( N5 G3 b5 p  `) ?, Z3 B# {$ h! y) ^, o
图2* _$ [& q9 L0 U! g9 w4 w

4 U1 O& ~) O2 {1 u5 f$ o) U8 {. ?) E+ t4 `: ~  x( t

, U5 g; k! @4 ~( h第二节 UART寄存器8 K7 f0 ~* ]4 x5 ?! k, n
1 G! e4 b0 ]3 s/ N
2.1 UART介绍( X  D8 Y3 n$ M6 q) w) `
    这个UART符合工业标准16550,并且可以和外围设备串行通信。主设备(CPU)通过APB总线将数据写进UART并且被转换成串行格式并且发送到目标设备。串行数据也可以通过UART被接收存储之后,主设备读取接收的数据。0 e8 B  l; P8 v9 }! m( H/ i3 S. v
UART模块不支持DMA,但是它有内部FIFOs,并且支持硬件流控制信号(RTS,CTS,DTR,DSR)。7 F3 S8 J8 h3 K0 h0 j0 \8 R* Y# u
UART模块有16字节的发送和接收FIFO;支持硬件流控制(CTS/RTS);影子寄存器来减少软件开销并且有可编程的软件复位;发送寄存器为空的中断模式;IrDA 1.0 SIR模式支持低功耗模式;可编程的字节属性、校验位和停止位(1,1.5,2);可以断开通信及检测通信线是否断开;中断优先级的识别;可编程的串行通信波特率。
( v2 c' w1 M0 R( R2.2 UART寄存器) k/ X1 v3 t; o* c, G4 v- f' P
UART相关的寄存器比较多,所以我们只介绍常用的寄存器,其它的可以参考官方数据手册DA14580_DS_v3.1.pdf,位于目录:..\WT开发板\硬件资料。
( r- Y5 k, `; b4 H2.2.1 接收缓冲寄存器
4 A' S/ O/ U6 \; ]/ \# ]$ g% L2 d# ^

% x* r8 d% J% i" R
8 P; U, A; y9 {1 [; g4 r图3, G, q4 Y" ]$ ^
15:8位:保留不使用;9 V8 C9 m$ C5 w1 b- }5 v
7:0位:接收缓存寄存器。
2 D- ]; A2 H7 I( ]' J7 ?2 O1 a2.2.2 中断使能寄存器
* a; Z2 a/ s* X2 k( V# [* K0 a) D' B4 X# S; g' b
( h4 p, I6 {  b7 D# p7 K

. Q, l4 L- f& Q9 K图4
* k# v+ h) t2 d7 h+ T15:8位:保留不使用;: J" Y# y- s5 u: t1 v& P
7位:发送空中断使能位;' l% ~2 s- d6 L4 i0 C
6:4位:保留不使用;
$ s& `# u& v, H; E0 F5 Q, y4 |1 x3位:调制状态中断使能位;  L4 @5 z7 j$ c' k8 K0 a3 L
2位:接收状态中断使能位;) R+ |0 Q+ @! M: c; O
1位:发送结束中断使能位;
% w, f" N0 o1 z# {5 s$ |0位:数据接收完使能位。* ~6 I. m* y8 h4 v) O& Q1 v
2.2.3 中断识别寄存器/FIFO控制寄存器( s0 [. H4 O2 a! G0 n' O3 n
0 p; D. C+ F) p& F5 Z' B. p+ s# E
$ @- q' {3 Z- s1 w
图51 V8 a: k+ K5 \, T
15:0位:写则为FIFO控制寄存器,读则为中断识别寄存器。+ i/ b) A9 A2 Y; d4 C0 ]
2.2.4 通信线控制寄存器3 X- o1 i% |* ]9 W& Q( j. X" ~# ~9 v
! w1 J- R9 W- g1 @4 _
; r1 x7 j) U3 X* D0 \' E
图61 z6 Z9 h+ K! @$ T
15:8位:保留不使用;
$ e3 t0 S* ^, ^! M, x. m7位:波特率使能位;
! v" u, _" M7 C6位:停止控制位;
2 i1 s8 V& \' f  d$ O5位:保留不使用;# }0 G7 _  W0 y& U! s% a
4位:奇偶校验选择位;
5 f' W2 I" K" A8 c3位:校验位;+ g- c4 v# @0 Y) ?- {9 s
2位:停止位;
5 k7 D# P% w8 D, Q0 \( G1:0位:数据长度。
/ d, {. ?4 y# u2 O) S1 k) Q2.2.5 调制器控制寄存器
9 ?( y7 T& q, Q+ ]+ I+ Z. e/ D9 C* l% E
, a" d- T+ f; @: h9 Z5 R# o

3 [: d& e  g& z- _% K' N' |; k6 j
5 M, Z! b, x' Z! F图7
. y; H' S% n, P& U6 O15:7位:保留不使用;
( Q( v4 X2 s. @& f5 z6位:红外通信使能位;
* m; Z) }$ H* v, }7 ~  J0 e5位:自动流控制使能位;
$ A. l& F: R$ n* j8 U1 e. F4位:回路位,用于测试;
) ]# \" _8 k0 m# t; K5 t) K( w3位:用户指定输出2;* w  X' ]: `9 Y5 ~5 u# n$ E) T
2位:用户指定输出1;1 u2 l( O- D) L. c, F
1位:发送请求;  y4 P  }) C, t
0位:保留不使用。
  S6 y! B; d2 G. q2.2.6 通信线状态寄存器) Q% @( ^  t* G0 ^2 c: }5 C! B( C$ b" X
, |, @3 \' l2 v5 {3 ?4 [
# v2 p2 D& X+ k# p( g# Z2 _
$ x  c, M1 A# B) E8 @  M
5 w- m- R8 q: _( Q8 ]
图8
& q; w: p* ]5 _( k) V' L+ [) G15:8位:保留不使用;7 {$ c. x0 r' L8 J& W* t% ^
7位:接收FIFO错误位;( s/ t. A$ g7 n% F
6位:发送器空位;
$ p$ A) @, P3 u& |# _5位:发送保持寄存器空位;/ B6 y8 B9 L7 }" s" B6 e/ d. N& X9 ~
4位:异常停止中断位;. a5 [: Q* w) Q
3位:帧错误位;" [9 D# O' _6 `, c
2位:校验错误位;; v: [7 D* R4 _
1位:溢出错误位;3 G2 X' R% x# Z. T% P* o
0位:数据准备好位。) c. d4 G. @- y. @( x8 c2 x
2.3 寄存器配置讲解
% N6 v* d$ c# x" w9 f#define CLK_PER_REG                 (* ( volatile uint16*)0x50000004)
9 E. W8 ?. O, d$ T) Q( i#define UART_RBR_THR_DLL_REG        (* ( volatile uint16*)0x50001000)
9 I; r$ C0 ~" `#define UART_IER_DLH_REG            (* ( volatile uint16*)0x50001004)
+ n1 G$ ~' T) p: W! ^: q: o1 ]#define UART_IIR_FCR_REG             (* ( volatile uint16*)0x50001008)- n# l8 {6 B, b$ _, ?( J' [
#define UART_LCR_REG                (* ( volatile uint16*)0x5000100C)
! k+ }! P0 s" d' ~) y! p5 P) Q#define UART_MCR_REG               (* ( volatile uint16*)0x50001010)4 k8 V7 q' O$ O3 `# s2 m4 @
#define UART_LSR_REG                (* ( volatile uint16*)0x50001014)- P+ b: n4 z; @4 s. Y
#define UART_MSR_REG               (* ( volatile uint16*)0x50001018). ~, H3 t& C* ^1 _
#define UART_SCR_REG                (* ( volatile uint16*)0x5000101C)% @. W( w, }, i
启动UART1模块的时钟CLK_PER_REG |= 0x0080;" y4 Z- {# o  d* Q/ c0 N0 C; K6 W# D
串口初始化寄存器配置:- ~# `) Z# o, b3 n0 g- Z! P
首先使能波特率配置UART_LCR_REG = 0X08;% t. L: n3 y+ u
配置波特率UART_IER_DLH_REG = 0; UART_RBR_THR_DLL_REG = 9;3 m5 i; s1 v) X; f
8位数据,无校验,1位停止位UART_LCR_REG = 0X03;
8 l8 g+ |3 p4 P' y( {/ y% U关闭红外通信功能UART_MCR_REG = 0X00;6 l! Q* k" }, r6 O" ^2 m6 a' X1 C
使能FIFO, UART_IIR_FCR_REG = 0X01;8 ?! |' v* n+ _  p7 X& K# D3 I& `
关闭中断UART_IER_DLH_REG = 0X00;& D0 E+ Q- ?2 p) f* X
接收一个字节,等待接收完成while((UART_LSR_REG&0x01)==0);读取接收数据rx_data = UART_RBR_THR_DLL_REG;
# w. [6 D* j$ I发送一个字节0x55,等待发送为空while((UART_LSR_REG&0x20)==0);填充发送数据UART_RBR_THR_DLL_REG = 0xaa;! _1 t! p+ J+ O0 S7 Z/ ?" o3 i- p! Z
% i9 T' {8 ]$ a, r& B; k& b& I+ N
) Q* \  i3 R6 D/ p' u
/ Z3 q2 J4 y: S- b; i
第三节 UART实验/ I3 X0 o( C5 C* D. _0 j
实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
; \, t) ?' X% N5 Y使用USB转串模块连接手机蓝牙串口,连接方式如下:- Q; ]" j5 i0 N) G5 z
    (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:* ]8 F3 H. b1 B. h
0 ]( B  b% F4 j; h, ^& w7 G
8 j3 S2 K8 c- g: W2 A: ]
图9! S4 F) L( ]$ i* C! @
(2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:
4 Z0 r5 [0 W5 @* P3 F5 ^% c3 E( v$ E" g  ]. j* e

5 P, N5 @/ E5 ~# b# b9 Q图10
  i! l2 E+ q$ e1 y% M使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:& e# p2 K% d% |1 I
(1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:3 W! B, a7 G+ v) `( k

3 y) p1 `" [) V8 ]
) E+ h0 u3 E0 Z0 a- K图117 c3 I' v- g. h$ v8 b
(2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
) k9 e) r8 w0 \1 c. y% `# U9 n* |( F( _: s; h
4 A) O; @$ q4 y8 L) S7 P
图12
7 C8 g' S1 D7 `6 }7 m5 h% R将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。. h/ c& k) z6 y0 H' x* n" r
打开串口实验的Keil工程uart.uvproj,位于目录:..\WT_Mobile\1.初级教程\DA14580\2_初级_串口\projects\target_apps\peripheral_examples\uart\Keil_5,如下图所示:
$ R, t% h& E; {; @  E% t# [+ A2 D% T$ O2 p" D: Q3 a! z
% ?; R& `1 B9 E, B
图135 Z; N# |7 r% R# w/ p
打开串口调试助手连接串口,波特率为115200。在KEIL中,编译代码,点击DEBUG,然后点击全速运行,就可以看到串口调试助手打印出的信息,发送什么就返回什么,例如发送“WT Mobile Test!”就会返回“WT Mobile Test!”,如下图所示:; q( K3 D9 @% Y2 `8 T

: ~5 O# Y& X" g* H. l4 Z$ Z% T* \4 f! H+ X8 H" h5 J

! q, c$ D/ \7 O: Q0 h
; h: ~8 X  I- u( |图14( }% ?- ~0 A% k8 C
' z7 V* o3 K6 {4 N

7 s- @; |6 ?4 r: S. u图15( H: U0 W. Y: v) n: h) a( N+ _

' I# @7 e2 e. r7 U! d$ \! {( C$ S4 m; u
文件下载请点击: 串口教程.pdf (1.43 MB, 下载次数: 0) : K! V6 L. w5 i/ s  n
  • TA的每日心情
    开心
    2023-6-12 15:40
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-6-27 18:27 | 只看该作者
    串口是3根线,( a( ~5 U' J9 `& o' Q
    一根发送,一根接收,还有一个是地线
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-23 18:01 , Processed in 0.156250 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表