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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Heaven_1 于 2022-6-30 13:08 编辑
( y5 f7 M, u5 `
" L! U. Q' O$ }- H; I
串口实验教程
——疯壳·开发板系列
) U; L% i- [1 @
; s- t9 U: s  Z% \  Y
- Y. p5 P7 M1 Y( y6 q
图1
: t( h+ ^: x& W% @1 l* J/ v) W: @
# P1 m6 ~$ m) b7 O6 ?' G  i
8 D) R* R% r& y- I$ M. p$ Y6 z; k
第一节串口硬件电路; B/ `9 M% \0 C1 C1 i. J8 E

/ l& p, ]7 G. p串口通过USB口及手环下载调试线引出,连接mcu的P12与P13引脚,如下图所示:
* y' u* x3 K2 z" t- M9 l9 \" y

/ q5 T$ l* v6 d: a1 K) [- `图2
, a6 ^% r. w' a8 Z
/ {8 U% n) o9 q' ]0 r+ f  O# _1 k; h- P
+ P8 u( Z2 ~6 p( A7 I& m! f/ u
第二节 UART寄存器; ]9 M4 i6 k6 o+ _

2 S$ s4 q" |5 l' \2.1 UART介绍  i1 a. d' F! M$ b1 p# x
    这个UART符合工业标准16550,并且可以和外围设备串行通信。主设备(CPU)通过APB总线将数据写进UART并且被转换成串行格式并且发送到目标设备。串行数据也可以通过UART被接收存储之后,主设备读取接收的数据。/ }  n0 W2 G; w& X* D
UART模块不支持DMA,但是它有内部FIFOs,并且支持硬件流控制信号(RTS,CTS,DTR,DSR)。+ i( Y. i, [* \) q1 p
UART模块有16字节的发送和接收FIFO;支持硬件流控制(CTS/RTS);影子寄存器来减少软件开销并且有可编程的软件复位;发送寄存器为空的中断模式;IrDA 1.0 SIR模式支持低功耗模式;可编程的字节属性、校验位和停止位(1,1.5,2);可以断开通信及检测通信线是否断开;中断优先级的识别;可编程的串行通信波特率。+ |' P/ m, B; m+ f5 q
2.2 UART寄存器
/ w7 [! F* }# k4 t7 eUART相关的寄存器比较多,所以我们只介绍常用的寄存器,其它的可以参考官方数据手册DA14580_DS_v3.1.pdf,位于目录:..\WT开发板\硬件资料。1 r1 L. [7 D) @9 `, I. b
2.2.1 接收缓冲寄存器
" @! @4 D! W8 M7 Y: ~& W. ^0 T$ w# P2 I4 h
0 A. K4 f- l7 E  m6 G& ]8 Y

