电子产业一站式赋能平台

PCB联盟网

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

【蓝桥杯嵌入式】第三章 LED流水灯

[复制链接]

395

主题

395

帖子

2304

积分

三级会员

Rank: 3Rank: 3

积分
2304
发表于 2023-9-25 21:11:00 | 显示全部楼层 |阅读模式

g1kixfzvnth64056747228.png

g1kixfzvnth64056747228.png
7 Q& O- @0 y" r8 |3 {+ `
8 M6 ^) G& t6 C, q* ?
第一节 硬件解读 先看看原理图:7 B7 g( s/ Y- w- A0 p# s
         / i7 ^: y$ m- m* K

inoy3zkzx0264056747328.png

inoy3zkzx0264056747328.png
9 ~) P% {2 Z. `3 {( B: D+ H
和普通的开发板不同,蓝桥杯嵌入式的开发板通过一个74HC573芯片之后,连接到LED和限流电阻。那么74HC573是什么呢?我们可以通过数据手册找到他的真值表,如下:3 Y6 g7 Y7 w% O1 Y. ~

dgzfcl4pe1064056747428.png

dgzfcl4pe1064056747428.png

; n2 I( |$ ~9 c# L0 A: H从上表我们可以得到一个结论,只有在OE#和LE分别为L和H的时候,Output才会随Input变化而变化,所以我们控制了OE#和LE,只要其中一个不符合条件,不管Input是什么,Output的状态都不会改变,从而保护了Output的状态,得到锁存的效果,如果大家需要补充这里的知识,建议大家去看数电的知识,或者百度搜索“锁存器”。
# V( T& M6 S) w' O$ e7 f从上面的原理图我们可以看出,OE#已经是低电平了,那么就只有LE了,也就是PD2引脚,当PD2引脚是高电平,单片机就可以控制LED了;如果是低电平,就无法控制了。例如,我们让LD1点亮的流程应该是:单片机控制PD2为高电平,打开锁存器,让单片机可以控制LED->单片机控制PC8引脚为低电平,让LD1亮->单片机控制PD2为低电平,关闭锁存器,让单片机无法控制LED。+ \6 J; \' i9 J- h" F* R
第二节 CubeMX配置 第一步:双击打开STM32CubeMX,,如下图,新建项目。注意:新建项目本教程只介绍一次,以后项目的建立不在重复。% `& a3 |" N( c

w2ct02b2lwx64056747528.png

w2ct02b2lwx64056747528.png

, M) f- q( D  Q( ]# G第二步:在英文状态下搜索芯片:STM32G431RBT6,选后选择对应的芯片即可。注意:搜索芯片时,确保输入法在英文的状态下;选择芯片的时候,可以选择后缀带有“TR”的,2者芯片完全一致,不影响比赛。
0 S6 P0 r- y9 [; D# U0 J

px0j1ihhfnf64056747628.png

px0j1ihhfnf64056747628.png
1 O  D" ^3 ?. M7 l5 F& R
第三步:配置下载器,如下图。注意:本教程下载器配置是配置一遍,后续教程将不再重复。+ @( B' \& H: M( |$ ^4 d

xoifwyec13a64056747729.png

xoifwyec13a64056747729.png

1 V( w- N% _8 q6 D$ z第四步:配置STM32的时钟,注意:本教程时钟配置是配置一遍,后续教程将不再重复。如下:* w1 z' n% E! j" d( I" A4 I5 w

0a05xupnkw164056747829.png

0a05xupnkw164056747829.png

; ]: E, X9 X. w- h% @: s8 m3 G9 F' p' \" q; a8 y& W8 C

y3fzdutkpuv64056747929.png

y3fzdutkpuv64056747929.png
' Y; K: B9 v, W
第五步:选择项目信息,如下配置:2处是项目的名字;3处是项目的路径;4处是编译器;5处是编译器版本。注意:项目路径不能包含中文等其他非法字符;编译器一定要选择MDK-ARM;编译器版本一定要选择v5。后续教程将不在重复本步操作。
4 g' [( `  P/ U. \

i53fc0a0y1w64056748029.png

i53fc0a0y1w64056748029.png
% ~$ x" A0 c& S& T0 e
第六步:如下图,将3,4处的按钮勾选,点击5处,生成Keil工程。注意:后续教程将不在重复本步操作。
2 f7 y7 S  d8 P! }

l2r5gafb53d64056748129.png

l2r5gafb53d64056748129.png

: `: f, k4 j* N: i8 l( g7 W# ^# x  ~第七步:点击上步的5处之后,会有一个对话框,意思分别是:打开项目文件夹位置;打开项目;关闭本窗口。注意:这里灵活处理,打开文件夹和项目都可以。后续教程将不在重复本步操作。
4 c  ]2 W! S" ]/ q! ?0 M

gtriktcdh2k64056748230.png

gtriktcdh2k64056748230.png
) O6 }- U9 Z/ ]8 ~
第八步:注意,以上操作是建立工程必备的操作,以后的教程不在重复。现在重新打开STM32CubeMX,开始配置LED的相关引脚。; H! @7 k2 m: l1 X/ F( e2 `  y

0hfh5sr5hmv64056748330.png

0hfh5sr5hmv64056748330.png

' D2 S% R1 M- U+ C1 K
5 e8 T$ i% d: f- U  x2 V

1r10gqcjztc64056748430.png

1r10gqcjztc64056748430.png
1 g, K5 ~0 D; C$ Y& A+ ^6 ~- ]
* q! ^. q! P. w) Y1 r1 H7 m

