一、开发板平台简介:/ L' n0 Z( a- z8 O! }5 k4 O2 b
1、开发板资源简介9 v* A7 ^! h1 X+ f
(1)开发板主芯片型号:STM32L431RCT6
$ A) u N5 c1 B! H7 r, Y(2)开发板主芯片封装:LQFP-64_10x10x05P" S% b8 g8 L/ u3 O
(3)开发板主芯片内核:ARM® Cortex®-M4
5 L, H" l/ U. L ]+ [; _* G(4)开发板主芯片主频:80MHz
& U& d6 L2 H( ^8 z- s9 e(5)开发板主芯片Flash大小:256KB- L' f- [- ^8 V, ~* }* a1 K
(6)开发板主芯片RAM大小:64KB
' N. H t7 t+ s3 b5 D6 X2 R" D' \8 @
; M+ D! Y, i# Y+ s7 v# X. |4 F; B
' c& ~ O/ L# ], f. ]
2 e& y6 Z1 B! g( d S5 {
# b! Q" |* T7 D4 r
9 ~$ R6 H' j1 l* E2、LED灯资源% L6 f# ^ H- H2 }& g: m
(1) STM32L431RCT6开发板共5个LED灯资源,其中一个红色LED为系统指示灯,指示开发板供电系统是否正常,如供电系统正常,红色LED为上电常亮状态,硬件原理图如下图所示:9 m# [/ G, Y* `0 m" O
' B8 T( J6 ?- Q) ^
8 a7 c, G; _8 m$ s; d, L# S
2 [. f n* I; @# [& T, U, a; x
5 n/ n, {# b. p% a" P% U(2)其他四个LED灯为黄绿色可控LED,高电平点亮、低电平熄灭,计划用LED常亮验证看门狗的作用,硬件原理图如下图所示:# r% n. ^5 v0 s2 ~0 b- v1 f4 a
' p0 }8 R3 Z& |" m+ v0 O' @+ r5 c
/ A, J. ]+ G% H9 { g$ M1 G) q. M t6 s2 H, t& C2 c, J
3、按键输入工作原理' C! I4 r4 F( R9 M$ X. y
按键输入原理:读取GPIO引脚的输入高低电平。硬件原理图设计中通常会加入100nf的硬件消抖,以及ESD二极管防止静电损坏。9 E1 f P5 [4 L, C0 f
9 V/ X/ i4 {5 q' y" d$ N: k- O V- Q
如下硬件原理图所示:默认PA0输入上拉,按键按下后高电平转换为低电平。
, p2 T7 A5 f! l) Q
5 e) p. N* F' Z/ C
; L8 S7 a9 p" l+ A1 O; E3 W
i1 ]# ~0 E7 _( U 二、按键输入实验过程
# G- y4 U: W# r0 R1、新建STM32CubeMX基础工程
6 |; G: E; |' B2 r! e* z2 A1 n(1)打开STM32CubeMX,点击“File”-->"New Project". r5 R. G) A/ a4 V. i
8 @) B5 h, k! E, a$ U! J! a- f
# x7 C0 t% o+ r. ]4 B/ r
% v! I9 V* t( h: L1 m0 W(2)等待打开主芯片选项界面(大约1分钟时间)。
+ s$ h* U& ]" Q: I) Z% J
) d9 T! |. l: q! X/ n$ B9 S5 L8 w0 E
' e* C9 q( \* z& X) G
* |) }* I0 l+ a) E(3)昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处选择STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。
* k3 [' V% I1 n' r) B3 @6 F! i1 |: c+ a
2 s+ W: @' B c. V! `
2 A8 o3 U3 F8 T/ Z7 R+ g. F- Y( _(4)选择时钟源。
" V9 `: h+ s( Y$ k2 P9 g6 L5 P5 a% l& m+ n* n
(1)因为开发板上有8M外部时钟,硬件原理图如下所示,所以此处选择使用外部高速时钟(HSE)。( D5 Q8 V/ @# g! W1 R
0 n Z: Y! `8 B0 u& l8 B
& K/ _% K4 L, K/ E' ?, h6 ^8 G
& C# I6 T+ C* O6 T+ {5 m( U
(2)因为我们没有用到外部低速时钟(LSE),此处不做处理,如下图所示。
3 y; p# e1 i8 f
, I" y% a m- H; _6 {4 Y
6 s$ F3 G w6 F B8 ^) M1 h4 w0 E0 P. k# C8 u
2、配置GPIO控制LED
1 M1 I# J, B% A(1)查开发板原理图得,LED1、LED2、LED3、LED4的控制引脚分别为:
* n$ T4 a/ [$ h0 `9 I$ ]5 {! J4 b: ?5 o; \# d. Q; l" c! Z: W
LED1——PC03 U! K" n* Z L u9 j! `
LED2——PC1
# E4 {: q) C# w1 M: E1 v* ULED3——PC2
) \3 [, p- Y& I) A" _- f- jLED4——PC3# j) S( i1 k# G- d, S" r& Y
( O% T9 a% _, |. o(2)配置LED的控制引脚为输出,输出频率、输出方式默认即可。
) ~3 k3 D* F- d" M, S6 ~ Y" }7 k! q' t9 A9 G
鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。
, Y2 ~9 s* Z; L; P鼠标左键点击PC1,选择“GPIO_Output”,表示设置该引脚为输出模式。
1 C* r n1 _2 d' t( D! R& `& z( t& @鼠标左键点击PC2,选择“GPIO_Output”,表示设置该引脚为输出模式。9 h6 T9 {5 f% {8 m; V" p
鼠标左键点击PC3,选择“GPIO_Output”,表示设置该引脚为输出模式。" c4 d! u' j' `! N
! R7 U, K3 r4 H4 b
4 E) X; d# r! T4 R8 [
8 \6 x5 U( M$ k" V: ?2 q: J
$ e$ i. c# E3 v0 |7 U5 o y( [: D* d& E7 Q5 H0 P) z" _. O
(3)也根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。
% j0 I e, F5 S" t; Y6 X$ Z$ R4 U3 J4 c! L
0 `+ x; v8 H- X* y9 z6 P. K
# p3 X2 Y& X& Y
3、配置PA0按键输入模式* a3 \% A5 F# ~- [2 |2 I: T
如下图所示:右键点击PA0,选择GPIO_Input,配置PA0按键输入模式,默认内部Pull up上拉即可。' ~. F5 L5 I* I
" D! _' [% G Z
( `& J- I' P8 x2 f- U* Y% \$ K
! j, P: S9 u" t2 k0 o0 R
- G0 x& l2 L$ p' I4 K
5 X, v: q: w) Q 3、配置项目工程参数
8 h/ X0 Q4 b0 W8 x4 `" Q5 J/ g(1)配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。1 ~8 b: Q. G" c% }, D/ m
( @' |- U5 ` v. l; L, r: j
: L. X; @$ [; T
$ w% H7 I. |. Q/ G8 S
0 I( b) \0 x& f8 }/ l$ N, b9 H j(2)完成配置工程。7 m- Z9 \/ P, y: R; {& m
备注:需要注意代码生成过程中的继承关系,如图所示:需要保留开发者自己编写的代码时,请根据配置设置,不然生成代码后会删除自己编写的代码(从这个方面也可以看出开发者备份自己的代码是多么的重要。)9 {- n+ b, }: Q. f j2 J" {
+ M- K; p9 u% U- t7 L* ^
2 `: t$ b9 i2 W- Y/ R7 ~) b9 U5 U8 `% \
( ^( L" U2 P! M! n
* |+ B+ d+ l& ?: m; N9 {5 l5 b(3)生成代码。& H% l$ u! B: m! O0 C& w. S$ _, Y
备注:使用Generate CODE生成工程代码前,请确保文件路径无中文,否则会生成项目失败。3 p! B0 i8 g9 \& B: }( F: L
: @6 K. o0 J u/ U4 V0 g
* s, H- D9 K6 Z6 v5 C
- J U7 C: l, |- ](4)工程代码生成成功。
, v0 S. |* h; K+ `( o: v7 N7 y3 j% T j1 L
% g n) G3 A+ `; I6 i t6 ?! i( {
9 |8 w( T1 k+ z' H2 S 三、在KEIL 5中编写代码. I8 f2 I* }+ W) l' d/ G: I
1、使用KEIL 5(MDK)打开项目工程文件
+ o# g) u( _/ x: e6 W源码使用说明:使用前必须把项目工程复制到无中文路径的文件夹下使用。' g( _9 V, |* }2 Q& Q& k
(1)找到刚才新建工程的存储路径,安装项目名称,打开项目工程.uvprojx。
0 h# \/ P1 O. u' C& m& ^' @3 v# L8 F6 Q0 s' l: n& g
% i, w# K" a* w z. a
' N; g$ f" a: v! {" L+ i1 t2、添加按键输入验证程序- _& b0 p0 j- ~+ E% m5 L8 {
(1)main.c文件中,初始化LED1、LED2、LED3、LED4默认为点亮,并在while循环中添加按键输入控制程序,如下所示:实现按键输入后LED1、LED2、LED3、LED4点亮和熄灭之间反转切换。& I* k: ^4 `; m9 |+ l2 O ?7 ~
( J2 @) a; s7 d* U: \! e* ~' a备注:自己添加的代码需要在 /* USER CODE BEGIN 3 */和 /* USER CODE END 3 */之间添加,否则STM32CubeMX更新代码时,会造成自己添加的代码丢失。
9 T! P B2 i+ e* y
4 L( y# [- ~6 j% ?/ b
+ G* j- Q( v0 i& I" R4 X8 c3 F1 F. L* w
(2)main 函数代码如下所示:
5 n/ {' |* d/ X4 o- int main(void)
( k" U) L9 ~+ p3 }* R A: C3 f - {0 E" `( J6 Q* R) t& ~; ^ q# G+ h
- /* USER CODE BEGIN 1 *// d! s( d3 D( s6 M- s" ^. @2 @4 V
- ' Y) y- l; i. |: E
- /* USER CODE END 1 */
8 D4 I9 v' d# t' J. q -
! x+ A+ W* ?- n% B, K. U: o - /* MCU Configuration--------------------------------------------------------*/
& Z" H8 _% N8 L& h3 ? -
' Z. s+ {( s9 n4 _' H - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */) F' @: e7 U2 [, C: u2 C
- HAL_Init();3 V% g# P/ N6 K3 m4 N
- - `( y, U5 `0 L6 T% f3 A9 X7 p
- /* USER CODE BEGIN Init */. v) E# U+ [0 P4 ^6 X$ Y9 Q
- $ a9 j/ r3 u7 ~; z& G4 u- N
- /* USER CODE END Init */
& n4 ~ }9 D3 b$ d5 ]& a$ q3 Q -
( ~3 X2 `# j4 [6 ?/ t. J - /* Configure the system clock */2 S6 j: S' h& W+ O2 i, o5 m( X+ ]3 _
- SystemClock_Config();
5 ]& @2 X) M4 ^ Z2 G4 f: L2 U - # V3 k9 c4 N& c! U& k# l
- /* USER CODE BEGIN SysInit */% k% n! C& {4 j' P3 u
- * M# M: ~% Q) n- y: t3 I
- /* USER CODE END SysInit */
5 u% Y$ y7 s9 e7 k \! i - 5 j5 H2 A9 X1 @2 {+ a& d
- /* Initialize all configured peripherals */
' G4 Y U1 n' o4 }8 z+ j: ~- e; U - MX_GPIO_Init();0 F3 A, U4 ] @; n* r" {5 A% H. N; F( t
- /* USER CODE BEGIN 2 */
3 j6 m5 o; i/ g1 } - HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET); //默认LED1、LED2、LED3、LED4初始化点亮# |1 W) w: f+ { d: Z0 j
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET);5 x* q* v9 R8 i6 Z) \) _) ?4 k
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,GPIO_PIN_SET);
# N% {5 x( X7 f# L+ N7 w0 ?" L; x - HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET);- z- i9 g4 w) j( R0 [
- /* USER CODE END 2 */
; J# B" {/ Q. G -
9 S& G8 ?2 j3 O( K n+ t1 N - /* Infinite loop */
# ?. E/ ~! a& z- f0 t2 L0 T Z - /* USER CODE BEGIN WHILE */* v8 q" @- g/ J4 b6 X% X4 S0 }0 ?
- while (1)
w! ]1 X0 ~3 _5 N' X - {& d" f) c5 P% _
- /* USER CODE END WHILE */
& R* t! Q2 K4 u/ d. Z1 @ - + Z \5 Q W3 L
- /* USER CODE BEGIN 3 */& [0 a$ G3 N6 H, X9 [6 m
- if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET) //读取按键输入 m% S2 ^4 _1 _" z7 b
- {
) u; ?8 ~& G# I$ t" { - HAL_Delay(200); //软件延时200ms
3 G- X8 R3 h9 s7 V7 x( } - if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET) //按键反转LED,熄灭和点亮切换! v5 q( ]6 C6 u" _' _
- {
/ [* T1 }6 d) q& z1 d% ~8 E; ^ - HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);4 e9 r* s1 j9 P5 {& |, J# V+ R
- HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_1);/ O4 _" |( p- W7 a
- HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_2);
' ]# w$ z) b2 ^0 R6 c - HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_3);$ m0 D2 ]: ^% w: C
- }8 D) q% h' [! {: }' T1 w# A0 v; ]4 D
- }
# f+ G9 r" x* T0 N' } - }
1 @. D+ b7 K+ v4 K8 n/ x - /* USER CODE END 3 */
! n* i- e8 t }) E5 H5 n - }
复制代码
! P; r7 J" E( K8 k; _3、设置编程仿真下载模式& [; `/ g3 G; J8 r7 g" P
(1)选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。
/ l/ i- ^% S* i) J# v# C2 g6 h. O8 K3 l: p' }
& } _2 p. Y' E
1 t/ k6 n5 B; ^
(2)点击编译,完成后提示“0 error(s),0 warning(s)”。8 K8 V% G# r' G
8 y2 h4 D8 J$ F1 K' u" M6 |
6 z' K1 C; i" k, ^/ J8 D
- b* f5 m c( {2 s(3)点击Download(或者快捷键F8),即可下载程序。
& [0 Z' j3 i4 Y9 r2 V! \9 R; O. m2 H f6 |* V
/ o6 p1 {* f/ U$ T$ N |) y0 [
' O; |8 o8 v9 ~& p* P4 [: K( F2 w
: ^3 V! E$ z$ Y8 H! j3 T, ](4) 如果下载程序后,没有看到LED1、LED2、LED3、LED4点亮,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。
% m f- A# W' x9 _7 m- M& _8 z& [3 G6 y6 `! {+ |
, k0 n& N3 n3 X' _
( j% N: [- w& B7 t9 {- o% @/ F- b$ h0 t+ N, c4 K6 t& u( w0 s5 A
4、按键输入实验效果展示 n* N1 b; G4 I, V7 S
程序烧录到开发板后,即可看到LED1、LED2、LED3、LED4初始化后常亮,按下侧按键K1即可实现LED1、LED2、LED3、LED4点亮和熄灭的反转切换。
6 r6 J8 p0 e$ a, p1 i8 y' V————————————————
{9 j7 T- |8 D版权声明:智能小屋ZYXC' c( v+ n+ T( o* n8 q
% U) O' f$ e& B7 A! S! x
& M- v& O# q2 d( T3 d9 h
8 [ U5 t2 y H6 s; ~- i: @5 ~2 Q
|