, [2 R: V  F& ^0 n% C图3
% B$ G4 X2 X& M0 |4 p15:8位:保留不使用;& N2 B5 s& K/ b* K) Z" ]7 e. c
7:0位:接收缓存寄存器。( l& ~  \4 ?8 ~, ]' }8 Q2 z
2.2.2 中断使能寄存器
+ K' d) {- a, Q7 X# \- a
8 U) Q5 q& O6 F6 u% p4 ?) S) S
" d8 o% |5 q. J$ E& I3 N
( _/ Q+ b/ f' b7 ~: T/ J) L图44 [& y, {- q( V8 x% l5 e# }& t. r
15:8位:保留不使用;( P0 i$ }% q+ c, p2 D
7位:发送空中断使能位;& `; p! C+ _/ }! o( G) }
6:4位:保留不使用;
' v; z* x3 @( k3位:调制状态中断使能位;
; H7 |  b" q, R  o3 b$ @2位:接收状态中断使能位;# }1 Z0 L3 I: v8 I# s: {
1位:发送结束中断使能位;4 {4 K' Q: x/ I8 n. v5 k
0位:数据接收完使能位。1 A: }# A( ]& K# ^
2.2.3 中断识别寄存器/FIFO控制寄存器
" V# f) P' v9 n+ I3 g" Y  g9 `9 g5 C# C. v
7 `7 A: a2 M4 C" H" k  w  Z" |
图5
( D4 _& e9 d7 P, S7 ?" N- r% T15:0位:写则为FIFO控制寄存器,读则为中断识别寄存器。
; {) s/ {; Z$ [6 B& i9 X/ d' b2.2.4 通信线控制寄存器
' i# X7 T9 e$ z# X; G, G! m( S) j( b$ |. B! T- J

& I" p& ^/ C8 u( ~图6* x3 L8 _8 w% j' s; O
15:8位:保留不使用;% R5 M" v) U2 g4 T0 y3 s
7位:波特率使能位;* S  n& |: p+ Z* U4 ~
6位:停止控制位;
) v9 ^: E) X/ B0 P& {5位:保留不使用;
" C3 t8 _3 o: k4位:奇偶校验选择位;
/ Y, [, [8 u4 K4 T. o7 l, ^  {' }0 }3位:校验位;
7 K! W7 Y: o. ?+ b& r2位:停止位;
! x# _; I9 k+ [4 i0 m4 j, A2 v1:0位:数据长度。
9 E5 [: q" j' |+ a2.2.5 调制器控制寄存器. k" ]- r" v: q3 ^

* T- m& Z9 \5 S: _* h' U+ X! H
- m. K# `0 S* X; X9 L; N) p, N+ E, g( e8 Q1 |

5 q1 q" T! F- F' Y4 C5 @图7
  N% h* o9 k& c  J15:7位:保留不使用;+ r7 j# U, ^) o' `1 K! x% [' j
6位:红外通信使能位;
) K( o; g5 b0 o5 P5位:自动流控制使能位;
" [+ N" {# s9 ?3 Q. f$ W. i, _2 n4位:回路位,用于测试;
  Z; j8 J: {4 ~# v* r" ^3位:用户指定输出2;# K) Q. A2 z0 p7 }7 _6 R
2位:用户指定输出1;0 |$ S6 u6 H4 u, M2 K
1位:发送请求;5 Z% W- L! d: _2 g# K
0位:保留不使用。7 [+ m1 N+ a/ a- }3 b+ @
2.2.6 通信线状态寄存器
3 ~: e& m3 \7 _4 s. j  }
% X7 v. J; P" r* y7 H' I; J2 {2 O- l4 j) T  G9 I* s
$ l9 f& U( e. |7 S4 q- J9 P5 E

7 V' H$ d( C8 \: O; I1 K; {图8/ w5 o7 r; G2 k: }
15:8位:保留不使用;+ p5 Z' _; Y7 ?; C
7位:接收FIFO错误位;
9 ~; |& |8 c: q; E. P6位:发送器空位;
( h+ |* G4 c/ p+ o8 H! z4 Y( |/ E5位:发送保持寄存器空位;2 W  y7 d1 J& u: B: E3 t
4位:异常停止中断位;
3 N, F, T4 X  S) F9 N) O0 n3位:帧错误位;. @8 `! W* A* a/ b
2位:校验错误位;9 z8 O. ^8 C$ H9 n2 u  x" y
1位:溢出错误位;
3 V6 ?% _! `7 g% I  K- ]5 ^: l7 ~0位:数据准备好位。/ _! N  c! F& P9 g# L# e
2.3 寄存器配置讲解
$ [* e0 n4 `, \1 _#define CLK_PER_REG                 (* ( volatile uint16*)0x50000004)
: x5 J  j8 M# \: X, y. p; G2 T. Q#define UART_RBR_THR_DLL_REG        (* ( volatile uint16*)0x50001000)0 ~- j6 i! I) }: R0 W9 e( b" s
#define UART_IER_DLH_REG            (* ( volatile uint16*)0x50001004)
$ H+ j1 ?" T0 D6 B#define UART_IIR_FCR_REG             (* ( volatile uint16*)0x50001008)
3 H; W, \; A, S- X#define UART_LCR_REG                (* ( volatile uint16*)0x5000100C)! N! w7 _  ?% }$ l5 f+ J( ?- |
#define UART_MCR_REG               (* ( volatile uint16*)0x50001010)
2 f9 B/ t* v3 ~, m$ h#define UART_LSR_REG                (* ( volatile uint16*)0x50001014)
, v+ H# l: K. e: t1 e#define UART_MSR_REG               (* ( volatile uint16*)0x50001018)8 l& o% b/ m5 g0 p' I) y8 x
#define UART_SCR_REG                (* ( volatile uint16*)0x5000101C)7 j6 c6 o4 s7 t" k
启动UART1模块的时钟CLK_PER_REG |= 0x0080;
# i/ k, g# f3 `; {& k5 F2 W, x8 f2 u* M串口初始化寄存器配置:
  O% m  H6 A6 d$ g; C4 `8 |9 m首先使能波特率配置UART_LCR_REG = 0X08;2 T2 }3 o( q& x
配置波特率UART_IER_DLH_REG = 0; UART_RBR_THR_DLL_REG = 9;
+ b, S9 s9 p- X8 b7 y( z0 ]2 d8位数据,无校验,1位停止位UART_LCR_REG = 0X03;/ R  f2 v7 I' @" I% v
关闭红外通信功能UART_MCR_REG = 0X00;1 ?" Y& `5 A5 f' q. v; N) v  Y
使能FIFO, UART_IIR_FCR_REG = 0X01;
' u6 }; g6 Z6 S- v关闭中断UART_IER_DLH_REG = 0X00;
4 _2 b% Z6 a8 _接收一个字节,等待接收完成while((UART_LSR_REG&0x01)==0);读取接收数据rx_data = UART_RBR_THR_DLL_REG;
* \, F% e& j3 R* ~发送一个字节0x55,等待发送为空while((UART_LSR_REG&0x20)==0);填充发送数据UART_RBR_THR_DLL_REG = 0xaa;( P/ `8 ?3 D% C4 \

" I9 c) W% {% k* b
% |+ d# \3 }6 r* @5 [+ j5 _& t( D! N' |3 c0 L8 R: o
第三节 UART实验7 x* b' p# o: G* W. m
实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。6 Z- o/ |6 m1 e2 T4 T0 P2 O
使用USB转串模块连接手机蓝牙串口,连接方式如下:( V. J" m6 E; U
    (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:7 E4 X0 e/ x/ ]6 d& |  Y
8 Z. t9 q+ Q& N6 S

* C" p0 ?- i; |" v图9
. c" j# a+ _/ F+ B (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:/ ]2 t+ D* r( X4 E

( e2 e5 s* r+ Z5 J
9 v4 D# ^' [$ \- L图10
% c% y/ I8 r: {$ i. j5 r使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:8 A) @( l) b+ M3 z7 s
(1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:5 u' t% E5 r0 y# H8 F# g
& Q) x6 r6 V9 R7 K, j) w8 j

1 b% F9 ~5 q  S( x6 }: U5 z图11
4 E, E/ @- [9 x6 `) d" }* W(2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:# M6 M/ q7 G/ p* D. A
% B  h2 z# k  M  `4 e% @
9 }: K' t# k; C0 @4 `/ t
图124 C2 n  `' H, j! I* g  ?) p
将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。9 l. \: F+ j" g
打开串口实验的Keil工程uart.uvproj,位于目录:..\WT_Mobile\1.初级教程\DA14580\2_初级_串口\projects\target_apps\peripheral_examples\uart\Keil_5,如下图所示:
2 U# X1 T" q% x/ y' e( p; Y2 g2 Y. }1 P( B. |7 V) e/ r! N
! c) }* a4 M7 ?  S
图13
+ k* \9 s( _! t& Z. I+ n打开串口调试助手连接串口,波特率为115200。在KEIL中,编译代码,点击DEBUG,然后点击全速运行,就可以看到串口调试助手打印出的信息,发送什么就返回什么,例如发送“WT Mobile Test!”就会返回“WT Mobile Test!”,如下图所示:3 @( e1 v  o; p" V8 O, O  y
, S2 G" d# B' T" l, i% {' ~

! k! e$ ]) K, ?3 b; o
$ X2 y, X  u% l5 d( `: g$ e" N / W) k' _4 V; ~- e/ W, Z
图144 T& ]6 r) ^3 y$ h; t9 a3 l  @
% {8 {' H) |( ]+ N  H! f
( A5 A/ w+ h9 @- F8 `
图15: T1 T" l* `4 `3 h) I

9 j0 s/ R: q* L  ~$ N; Z6 C* P- K; o( I! |4 |+ R3 H, J4 G) x' E" y4 H4 m
文件下载请点击: 串口教程.pdf (1.43 MB, 下载次数: 0)
; i0 q4 }' }6 d) n% v1 I
  • TA的每日心情
    开心
    2023-6-12 15:40
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-6-27 18:27 | 只看该作者
    串口是3根线,' ?; |# l2 l: v2 k
    一根发送,一根接收,还有一个是地线
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-23 20:24 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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