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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Heaven_1 于 2022-6-30 13:08 编辑 " [& u7 V# A5 C$ A7 r

4 A+ P& e* G) t6 u( t
串口实验教程
——疯壳·开发板系列

4 I3 ]! U6 y) j; V1 G& |9 i8 I6 S7 F; C8 w8 l* A, S0 k

3 i$ B7 ^$ ^( L, F) ^' ~图1
( [  n/ ~+ d2 a3 y# \4 }0 b! d+ ?
2 o! U$ B+ j  M& W- [0 J1 q
6 m" k+ I  b) I+ |# T2 W. ?. R7 e& z# z
( n" _2 g0 b  p6 P* }% m第一节串口硬件电路
. z  e  z) C8 u* }- T; v+ r  i$ R$ U! W  I  w8 y' E. X8 w
串口通过USB口及手环下载调试线引出,连接mcu的P12与P13引脚,如下图所示:, }' C- v6 T! ?9 `# \

1 C5 R$ j  s5 y6 ?. m$ f5 }8 H# D+ ~3 l. [$ S: `% ^/ a. B
图2% f; H8 c2 F# H. p" P+ q/ T/ e
5 R- E, b0 R7 E3 C2 z& z( M. p
4 q8 F0 C9 @3 l* ], N  ?7 n
. R8 C7 U2 a! y
第二节 UART寄存器; f. S' }- p) o) J. _3 R

2 R& g: H6 P6 U& I& K5 i9 q9 ]2.1 UART介绍/ R+ V: f1 e7 H
    这个UART符合工业标准16550,并且可以和外围设备串行通信。主设备(CPU)通过APB总线将数据写进UART并且被转换成串行格式并且发送到目标设备。串行数据也可以通过UART被接收存储之后,主设备读取接收的数据。$ @( U4 C* i/ `: h; U
UART模块不支持DMA,但是它有内部FIFOs,并且支持硬件流控制信号(RTS,CTS,DTR,DSR)。& T1 l8 P* Y" e0 e& k. \
UART模块有16字节的发送和接收FIFO;支持硬件流控制(CTS/RTS);影子寄存器来减少软件开销并且有可编程的软件复位;发送寄存器为空的中断模式;IrDA 1.0 SIR模式支持低功耗模式;可编程的字节属性、校验位和停止位(1,1.5,2);可以断开通信及检测通信线是否断开;中断优先级的识别;可编程的串行通信波特率。
$ A0 S$ _0 K" `. G2.2 UART寄存器* K5 |" r3 q# `
UART相关的寄存器比较多,所以我们只介绍常用的寄存器,其它的可以参考官方数据手册DA14580_DS_v3.1.pdf,位于目录:..\WT开发板\硬件资料。
! a- }( G; q. t+ I6 K2.2.1 接收缓冲寄存器' M& @& [8 e+ t: a& D) C% r
, W3 m* p; m+ C: [

' G3 ~6 f9 t* A. b+ e. H, x; L7 W1 b8 F; ?3 }
图3
1 {9 u; f& g: y+ i15:8位:保留不使用;
. A3 x7 E" d* M6 X7:0位:接收缓存寄存器。
/ C+ T1 j$ [+ [- @2.2.2 中断使能寄存器: E* ]2 S2 {1 o' X: k% |
! w/ H7 [4 h) T4 q5 D3 ?

* j9 e! O4 y4 a( \2 g3 D$ d
8 C# @4 J# \" w# o( `  q# w- |, d9 X图42 Z# P# [7 F% q4 u8 [; ]# B: c0 h
15:8位:保留不使用;
7 W) v0 b" I, `, ?. o7位:发送空中断使能位;
+ q8 H( s$ V& o) C, a/ h! n6 E' c6:4位:保留不使用;
) ]7 }) n. I: O; ^: G# ?8 u. c3位:调制状态中断使能位;: r8 d2 P8 y# i' ]0 ^- l2 ~5 l
2位:接收状态中断使能位;
  e+ B/ x+ z$ n1 e' ], n1位:发送结束中断使能位;6 \' N8 m, M2 _% p+ H
0位:数据接收完使能位。& ~+ N1 t  T; C7 \3 J7 o
2.2.3 中断识别寄存器/FIFO控制寄存器2 l' `- y, R# ^% R
! q% g1 z8 H/ a; `' ?2 g
0 x9 n2 s! c+ Y& A8 S
图5
# t1 q8 `, C  s; x+ g% g: z15:0位:写则为FIFO控制寄存器,读则为中断识别寄存器。+ h+ P9 R( F& j# Q" H) h# M
2.2.4 通信线控制寄存器1 F+ t( d% K3 B$ O% C

. M! k) X$ G1 C% I* i5 V
. z; v9 e5 q2 p- w图6* U& I1 b) X# _1 r( F5 b5 o4 U9 L
15:8位:保留不使用;3 h* T  j) \1 S
7位:波特率使能位;
) ~" G$ a( d0 q4 b4 M) g6位:停止控制位;
9 M5 t4 J! n( E8 S7 o. ~5位:保留不使用;3 k; K% b7 X7 t  D7 n' B
4位:奇偶校验选择位;6 S: n* P4 T* ?9 u* ]
3位:校验位;+ |* R3 A/ @$ m1 n- `
2位:停止位;) X3 P; F; w: l: u
1:0位:数据长度。
* a. S2 `3 R" ~9 i4 D: K! m2.2.5 调制器控制寄存器
! W6 i. U0 G3 R
& m& L2 U2 {; B; g) r1 k7 s
4 A7 w2 r; q4 V# \0 j( V7 b; |/ G, @8 j8 B% w

