第一节 硬件解读 大家的开发板到手之后,可以看见,只有一个USB口,那个口就是串口,开发板A和开发板B共用一个串口,通过按键切换。
1 O( ]- E2 a6 _* Q' ?7 B/ g, S我们以开发板A为例,原理图如下:
( d4 v) G* J3 V2 z
txk3ysw1o0564065446449.png
8 T7 B0 o1 b0 k. [& d6 r
开发板A芯片上面的PA2和PA3分别是NODEA_USART_TX和NODEA_USART_RX,而开发板A和Debugger开发板的连接如下:1 ^3 L, {( o- ]) z
o3v3vner4es64065446549.png
- V$ `# o, m- w1 R7 f+ Q % w% j$ v9 E& Q; _
shnidnuxmhi64065446650.png
& ?! B: Q9 {. t) D) F 通过查看CH443K芯片的引脚可以得到,SEL引脚的高低电平,可以让CH443K芯片在1脚4脚连接或者3脚4脚连接中选择。CH443K芯片引脚说明如下:. v; R5 h/ @! _1 v
mgjsamcwo3s64065446750.png
" F0 @0 m$ q0 b* P" Z当CH443K芯片的SEL为高电平时,其芯片COM和CH1引脚导通。DEBUGGER_TX和B_TX导通,DEBUGGER_RX和B_RX导通;反之DEBUGGER_TX和A_TX导通,DEBUGGER_RX和A_RX导通。, U! X( i) v; L/ P: q7 g5 p
那么,DEBUGGER_TX和DEBUGGER_RX连接在哪?当然是DAPLINK板的MCU上面啦,如下图:
- \4 b4 d$ S+ j
ujg1nwxqjcy64065446850.png
: O; {* s) _' H3 Y) _7 u9 E2 o连接到Debugger板的MCU之后,这个MCU通过内部程序(不需要我们写,比赛的时候已经写好了)转到唯一的USB口上,也就是我们的串口上。
& c0 `9 u9 i5 V9 c* ?$ k
ligbqikat1c64065446950.png
1 L r0 A; ?) u第二节 CuebMX的配置
: u; I7 }+ p1 m 第一步:选择PA2的引脚的USART2_Tx功能,如下图: $ D' c+ a1 J# f2 h9 @- N$ y
0gphiy4duom64065447050.png
" I$ c2 ]# b# y( z* r& C: O# @) `第二步:选择PA3引脚的USART_RX功能,如下图:
- W% j. E) `2 h9 Y3 z" p) @
d0wirninwkx64065447150.png
3 E: A2 R/ `7 q/ N+ J第三步:发现USART相关的引脚是黄色的,不是绿色的,这是为什么呢?注意:黄色是异常提醒,绿色是正常的。 # W% z9 U+ o% D4 p3 H) e0 }6 {" x7 u* N( g
0djiczom24z64065447250.png
! a( I! h) r# \" k q: M m
第四步:如下图配置USART2。注意:2代表的是异步全双工通信;6代表波特率,数据长度,校验位和停止位。这里波特率是115200,比赛基本上都是9600。
. r5 G; N) C: v
xbgjxmdy0bf64065447350.png
6 u, u ^& j/ E" Q# L! m3 a其中:具体Mode配置信息如下:
2 w" H: n" h; H2 g# {. {2 A0 ? 3 X$ b( c" a n0 P: B' k
Mode:代表串口模式,配置为(异步)Asynchronous,(同步主机)Synchronous Master,(同步从机)Synchronous Slave,(单线半双工)Single Wire (Half - Duplex),(多处理器通信)Multiprocessor Communication,(红外通讯)IrDA ,(局域互联网模式)LIN ,( 智能卡模式)SmartCard ;
( E6 f' {, E q8 r2 D0 u+ ] 0 e, M( h- u3 U% I# X
Hard Flow Control RS232:代表RS232的硬件控制流,常用引脚为CTS,RTC,CTS/RTS或者Disabled;
7 p0 Z e: p" u3 y; l/ [& @
7 ^' [: P7 {# Z6 ]) ]' VHard Flow Control RS485:代表RS485的硬件控制流;7 o% z N8 X# I* L, E; K3 H& D
3 B0 e7 f, j1 O5 v, W4 ^$ i其中:具体Configuration配置信息如下:0 I1 ?& W$ ^- n; S. q
3 M3 a" c9 h* Q. IBaud Rate:代表串口波特率,常用波特率为9600,115200等;
3 u% C/ @7 D5 I2 ~1 i( O
: b( t8 ~( }4 |: ^0 [9 ]Word Length:代表字节位,常用字节为:7位,8位或者9位;3 _0 q# c! f, b% `/ i. x3 y( i [
! v/ Q2 v2 s: Y3 _" x
Parity:代表校验位;常用为:(无校验)None,(奇校验)Even或者Odd(偶校验)Odd;* K% D* ]8 y7 H. z1 n& `
- \# m2 O# S8 Q1 YStop Bits:代表停止位,常用为:0.5,1,1.5或者2;0 _& O; R( m+ J' ?0 H% n) w
! `7 w4 f4 \! E3 MData Direction:代表数据传输方向,常用为(发送和接收)Receive and Transmit,(接收)Receive或者(发送)Transmit;! i- Z! Z; F0 P7 @
; l2 _2 ]0 z6 B4 `. b2 G" a$ ROver Sampling:代表过采样,常用为8倍采样和16倍采样,8倍采样,也就是一个数据位采样8次,16倍则是16次。采样率高精度会高一些,当然相应的功耗也会变高;3 {. M5 [ F6 H; [: U2 j
- n5 v9 U9 v+ R4 i. w; P$ k' I0 m
Single Sample:代表单次采样,使能时使用单次采样值,否则使用三次采样值。前面的过采样会有8或16次采样值,当选择单次采样时,会使用其中的一次采样值作为数据位逻辑电平的结果。三次采样则用三次采样的判断结果为准。同样三次采样也是为了确保数据的准确性。 & }" _" a8 {% N" S" ^2 ?
) i- b+ T) E# V
ClockPrescaler:代表时钟预分频器;7 e) U( F1 T! |5 G) i9 F
( W. j" t9 [! Q: B9 h
Fifo Mode:代表数据缓存模式;
* }2 m* \" H. l2 O% I9 F5 ^ 2 R3 z) M9 z' P+ G# }1 l
Txfifo Threshold:代表发送数据的阈值;6 ?9 y9 u. a' x! X% F3 i
% ]8 V9 h( l8 ~ {1 x7 hRxfifo Threshold:代表接收数据的阈值;
3 D% {) L' u# U" A( k+ \ & Z6 n8 O9 A$ |3 ?
Auto Baudrate:代表自动波特率,顾名思义,可以根据接收到的数据进行波特率自适应;) C* m: a8 F3 o$ C4 g
: n1 t0 f& ]' f0 c1 O
TX Pin Active Level Inversion:代表发送电平反转,发送引脚电平极性反转,正常情况下空闲电平为高电平,使能该功能后变成空闲电平为低电平;$ O+ k( B+ Y/ i! q
) x$ a& _8 e* ~0 {7 S9 @! n
RX Pin Active Level Inversion:代表接收电平反转,接收引脚电平极性反转,正常情况下空闲电平为高电平,使能该功能后变成空闲电平为低电平;
+ X& W) _) a: g 7 R6 x" m* G. v* w- ^
Data Inversion:代表数据电平反转收发数据的逻辑电平极性反转,正常是高电平为逻辑1,低电平为逻辑0,使能该功能后则变成低电平为逻辑1,高电平为逻辑0。校验位也随着反转;
2 g& b: E/ u3 Q5 U3 }' d. b! K 4 n1 o" o8 S; l' V7 R$ ?, q6 Q% M
TX and RX Pins Swapping:代表收发引脚互换,接收和发送引脚互换,适用于外部硬件连线错误时进行切换。
6 F5 x5 ~- |9 a S) }' F7 f " \; _* G4 l/ r
Overrun:代表溢出检测,:用于开启接收溢出检测,使用该功能后,当接收数据未取出时,又接收到一个数据,此时会触发一个溢出标志。
& D) g0 m* V' p# q+ b4 J L! V0 k , D2 U0 o3 g; w
DMA on RX Error:代表接收错误时不禁用DMA,使能该功能后,即使出现接收错误也不会关闭DMA传输;2 ~5 E, i9 |# u0 K# D
* m8 V5 ]$ X! kMSB First:代表数据高位先发,正常数据是先发低位再发高位,使能该功能后可以先发高位数据;
4 V" H! P7 q( ]! L a' ^第三节 MDK代码! v4 \* o8 F+ E( ^8 Y7 ?7 f! i
第一步:编写串口发送函数,如下图:
( o" g; n2 o" e* {+ q& a; e
lthuce3mksf64065447451.png
# X x8 k1 W0 h$ ~1 b
第二步:声明串口发送函数,如下图: & Y! S! t; P7 F& {) s5 q
lu0zh30455o64065447551.png
1 p+ b0 C4 O9 E m- G e2 s$ V/ k% f第三步:编写主函数,如下图:7 i2 L9 ?" c' R5 h: n
44unr3tec2k64065447651.png
# j2 V a8 P9 S4 Y; Y- _' J第四步,配置MicroLIB库,如下:【注意:不使用printf,可以不配置;如果使用printf但是不配置,程序将卡死】 ( s, m) c. s2 B( z7 l
5qi1khowql064065447751.png
4 Q3 S- w( H/ G+ P/ O1 B第五步:配置好下载器之后,编译代码,下载即可。
' A0 S g9 i1 o- z9 A第六步:打开串口软件,如下图配置:选择串口号;接收缓存区选择HEX模式,波特率选择115200;串口号请扫描,选择正确的串口号,不一定是COM4;最后打开串口。* T" p, G" Y9 Q5 O1 w) {( R
biycoznr1dd64065447851.png
; E$ o6 a$ n% ~ 8 J+ j) m3 f4 T6 x
第四节 实验现象
7 j4 y8 T- q; z: P$ w/ E 注意:! U" W; X# D4 s3 e, }0 X
1,请用USB线连接电脑与开发板;; ~+ P# G4 U- q0 f R- W2 S
2,请选择A开发板;$ K& i0 }' x1 x$ T
3,一定要勾选微库。1 U) x5 ]) q7 ?* J! y Z) T
现象:
" ~" E. e7 L' m7 w3 `8 z$ @8 n1,串口发送以115200波特率发送数据。* |/ s: I6 n2 Y' [% o( Z- _
来源:撞上电子微信公众号9 O" c; a2 C; d& V
版权:东莞市东城墨竹公子电子工作室
) Q/ P' ]5 p/ K1 K1 u2 b- Y日期:2024.11.133 w( B+ }6 l. g
第五节 课后作业
" h% t5 S& a% I8 p# G/ }1 ] 利用按键,串口打印按键按下的次数。 |