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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Heaven_1 于 2022-6-30 13:08 编辑
; \5 h% V# u$ Z$ W' u% G2 l
2 k& G. A; ^4 {2 c4 @
串口实验教程
——疯壳·开发板系列
! M4 p0 S% F* N! H$ [9 r
4 Z; }% [* G. L* P, g

, h& l' O& q$ @图1
8 d& s7 H( \% h: P2 \3 ~! Q! D( B  `" m1 P2 S

# H2 z; d9 Z2 }0 q
. o( e# N/ _( ^  r6 T5 S. e+ M第一节串口硬件电路, b3 L3 O' U6 h. Z( s( u: q, Q
! h6 _- M+ t% Y0 N8 l
串口通过USB口及手环下载调试线引出,连接mcu的P12与P13引脚,如下图所示:
+ u& X" K8 @& X/ g' V! \: U) M) I. e- {5 w4 O( d
) B, }% V- T0 {* T+ \( N
图2
5 c  k0 G+ m$ l
7 b: D; b& G5 D1 Y/ Y* w: \5 p2 I6 w, E- c/ X% a
& V8 x" b$ x, S& r, n
第二节 UART寄存器
+ j( c1 r6 N' w3 g1 J5 |
; f' }* A3 X: O2.1 UART介绍9 B- E  r2 h0 P) \: h# T) y) {
    这个UART符合工业标准16550,并且可以和外围设备串行通信。主设备(CPU)通过APB总线将数据写进UART并且被转换成串行格式并且发送到目标设备。串行数据也可以通过UART被接收存储之后,主设备读取接收的数据。
0 M7 r( d' d! V; ?* i' r5 jUART模块不支持DMA,但是它有内部FIFOs,并且支持硬件流控制信号(RTS,CTS,DTR,DSR)。
* D8 J- N+ w* M8 WUART模块有16字节的发送和接收FIFO;支持硬件流控制(CTS/RTS);影子寄存器来减少软件开销并且有可编程的软件复位;发送寄存器为空的中断模式;IrDA 1.0 SIR模式支持低功耗模式;可编程的字节属性、校验位和停止位(1,1.5,2);可以断开通信及检测通信线是否断开;中断优先级的识别;可编程的串行通信波特率。
1 P4 i; X/ U/ n: _" d2.2 UART寄存器* t) b- v6 C8 k- ?3 s
UART相关的寄存器比较多,所以我们只介绍常用的寄存器,其它的可以参考官方数据手册DA14580_DS_v3.1.pdf,位于目录:..\WT开发板\硬件资料。' f" G  \' r8 z5 ]
2.2.1 接收缓冲寄存器7 N0 m  Y1 ?8 s7 Q4 a8 t3 [& U
7 Y0 c7 l4 b2 e- z% {! K- h
6 O4 F* z0 H8 \2 d5 b* s/ L" b: P, F
) @$ d3 b* d2 }" Z  g  W
图3
; V' X3 s5 F# X% ^  s- _15:8位:保留不使用;
; ]) `9 Q0 ]; P4 d% w5 }7:0位:接收缓存寄存器。( p0 K8 n+ A" Y( B4 S- {' H. R
2.2.2 中断使能寄存器
8 D5 P' E3 [$ ?- o5 a; P) Z  Z9 Y2 K$ s5 v

' S0 S! |: P& j$ f% {9 g% `; @3 \3 ]) k* J; P$ V
图4' G2 x% [. @& U" P
15:8位:保留不使用;4 u( a, {- C8 Y6 N& b
7位:发送空中断使能位;
( T% w" i: C: Y6:4位:保留不使用;% B& w5 t, J4 [& `
3位:调制状态中断使能位;( g! m2 j. i% k. G2 G5 G6 v
2位:接收状态中断使能位;  `. r( b- a! v- U
1位:发送结束中断使能位;
; m  J% R1 z8 |4 S0位:数据接收完使能位。
6 o3 ~0 b3 w. M* j# C$ L2.2.3 中断识别寄存器/FIFO控制寄存器- k* @* y2 z. g& e4 o
  B/ u4 n$ V) s3 a/ V

% {4 S9 y3 [7 l# J& c) c图5( W; ^2 z4 v  C6 O
15:0位:写则为FIFO控制寄存器,读则为中断识别寄存器。& W$ Y2 k9 p- k1 n6 s* }4 G
2.2.4 通信线控制寄存器
9 D+ R: E! I2 M) A
' m" S* [; Z- g- B' x3 B  [1 E+ K/ ?. T) y( M& ]
图6- `# U% {7 f! L* n  j# H$ K
15:8位:保留不使用;1 {1 F. e6 [( d. m/ L/ n  K; b' f$ e
7位:波特率使能位;: b1 l; n' i  \: K
6位:停止控制位;% q; Q# w; ^1 D: y3 U
5位:保留不使用;
: f' }4 d, ~1 t4位:奇偶校验选择位;6 A# K  O3 E  E2 V# D- y
3位:校验位;. j6 p/ }( p8 o9 O
2位:停止位;( D! V6 b' h. S7 ~' [1 N0 l* ?
1:0位:数据长度。7 z9 e' V6 e6 s% S# t# |# w% H
2.2.5 调制器控制寄存器" Q- D2 K/ D  h" \) m  @7 }9 V

. e  F  e3 |2 P. g) ?; F6 `9 |% U
" `( N0 E7 P# m: A* {% M9 L  x( v
3 j' f) ?; i# Y2 E) l
图75 u) s( N! i& c2 m
15:7位:保留不使用;
9 D$ ~3 J+ Z  E. g4 [0 j+ N+ i+ b- s6位:红外通信使能位;
6 M$ X+ \$ B" p" h6 F) S1 {5位:自动流控制使能位;
3 L" c# o" S$ @+ l! g+ O4位:回路位,用于测试;6 h8 @# S0 \$ a8 h# t0 |- T0 G
3位:用户指定输出2;
$ g; t8 f! z9 Z; {" O7 N3 r6 \3 U( n2位:用户指定输出1;
/ L9 D2 ^! R: g2 m. g1位:发送请求;
) H  A+ _- J" z% V0位:保留不使用。
2 L# j, y  A7 s( _! t  e2.2.6 通信线状态寄存器
) x# {3 b0 H! h; G. j; i( `0 ~8 C3 ~1 Z

* S. L& C/ [. L5 Y5 g6 z# c$ a+ w+ E1 ^6 c1 w, a
# D# S3 C0 L; n7 z) w$ o
图8& L/ _6 N* C7 {3 t# d% x; y
15:8位:保留不使用;0 @/ d* N& k, X6 N) @, @9 O: }% A
7位:接收FIFO错误位;5 z+ Y+ |* k3 P) R4 h- d- H0 L5 B
6位:发送器空位;
7 c- |) c! N" B7 s5位:发送保持寄存器空位;6 k2 p+ u) k# ?, V+ t; r9 C9 u
4位:异常停止中断位;; M% z0 T5 K1 d- x) S, X( x3 x
3位:帧错误位;
* ~, c1 h# J9 y2 W* {( e) V2位:校验错误位;! p$ O3 R$ A# |
1位:溢出错误位;
4 T/ g: U4 S+ X" p5 U- M; l) i* L0位:数据准备好位。
! I9 i" H3 J. h, h( |' N2.3 寄存器配置讲解: j. k) Y: ?4 R
#define CLK_PER_REG                 (* ( volatile uint16*)0x50000004)
' f; s7 b* y" T: _& _#define UART_RBR_THR_DLL_REG        (* ( volatile uint16*)0x50001000)9 O9 Q9 F) U4 W7 ^+ u8 Z( @
#define UART_IER_DLH_REG            (* ( volatile uint16*)0x50001004)
5 E6 w; v& T3 M! {( @#define UART_IIR_FCR_REG             (* ( volatile uint16*)0x50001008)6 u& z; h# `( ?: \2 A$ h$ ^
#define UART_LCR_REG                (* ( volatile uint16*)0x5000100C)# \* F$ v) r+ C3 d
#define UART_MCR_REG               (* ( volatile uint16*)0x50001010)
4 O. Z' U3 X6 N4 x#define UART_LSR_REG                (* ( volatile uint16*)0x50001014)4 _# g' a/ }& H
#define UART_MSR_REG               (* ( volatile uint16*)0x50001018)8 ~) X0 |* y% u  p
#define UART_SCR_REG                (* ( volatile uint16*)0x5000101C)" D4 {* y: Q5 j
启动UART1模块的时钟CLK_PER_REG |= 0x0080;- l* [' v, u+ G) R3 G$ @6 m
串口初始化寄存器配置:5 M. i: Y1 \9 Z/ `# @' s0 V
首先使能波特率配置UART_LCR_REG = 0X08;$ ^2 h7 F$ E, o, Y
配置波特率UART_IER_DLH_REG = 0; UART_RBR_THR_DLL_REG = 9;
5 K2 S0 _- f  z5 G6 Q8位数据,无校验,1位停止位UART_LCR_REG = 0X03;( J& e! O& W3 q+ D, a. _  N1 ]
关闭红外通信功能UART_MCR_REG = 0X00;2 o/ H1 V7 b5 z
使能FIFO, UART_IIR_FCR_REG = 0X01;1 K. `: r  L6 z0 j
关闭中断UART_IER_DLH_REG = 0X00;
5 A7 U0 ?; ?5 ~8 o$ O接收一个字节,等待接收完成while((UART_LSR_REG&0x01)==0);读取接收数据rx_data = UART_RBR_THR_DLL_REG;
( P. s3 t( h2 N% x发送一个字节0x55,等待发送为空while((UART_LSR_REG&0x20)==0);填充发送数据UART_RBR_THR_DLL_REG = 0xaa;9 j( Q) p( c! k9 U) w9 s

; t/ l6 e; U" V* N8 Z; x% K; N8 ?1 x0 Y9 y' j
( b! x. f0 `- q0 ]4 s2 u9 l
第三节 UART实验
7 p3 s- L: t1 F' c! e( E实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。+ H$ h: A) s8 u* I6 r
使用USB转串模块连接手机蓝牙串口,连接方式如下:
+ N1 U7 R/ ]5 x" S# d: W6 q- C    (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:2 R7 a( S3 K. ^

: M" r( a/ b7 m- o9 B6 s: o: K+ U# x' W  i
图9
9 z9 k; w% r: f4 W0 T2 ~ (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:) U/ ?' d% I6 k  f6 {7 g7 \$ e
! K, y5 p% `' N) u9 L( z

* a# `0 ^6 C" y3 R, d! ]图10
. [- O3 A! m) l4 X( Z' U使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:
  O' v+ N0 H7 S8 c( ~(1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:
+ u! O0 D. M( g
; j2 h6 B9 y5 Z+ i4 S% [
2 s5 Y) X+ k4 l- Q7 y+ \8 w图11. q0 ?$ ]) b8 u+ u0 G! {
(2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:# M- A& u& I2 Q4 F9 Y7 I3 Z

9 U# A! H$ F! R0 ^( {5 I# S; ]# z( y/ Q3 u% B
图12( G9 ?$ e7 k" w" z* q
将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
- d: m- H% f8 _7 R9 n打开串口实验的Keil工程uart.uvproj,位于目录:..\WT_Mobile\1.初级教程\DA14580\2_初级_串口\projects\target_apps\peripheral_examples\uart\Keil_5,如下图所示:! r- Y3 A% [2 n
- \5 O' {# ]7 a& W
. Z+ g6 o! ~# L! L. h$ l" |
图13/ g8 m8 z0 k# R1 c
打开串口调试助手连接串口,波特率为115200。在KEIL中,编译代码,点击DEBUG,然后点击全速运行,就可以看到串口调试助手打印出的信息,发送什么就返回什么,例如发送“WT Mobile Test!”就会返回“WT Mobile Test!”,如下图所示:
& r8 }2 g; x9 S6 N  k
7 [& o- X3 U# e  L+ l$ l
4 w, ?/ K1 `; g% R' d2 i7 b9 x% _$ d+ ^1 R% h: L- F
  G" u7 T) f: U
图144 s4 E: P( F% a/ q
$ _  Z6 ?9 p, w8 k. C2 K- B

5 i) g% X( l% V+ f% h' k  x图15' B6 G: G9 B3 ]) ?+ i

' w& n0 y- z. |( o0 h$ z1 Z+ i8 j+ u& ~$ v2 @* k
文件下载请点击: 串口教程.pdf (1.43 MB, 下载次数: 0)
. j8 u/ {9 K& a$ w5 f
  • TA的每日心情
    开心
    2023-6-12 15:40
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-6-27 18:27 | 只看该作者
    串口是3根线,
    - Z% f  d& v3 |' v! `& Z一根发送,一根接收,还有一个是地线
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-11 22:56 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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