: Y- Z1 t4 l4 a9 V5 Y$ R, R图7
) ~$ E1 |) m1 A& |% q$ n  h( `. x15:7位:保留不使用;7 B' l1 y7 r6 v. _
6位:红外通信使能位;/ i0 e9 `* }, e6 C" h
5位:自动流控制使能位;! w% G0 A, f* e2 ~7 P" P8 V
4位:回路位,用于测试;
" n% }3 o" N! o( ]3位:用户指定输出2;
3 G4 s" P6 _. v( T$ ^# [8 N2位:用户指定输出1;8 P) _! Y/ Z. e% O0 f6 a+ _
1位:发送请求;
) s, ~1 z+ R; j/ d. F1 C0位:保留不使用。
( l: Q! a* G( p2.2.6 通信线状态寄存器! j2 e5 ^" P2 V, l
8 d# y! }5 v  Z- g$ n8 m
: Q: Y" m9 A4 o9 b% d' y
9 Y) M: ^) }1 F% ]

' x5 T8 M9 }  L; K4 M图8$ z3 W: r9 o% J. j% t$ G9 x
15:8位:保留不使用;1 t, ^& }/ |9 I+ t( w# V
7位:接收FIFO错误位;
5 D: j( B; s$ T4 i8 g/ V8 W+ P: |6位:发送器空位;9 f- e: p- @3 q+ U( Y
5位:发送保持寄存器空位;
  i" K% i7 q" ]2 |4位:异常停止中断位;
  _2 z& s6 E9 ?0 }3位:帧错误位;  I) R: J. l# i) I5 Q3 r
