电子产业一站式赋能平台

PCB联盟网

搜索
查看: 21|回复: 0
收起左侧

STM32CubeMX生成的代码中串口如何发送数据?

[复制链接]

337

主题

342

帖子

2425

积分

三级会员

Rank: 3Rank: 3

积分
2425
发表于 昨天 21:00 | 显示全部楼层 |阅读模式
第一节 硬件解读   大家的开发板到手之后,可以看见,只有一个USB口,那个口就是串口,开发板A和开发板B共用一个串口,通过按键切换。
9 l' K) n$ k, [! t& l我们以开发板A为例,原理图如下:9 G( y$ L+ t5 r) J

txk3ysw1o0564065446449.png

txk3ysw1o0564065446449.png

+ c" `1 C! G, P9 Y2 I7 t& q开发板A芯片上面的PA2和PA3分别是NODEA_USART_TX和NODEA_USART_RX,而开发板A和Debugger开发板的连接如下:, o8 \. [% S8 D. `6 ^  q

o3v3vner4es64065446549.png

o3v3vner4es64065446549.png
2 T* S; F+ \1 M2 V( z
    : i* H4 G" J& U9 N" i) F

shnidnuxmhi64065446650.png

shnidnuxmhi64065446650.png

* X$ E) [6 M/ A8 w       通过查看CH443K芯片的引脚可以得到,SEL引脚的高低电平,可以让CH443K芯片在1脚4脚连接或者3脚4脚连接中选择。CH443K芯片引脚说明如下:. Y: s! A, {- G& ~! p, K% r

mgjsamcwo3s64065446750.png

mgjsamcwo3s64065446750.png
: i8 {0 t& n/ P. W
当CH443K芯片的SEL为高电平时,其芯片COM和CH1引脚导通。DEBUGGER_TX和B_TX导通,DEBUGGER_RX和B_RX导通;反之DEBUGGER_TX和A_TX导通,DEBUGGER_RX和A_RX导通。
0 u2 [- d7 i. n5 S' ?那么,DEBUGGER_TX和DEBUGGER_RX连接在哪?当然是DAPLINK板的MCU上面啦,如下图:   
$ g9 ?; M( {# z1 Z- ~  y' M: x: `

ujg1nwxqjcy64065446850.png

ujg1nwxqjcy64065446850.png

  f' G+ S3 g$ {  w连接到Debugger板的MCU之后,这个MCU通过内部程序(不需要我们写,比赛的时候已经写好了)转到唯一的USB口上,也就是我们的串口上。
* d$ G4 E4 ]  |. w

ligbqikat1c64065446950.png

ligbqikat1c64065446950.png
9 _) g  j- i& E" z
第二节 CuebMX的配置
, L' N' ~$ Y0 ^# T( E  第一步:选择PA2的引脚的USART2_Tx功能,如下图:   
" l3 A) a9 L* k& {5 S+ C9 f/ i

0gphiy4duom64065447050.png

0gphiy4duom64065447050.png
- R0 h  q# A+ B" z
第二步:选择PA3引脚的USART_RX功能,如下图:
+ a7 C% N8 A' o# U

d0wirninwkx64065447150.png

d0wirninwkx64065447150.png

- }$ B5 w5 H1 Z第三步:发现USART相关的引脚是黄色的,不是绿色的,这是为什么呢?注意:黄色是异常提醒,绿色是正常的。    ; q+ I% w9 j. b& n; `* I# V! `/ @

0djiczom24z64065447250.png

0djiczom24z64065447250.png

/ v) x1 I) ^! U( F- L+ F第四步:如下图配置USART2。注意:2代表的是异步全双工通信;6代表波特率,数据长度,校验位和停止位。这里波特率是115200,比赛基本上都是9600。
! k$ ?8 ?8 k6 s+ S

xbgjxmdy0bf64065447350.png

xbgjxmdy0bf64065447350.png

( |2 u+ }$ D/ k- I; @其中:具体Mode配置信息如下:
% s8 P' r  p, j1 U+ L           
" o; w3 S# W4 R# NMode:代表串口模式,配置为(异步)Asynchronous,(同步主机)Synchronous Master,(同步从机)Synchronous Slave,(单线半双工)Single Wire (Half - Duplex),(多处理器通信)Multiprocessor Communication,(红外通讯)IrDA ,(局域互联网模式)LIN ,( 智能卡模式)SmartCard ;    ! i- F7 N: ]) I4 ?6 ?
           
; _3 c& F; u5 p$ {3 hHard Flow Control RS232:代表RS232的硬件控制流,常用引脚为CTS,RTC,CTS/RTS或者Disabled;
; B1 {" R/ G4 e5 _$ [" b           2 o  D% |2 S+ }
Hard Flow Control RS485:代表RS485的硬件控制流;
, P2 ^0 }$ f) \' H, X9 t7 y           0 y/ G+ u: _- ^& J5 R
其中:具体Configuration配置信息如下:$ i( y6 b- S# k( A- W
           0 ~2 ]* b/ V% w& [% o" {% C; I
Baud Rate:代表串口波特率,常用波特率为9600,115200等;
9 O6 ~1 l* p2 i# [2 s0 d/ g           ) W& y  Q9 s* `+ K% Q
Word Length:代表字节位,常用字节为:7位,8位或者9位;" ^6 W% Q8 _8 z6 V+ }9 b
           
2 k: N6 b6 [8 Z* T% cParity:代表校验位;常用为:(无校验)None,(奇校验)Even或者Odd(偶校验)Odd;
7 t- z+ l- |6 _  y* }  ?           
# [5 \) o0 L/ ?' DStop Bits:代表停止位,常用为:0.5,1,1.5或者2;
2 @  x5 H  {0 \           
! k# W; i& i& X. QData Direction:代表数据传输方向,常用为(发送和接收)Receive and Transmit,(接收)Receive或者(发送)Transmit;1 W& s/ q: V) b7 t: C9 C
           
% E! L6 M. U( N5 c8 E3 f" `Over Sampling:代表过采样,常用为8倍采样和16倍采样,8倍采样,也就是一个数据位采样8次,16倍则是16次。采样率高精度会高一些,当然相应的功耗也会变高;
6 b) E% ^- h" ]/ T           , @0 G3 c0 ^7 n4 g( H! z2 ~
Single Sample:代表单次采样,使能时使用单次采样值,否则使用三次采样值。前面的过采样会有8或16次采样值,当选择单次采样时,会使用其中的一次采样值作为数据位逻辑电平的结果。三次采样则用三次采样的判断结果为准。同样三次采样也是为了确保数据的准确性。    0 d+ p5 P. N7 y9 y; \* T
           / [) D; ]/ M  d$ ~7 m5 v0 u- d
ClockPrescaler:代表时钟预分频器;$ q* m4 p. k/ I. m1 a
           
8 T" z- j6 F" q7 }1 Y5 WFifo Mode:代表数据缓存模式;
7 v9 F/ X% x8 C) A1 w* Q& G           
1 L: |- b0 y; |- s% qTxfifo Threshold:代表发送数据的阈值;
4 u1 f+ K% U1 t$ J; q( K" n+ W1 J) ~           
2 \' [' Y% X; R4 _8 V( uRxfifo Threshold:代表接收数据的阈值;( B# ]! o% T; h) Q2 N
           
5 J. a" T2 K7 \8 L# nAuto Baudrate:代表自动波特率,顾名思义,可以根据接收到的数据进行波特率自适应;
- T4 B) n8 K4 F$ w3 f           
4 G( C: y; N: ~2 z8 j& y; {TX Pin Active Level Inversion:代表发送电平反转,发送引脚电平极性反转,正常情况下空闲电平为高电平,使能该功能后变成空闲电平为低电平;' x1 x, q1 `0 t" }+ [
           
3 K. M; \- j! h6 k$ ?RX Pin Active Level Inversion:代表接收电平反转,接收引脚电平极性反转,正常情况下空闲电平为高电平,使能该功能后变成空闲电平为低电平;4 `! ]$ r- ]4 w% J
           
, f5 C. t. ?( ~, JData Inversion:代表数据电平反转收发数据的逻辑电平极性反转,正常是高电平为逻辑1,低电平为逻辑0,使能该功能后则变成低电平为逻辑1,高电平为逻辑0。校验位也随着反转;3 b$ p- }' _1 [. m3 ~
           8 h7 i3 O2 M* h0 v! Z+ @- d
TX and RX Pins Swapping:代表收发引脚互换,接收和发送引脚互换,适用于外部硬件连线错误时进行切换。
; R2 K- J  I$ y! {, u           
/ O& c& Y4 w% A, @' iOverrun:代表溢出检测,:用于开启接收溢出检测,使用该功能后,当接收数据未取出时,又接收到一个数据,此时会触发一个溢出标志。   
* j7 [. J8 f; b$ \2 j           ; `- H. x  i4 X5 F9 i1 B
DMA on RX Error:代表接收错误时不禁用DMA,使能该功能后,即使出现接收错误也不会关闭DMA传输;
# E7 h3 V- \: w' n) Q           
0 U* e9 \9 O; G  g0 _% pMSB First:代表数据高位先发,正常数据是先发低位再发高位,使能该功能后可以先发高位数据;2 \# k# Z' A) p! g" W( R! w# a) Y
第三节 MDK代码
6 m0 z$ V# s: G  第一步:编写串口发送函数,如下图:
  Z/ c* X0 i8 @- G' o! B4 G* Y

lthuce3mksf64065447451.png

lthuce3mksf64065447451.png
% R" r8 p1 r( h: X1 D) Y7 T
第二步:声明串口发送函数,如下图:    - f# k% \5 M) ^6 ^

lu0zh30455o64065447551.png

lu0zh30455o64065447551.png

& o* V# A: M& F第三步:编写主函数,如下图:$ P" w' m- J" L

44unr3tec2k64065447651.png

44unr3tec2k64065447651.png

: B; E. Q) v  o$ w第四步,配置MicroLIB库,如下:【注意:不使用printf,可以不配置;如果使用printf但是不配置,程序将卡死】    : j/ v+ F0 q9 q+ e, F

5qi1khowql064065447751.png

5qi1khowql064065447751.png
: O4 N, E4 O& |" z: C
第五步:配置好下载器之后,编译代码,下载即可。
3 `- r1 D7 U% v9 {" E* Q4 ~第六步:打开串口软件,如下图配置:选择串口号;接收缓存区选择HEX模式,波特率选择115200;串口号请扫描,选择正确的串口号,不一定是COM4;最后打开串口。
- z9 C& z& @6 c" H6 i3 O+ l1 e

biycoznr1dd64065447851.png

biycoznr1dd64065447851.png

* z; n9 U! l8 Q$ z" Z    5 `& n, L4 ]/ F
第四节 实验现象  
" x; G. |3 c- t. N- e  注意:
/ p: H  {; L; \4 Y$ d* x( g/ Y1,请用USB线连接电脑与开发板;4 ~5 m) q# ~% `" m6 R/ L# g. j
2,请选择A开发板;8 h, W% C+ {! w% n& ^5 g
3,一定要勾选微库。( Z. ^. u. @" R% k6 e
现象:+ R, \% c/ }  B5 ^
1,串口发送以115200波特率发送数据。
! e+ V& r0 e, C3 r( b( f来源:撞上电子微信公众号
% ?% Z4 Q% R; o# q- y" d5 W版权:东莞市东城墨竹公子电子工作室
& `9 S* o9 `% g. {" j0 w) k日期:2024.11.13
$ o7 r! n, X. V8 U- t2 a第五节 课后作业
: `% A; j; e% O8 ~% [2 W; U& ^3 P  O  利用按键,串口打印按键按下的次数。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表