第一节 硬件解读 大家的开发板到手之后,可以看见,只有一个USB口,那个口就是串口,开发板A和开发板B共用一个串口,通过按键切换。
. H6 U- v1 Q0 b/ k) _' z我们以开发板A为例,原理图如下:
0 x. }7 v+ B! O+ L. X( U5 D' T. ?, \" J
txk3ysw1o0564065446449.png
- m* ~$ l+ ]) S3 p( T: s
开发板A芯片上面的PA2和PA3分别是NODEA_USART_TX和NODEA_USART_RX,而开发板A和Debugger开发板的连接如下:8 Y U5 t9 q( l# K$ L m5 k4 Z, w+ k
o3v3vner4es64065446549.png
; E; L; O; D) L" \- N' d; W& J
* z/ r, ?9 ^% N g
shnidnuxmhi64065446650.png
' `* \- k* [& a, ]
通过查看CH443K芯片的引脚可以得到,SEL引脚的高低电平,可以让CH443K芯片在1脚4脚连接或者3脚4脚连接中选择。CH443K芯片引脚说明如下:2 ?6 P, k4 {6 E& m! ]
mgjsamcwo3s64065446750.png
' ?8 ~$ G% Z- [$ D, J8 T( Y
当CH443K芯片的SEL为高电平时,其芯片COM和CH1引脚导通。DEBUGGER_TX和B_TX导通,DEBUGGER_RX和B_RX导通;反之DEBUGGER_TX和A_TX导通,DEBUGGER_RX和A_RX导通。
/ \. c& L0 U8 y. R! |那么,DEBUGGER_TX和DEBUGGER_RX连接在哪?当然是DAPLINK板的MCU上面啦,如下图:
1 \0 t. W/ V! g' r: E1 j
ujg1nwxqjcy64065446850.png
! k' [- X: E W4 j
连接到Debugger板的MCU之后,这个MCU通过内部程序(不需要我们写,比赛的时候已经写好了)转到唯一的USB口上,也就是我们的串口上。* F$ l' s V# d; Q: h9 Q) a7 [
ligbqikat1c64065446950.png
( B5 z, H4 k9 y3 W1 g$ m第二节 CuebMX的配置
1 q6 q% s8 K& Y+ R; _9 x 第一步:选择PA2的引脚的USART2_Tx功能,如下图:
+ q$ s& H9 o' J4 i5 R2 x
0gphiy4duom64065447050.png
$ H! `* A! y. X
第二步:选择PA3引脚的USART_RX功能,如下图:
* C& Q* s/ r# n/ n0 L
d0wirninwkx64065447150.png
' r) c% U" ~- g2 D6 E
第三步:发现USART相关的引脚是黄色的,不是绿色的,这是为什么呢?注意:黄色是异常提醒,绿色是正常的。 + X+ [+ f4 K, z; w( Y( z* y2 G
0djiczom24z64065447250.png
9 m, N Z$ s, X, U2 t( f8 Q
第四步:如下图配置USART2。注意:2代表的是异步全双工通信;6代表波特率,数据长度,校验位和停止位。这里波特率是115200,比赛基本上都是9600。
, N; ?% \5 Z/ S/ [3 K
xbgjxmdy0bf64065447350.png
/ o* c, n4 d' B$ o4 \$ A4 W( M
其中:具体Mode配置信息如下:
! D' y8 o2 `' a* G
( ^; k p8 b% b8 V- u# d. S) cMode:代表串口模式,配置为(异步)Asynchronous,(同步主机)Synchronous Master,(同步从机)Synchronous Slave,(单线半双工)Single Wire (Half - Duplex),(多处理器通信)Multiprocessor Communication,(红外通讯)IrDA ,(局域互联网模式)LIN ,( 智能卡模式)SmartCard ; V. J& E+ \5 Q$ j7 ~2 |- N
( S1 @% V# D; i$ CHard Flow Control RS232:代表RS232的硬件控制流,常用引脚为CTS,RTC,CTS/RTS或者Disabled;3 B% o7 l$ q$ i" C0 S6 c
3 ]& Q/ b1 m) T! N
Hard Flow Control RS485:代表RS485的硬件控制流;. S5 ~4 K1 n4 N q( n4 O
+ Y2 B% }, R3 w1 W0 B
其中:具体Configuration配置信息如下:
. _( O. r1 @0 |4 j2 ^ + L! N3 f% k7 K2 g
Baud Rate:代表串口波特率,常用波特率为9600,115200等;6 A1 ^- B1 ?. L' q: N X5 s# v* t
" M* }( V1 Y! C( i* _
Word Length:代表字节位,常用字节为:7位,8位或者9位;, O( y+ H- @0 j1 c6 q+ v4 Q5 L
; l2 I0 z; m. `/ h$ T0 p# jParity:代表校验位;常用为:(无校验)None,(奇校验)Even或者Odd(偶校验)Odd;
3 V0 K5 m6 L9 L7 v6 B' h) h% V $ Q0 w" K' k j, C1 b& z `5 ]
Stop Bits:代表停止位,常用为:0.5,1,1.5或者2;* W' m/ o6 g% F$ T( D
% A0 X$ S! p8 D8 c% n9 P/ O
Data Direction:代表数据传输方向,常用为(发送和接收)Receive and Transmit,(接收)Receive或者(发送)Transmit;8 c5 f4 Y; a+ G% |5 ]
" c- f" s! ~6 t: f K# n
Over Sampling:代表过采样,常用为8倍采样和16倍采样,8倍采样,也就是一个数据位采样8次,16倍则是16次。采样率高精度会高一些,当然相应的功耗也会变高;
, C0 V/ v" B$ z, `1 t5 U$ Z! ? & Q* l. E2 C# [6 A* ^; L
Single Sample:代表单次采样,使能时使用单次采样值,否则使用三次采样值。前面的过采样会有8或16次采样值,当选择单次采样时,会使用其中的一次采样值作为数据位逻辑电平的结果。三次采样则用三次采样的判断结果为准。同样三次采样也是为了确保数据的准确性。
" E. e; @& x8 G3 R: R
0 [: W9 H7 l# G; q2 X5 W8 mClockPrescaler:代表时钟预分频器;
0 ?+ q2 V b2 e( R9 p( v 6 E- [$ W4 u. e$ x% C F: S
Fifo Mode:代表数据缓存模式;+ M. i3 k. Y) V1 a% K
0 D. R8 F# `( h" D" f% Y8 B7 W1 ]" |Txfifo Threshold:代表发送数据的阈值;
" k; A& [' N3 M3 C; b7 T5 [
% y3 E$ R/ j' z' g6 WRxfifo Threshold:代表接收数据的阈值;7 f" _* k/ R1 |
& m# K% z9 W* y# b0 ~# p- zAuto Baudrate:代表自动波特率,顾名思义,可以根据接收到的数据进行波特率自适应;
* G r) P5 v; T; U- t% m9 t7 { , K9 T5 k: k9 _) c
TX Pin Active Level Inversion:代表发送电平反转,发送引脚电平极性反转,正常情况下空闲电平为高电平,使能该功能后变成空闲电平为低电平;
$ s, \. B' r' y" R$ [6 ~$ b ; I% b5 C2 c5 K9 Z/ b
RX Pin Active Level Inversion:代表接收电平反转,接收引脚电平极性反转,正常情况下空闲电平为高电平,使能该功能后变成空闲电平为低电平;
6 b: L2 R. b; g% J5 y1 x# n ' K5 J+ `+ |3 V f% p( R
Data Inversion:代表数据电平反转收发数据的逻辑电平极性反转,正常是高电平为逻辑1,低电平为逻辑0,使能该功能后则变成低电平为逻辑1,高电平为逻辑0。校验位也随着反转;( R- g/ c9 X. p% R
' F7 e4 f' h: A' \
TX and RX Pins Swapping:代表收发引脚互换,接收和发送引脚互换,适用于外部硬件连线错误时进行切换。: U+ p0 ?9 n: G
/ t0 L: Q% u6 x- POverrun:代表溢出检测,:用于开启接收溢出检测,使用该功能后,当接收数据未取出时,又接收到一个数据,此时会触发一个溢出标志。
; t3 {0 l; s% U: z4 [ 4 B1 p5 M( l! S: d0 u: Z. a
DMA on RX Error:代表接收错误时不禁用DMA,使能该功能后,即使出现接收错误也不会关闭DMA传输;
e# s2 t: a8 ^* H* I 8 E* |" J) q, R2 T, b# w; S
MSB First:代表数据高位先发,正常数据是先发低位再发高位,使能该功能后可以先发高位数据;
1 O. C8 P" s* ]2 M! N' x8 f3 ^第三节 MDK代码1 Q( Y B ~! u8 A' ?3 J
第一步:编写串口发送函数,如下图:
* R% y( S( y' L$ L5 }) H# O3 s
lthuce3mksf64065447451.png
7 A% m5 h& ^% _, P第二步:声明串口发送函数,如下图: % a5 ^( u W. z. U# ?
lu0zh30455o64065447551.png
5 |7 j1 w! d( L" S& O
第三步:编写主函数,如下图:
9 b P+ }2 ]2 G. `& F+ Q( f6 E; e
44unr3tec2k64065447651.png
' d1 v. Q/ P) F
第四步,配置MicroLIB库,如下:【注意:不使用printf,可以不配置;如果使用printf但是不配置,程序将卡死】 5 s8 ^+ {0 K+ `% A( x, k$ F. Z
5qi1khowql064065447751.png
1 o. z+ D: w# }6 A) u
第五步:配置好下载器之后,编译代码,下载即可。
8 C4 @' \6 y2 M- Z1 k第六步:打开串口软件,如下图配置:选择串口号;接收缓存区选择HEX模式,波特率选择115200;串口号请扫描,选择正确的串口号,不一定是COM4;最后打开串口。
% J' D8 @# O& g' V- x/ R1 R7 l
biycoznr1dd64065447851.png
3 D7 h* M7 B! ^% V# o# p
# U, t1 p0 `7 O! ?$ ^9 ]( i. S, u
第四节 实验现象 9 Z- _" k# p0 t6 R! ]9 h% k& [' q
注意:0 K4 q) m) N# B1 i/ R& F
1,请用USB线连接电脑与开发板;
/ `$ Q9 }* W# ~) b+ {7 D2 u; O2,请选择A开发板;0 e. _ z' ^$ A* r
3,一定要勾选微库。# u& G) d N& u/ ]- |
现象:' g5 l& o0 X0 B" L
1,串口发送以115200波特率发送数据。% a0 ~0 j% q* \: n* g
来源:撞上电子微信公众号; _8 c, [7 {8 W7 P0 J; n
版权:东莞市东城墨竹公子电子工作室& i; P% c3 J) V: E
日期:2024.11.13
l6 C7 s2 T2 q' Z0 D! @第五节 课后作业) Q, B% ]7 |+ w5 V9 m5 ^
利用按键,串口打印按键按下的次数。 |