2位:校验错误位;
3 c2 P; N! A) y9 Q, r7 t. L1位:溢出错误位;
" n+ r) B/ Z" r1 G; S0位:数据准备好位。
5 q. a5 A6 w+ M8 J2.3 寄存器配置讲解% ^, v- c4 r9 y, Q  u% w
#define CLK_PER_REG                 (* ( volatile uint16*)0x50000004)1 N9 C2 \: T2 ~% Y% l
#define UART_RBR_THR_DLL_REG        (* ( volatile uint16*)0x50001000)6 @# F: q1 e5 p& {2 I
#define UART_IER_DLH_REG            (* ( volatile uint16*)0x50001004)
3 j/ s! U* w1 q4 J% [9 V3 t; Y/ E#define UART_IIR_FCR_REG             (* ( volatile uint16*)0x50001008)
- f% U( \" E6 g4 E; S#define UART_LCR_REG                (* ( volatile uint16*)0x5000100C). ?) G7 O' a5 }( l
#define UART_MCR_REG               (* ( volatile uint16*)0x50001010)
: a8 U/ H4 W. M% p) ^) G  Q! {#define UART_LSR_REG                (* ( volatile uint16*)0x50001014)
5 j! R, R1 c0 _: }1 `: v8 W#define UART_MSR_REG               (* ( volatile uint16*)0x50001018)" K: x' t9 a: p8 |+ ?. i# i
#define UART_SCR_REG                (* ( volatile uint16*)0x5000101C)" w9 \! B$ \, ]. k- T
启动UART1模块的时钟CLK_PER_REG |= 0x0080;7 A% Q8 s! g# A$ D# H% R9 A# U
串口初始化寄存器配置:
) @2 D& \( x+ j( g# R首先使能波特率配置UART_LCR_REG = 0X08;
3 E3 w* `" C' Y0 y: i3 d配置波特率UART_IER_DLH_REG = 0; UART_RBR_THR_DLL_REG = 9;% o3 {5 C0 [. u4 J& ~3 u: t
8位数据,无校验,1位停止位UART_LCR_REG = 0X03;
( w0 i' @: e, S' A: L关闭红外通信功能UART_MCR_REG = 0X00;
$ N) |/ f' k. w) y使能FIFO, UART_IIR_FCR_REG = 0X01;
% L/ l1 H, S" G' j关闭中断UART_IER_DLH_REG = 0X00;
! x- j8 l9 p) c接收一个字节,等待接收完成while((UART_LSR_REG&0x01)==0);读取接收数据rx_data = UART_RBR_THR_DLL_REG;7 q1 U3 m% D% G: ~9 n1 X* a* p5 `
发送一个字节0x55,等待发送为空while((UART_LSR_REG&0x20)==0);填充发送数据UART_RBR_THR_DLL_REG = 0xaa;
! g: ^7 k4 f. a
" d( a3 A8 g7 X6 S' B: W* W% q# o$ S. ~
7 [& E! {( X1 {+ z2 G* Q* C5 V
第三节 UART实验& r9 w7 [: t  ]6 R" C! u
实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。6 w9 W. T: `0 `/ B
使用USB转串模块连接手机蓝牙串口,连接方式如下:
8 e8 N7 B$ t- U+ f& t6 s    (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:) r3 G% x& {$ y2 p- R3 ~

5 ?1 G# O' x, l4 L  C$ S- |* L1 u: e8 [" Z
图9
3 K1 W( K2 |' z; ~ (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:6 V8 |% o, ~; @+ W5 y- @# N. S: M
; q, g% u) p* v

) m2 x! H2 m; T6 {1 i图10
" P4 `3 U& i3 Y; A4 O使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:9 W) K! X( j" N! c' |
(1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:2 [& Y5 n6 O5 X& V
, L  P& T0 |. l; N% [) o9 b+ j

7 u- s  q7 V8 ~6 |- l# s* z$ Y, E图11
; ]+ a5 h6 b) E4 O4 o% C(2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
7 P1 Y2 |+ H" b+ T  ]5 h' S2 m9 v) B& W& _
7 Y' A9 o" D8 t; E, C
图12( F9 p+ \4 {' J/ b/ l; z
将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。  e+ f- s/ m- C
打开串口实验的Keil工程uart.uvproj,位于目录:..\WT_Mobile\1.初级教程\DA14580\2_初级_串口\projects\target_apps\peripheral_examples\uart\Keil_5,如下图所示:
$ s0 K% s- T! c/ c7 r7 x; Y' i' ]% j: V  p
  e+ J* e8 v$ `/ Z' U+ _* V
图13! D5 w/ X" ~  \, Z  ]0 ^$ P
打开串口调试助手连接串口,波特率为115200。在KEIL中,编译代码,点击DEBUG,然后点击全速运行,就可以看到串口调试助手打印出的信息,发送什么就返回什么,例如发送“WT Mobile Test!”就会返回“WT Mobile Test!”,如下图所示:
9 T1 O0 d3 R. X9 m, j) {  `. M2 Y" _' Q
# E8 o* c) o. A* H  ~, d# B1 A

" O" T" a2 [/ Q, Y0 g) q8 u
* L- ~3 P" D7 `8 f7 Y图14
0 Z6 j5 Y  h$ L  a1 P
( z* P/ R2 B  G" S5 O$ m& }2 v  R7 ?: P7 S9 ~2 \
图15
, n3 u7 r2 D5 n1 U+ ~! M2 V+ n
- u& Q" H, M& D- L: o& {" G) H
文件下载请点击: 串口教程.pdf (1.43 MB, 下载次数: 0)
3 x" s- ~4 {$ P* l( G' ^2 d# t
  • TA的每日心情
    开心
    2023-6-12 15:40
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-6-27 18:27 | 只看该作者
    串口是3根线,
    1 r' i, a9 P3 Y# M4 J6 }一根发送,一根接收,还有一个是地线
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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