hbfzhze5ffo64056748530.png

hbfzhze5ffo64056748530.png
9 I$ q  x* a+ v% }$ l
第九步:重新生成代码。
* d2 j; }9 u3 j6 O2 Z第三节 MDK代码  第一步,编译代码,检查STM32CubeMX生成的代码是否正常。如下图,点击1处编译,之后在2处可以看见:0错误,0警告。注意:后续教程将不在重复本步操作。7 C+ V- e# F& W6 C& ^

a112t4lygme64056748630.png

a112t4lygme64056748630.png
& k1 J, |# z9 q- z1 I$ r) S5 ~
第二步:配置下载器,这一步很多步骤,希望大家仔细一点,一步一步来。注意:不要忘记点击“OK”,后续教程将不在重复本步操作。
" I  }8 ]5 H2 {3 T* Y

z0vbvezhzbs64056748731.png

z0vbvezhzbs64056748731.png
" K& ^5 V1 o0 k$ F
第三步:新建.h文件。在“项目名/Core/Inc”中新建一个“Zsdz.h”的文件。注意:后续教程将不在重复本步操作。9 [( V$ s( j! L3 d& `. r3 m

qunnx1tdco164056748831.png

qunnx1tdco164056748831.png

6 G+ p% |0 I6 e) ~  e* Y2 O9 k$ y         # w3 \0 @2 Q+ ]# ^. v$ r' u
第四步:新建.c文件。在“项目名/Core/Src”中新建一个“Zsdz.c”的文件。注意:后续教程将不在重复本步操作。
2 E8 M' ^6 S; P

a4u25su50vf64056748931.png

a4u25su50vf64056748931.png

/ R& O  s2 t3 ~3 I第五步:添加“Zsdz.c”文件。点击1处,可以看见项目的所有的文件,点击2,3处,准备添加“Zsdz.c”文件,但是发现没有“Zsdz.c”文件,如下图:需要返回到上一层文件目录中,点击4处。注意:后续教程将不在重复本步操作。" I0 Y! D: g& N0 \& ~- j

fwafcdpui5h64056749031.png

fwafcdpui5h64056749031.png
+ s/ O4 j6 _+ w0 l  b
如下图:虽然没有发现“Zsdz.c”文件,但是我们看见了Core文件夹,还记得我们的“Zsdz.c”文件保存在哪吗?在“项目名/Core/Src”中,所以我们进入到“/Core/Src”,找到“Zsdz.c”文件即可。注意:后续教程将不在重复本步操作。: h: f' {8 D2 e6 S
         
6 v( h! p5 Z& B# F& y3 J4 t! S( _0 w5 s; e  A* @8 a, N; e" u  z

zayk0borjmf64056749131.png

zayk0borjmf64056749131.png
+ q) c% V3 T( [
第六步:如下图,代表添加成功。注意:后续教程将不在重复本步操作。
3 x) E5 l( O2 q+ R  `! I3 b4 W
0 q6 e5 b0 r1 [2 B$ l第七步:注意:如果利用STM32CubeMX生成MDK项目,“Zsdz.c”文件可能会从MDK项目中移除,请重新添加。1 X3 q- E7 m, ^& |& g
第八步:编写“Zsdz.c”文件的代码,如下:注意:后续教程将不在重复本步操作。; W) E; ?+ B' @5 Z6 N' P' c
3 T+ c+ w8 U' E' J  }
第九步:进入到“Zsdz.h”文件,右键,选择“Go to Headerfile‘Zsdz.h’”。注意:后续教程将不在重复本步操作。
- I1 L" g1 ^6 N. \( D4 M6 ~, x         
4 I" A; J8 x# @" b& r: Y5 }
% i/ v# z$ M+ ~  d; T1 N0 N. d1 p  O5 L3 H' l! ]3 w& j
第十步:编写“Zsdz.h”文件的代码,如下:注意:后续教程将不在重复本步操作。7 r* a: E) u9 c8 ?4 z3 d6 [4 w
: ?6 {" z! N7 L* j8 U9 |1 |
第十一步:在Main中添加“Zsdz.h文件”,如下:注意:只可以添加在“USER CODE END”和“USER CODE BEGIN”之间,否则等下次利用STM32CubeMX生成MDK项目时,不在“USER CODE END”和“USER CODE BEGIN”之间的代码会被覆盖。
# ?& |4 v! I6 w$ D+ P& h' l$ K, @) r; q
第十二步:编写LED的函数模板,具体如下:注意:不要忘记声明gpio.c文件。注意:后续教程将不在重复本步操作。
- T  j' \. m, Q0 I, _6 N3 q. a7 [3 k' p* X$ @
" |* b+ V: u2 _

8 l( |3 ?5 Y' f, ^6 {
; u0 f7 K0 z9 D! v$ A" v* _
1 Z* N  [2 J. A5 |: e9 b; i/ V
9 o* v% H. w+ m+ ]8 G
9 @6 T$ v1 \/ {* R& @0 O# J! [7 @第十三步:以上就是LED所有的封装函数了,我们在“Zsdz.h”文件中声明他们,如下图:注意:后续教程将不在重复本步操作。! U, g3 i/ l- X; ~+ }" D, I2 I/ ~
0 U' S; J6 Y: Q
第十四步:现在随便在main函数中写几个,看看效果。# }) \9 x' G; L! `) q, G

2 m/ A$ B- f  [. J+ B
, v6 B& M- K( f0 {2 m& A# H. H  ~0 j  l( A0 r6 V6 [- @* Q
第十五步:编译检查代码并下载。点击1处编译代码,之后在2处可以看见0错误0警告。代码没有问题之后,点击3处下载代码,在4处看见Flash Load finished at xxxx,就证明代码下载成功。注意:后续教程将不在重复本步操作。% E# R! B" P; |8 w% `2 `* v
$ {2 l1 X+ x2 ?1 W( B
第四节 实验现象  注意:请用USB线连接电脑与开发板,注意是CN2口。
- i8 q% N2 o8 P$ h4 w* h( T现象:500ms为间隔的流水灯。5 ?: M# @( X' c- S
来源:撞上电子微信公众号8 X$ {* K( T- W. a: c& E' Z2 S- ?: w/ E
版权:东莞市东城墨竹公子电子工作室
" L) q6 ]/ h! a+ N. X! m日期:2023.08.29
8 t- ^' C8 z1 G& T* a, i0 t2 |8 T' K6 V8 |/ c+ v
==========" h) d3 N% D2 @  T; m/ {% i
往期回顾:【笔记】单片机头文件的顺序会让程序报错?* O. Q# x( j: }7 {
F103程序移植到F407的经验小结1 G; H3 z0 \: o) S- M
STM32输出可调频率与占空比的PWM& r1 Z+ p* d7 `5 B( _
STM32CubeMX之串口接收不定长数据0 p( g: z6 d% k7 Z
==========! K7 O  O2 S; u$ N5 O
# s. s' f3 _5 s0 P( g; G* t
, [4 J* q. Q( F/ q) ~* p

  [( A( X* _. l- B" i* A
回复

使用道具 举报

发表回复

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

本版积分规则


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