你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【实测教程】STM32L4之按键输入实验

[复制链接]
STMCU小助手 发布时间:2023-1-14 18:52
一、开发板平台简介:
; K* b, o$ `4 V" [1、开发板资源简介

$ u3 G1 R3 i" `$ K$ m/ X(1)开发板主芯片型号:STM32L431RCT6
0 ]/ t- g; k$ {3 @. \9 w(2)开发板主芯片封装:LQFP-64_10x10x05P. Q# l5 I* }$ ]( j2 \: [
(3)开发板主芯片内核:ARM® Cortex®-M4
  m. w2 }8 D( k/ y2 P(4)开发板主芯片主频:80MHz
* ?& M1 E  z' |(5)开发板主芯片Flash大小:256KB
* m$ P: w& S2 T6 y7 h* s7 ?4 e(6)开发板主芯片RAM大小:64KB) j' A- @) t  k9 F
4 Z! Y. ^& G' V/ E$ S
bb91345227434ee7a43a34bf3fe366e6.png 4 \: L. G2 g  o3 L
8 M# S( j8 O( v! b$ p
929c0cce04aa4115a8623703982bf3e1.png
0 c" K0 Y! ~( d; V  ^. ~8 Q/ H% i+ ^
2、LED灯资源

% C% g8 [8 d8 s2 E' z6 a. U(1) STM32L431RCT6开发板共5个LED灯资源,其中一个红色LED为系统指示灯,指示开发板供电系统是否正常,如供电系统正常,红色LED为上电常亮状态,硬件原理图如下图所示:; ?+ ^' d# D% z) Y' g3 T' d

0 K, `" Y" X5 c
0f177691c5814f16a508bcfa747f87ac.png
. o/ O. ]3 l1 f! U( |+ m
, y" c$ F& f! B) N7 F0 T) |9 |
# Y0 u' t5 v) u3 F/ S
(2)其他四个LED灯为黄绿色可控LED,高电平点亮、低电平熄灭,计划用LED常亮验证看门狗的作用,硬件原理图如下图所示:7 l% [2 c- R/ S+ o5 n: h

! t" Z5 P' B$ Y- s% ^8 y
e923ad767b8448b7ac37c4ed693724bd.png : G9 V# w4 ^4 J* X' P
9 X6 j1 I  W# v& K8 o0 O/ F$ N8 }
​3、按键输入工作原理/ ]/ }6 v* \. [! a, D3 {" p  J
按键输入原理:读取GPIO引脚的输入高低电平。硬件原理图设计中通常会加入100nf的硬件消抖,以及ESD二极管防止静电损坏。
' x1 A1 k4 _: m- Y. N4 D- c2 E# n' _: y; I- V3 r& @6 ^" E
如下硬件原理图所示:默认PA0输入上拉,按键按下后高电平转换为低电平。
* t' F+ ]8 N) \: q" j1 I: X! ]9 Y  Y6 |9 S6 n
0aef905d6dd649c1b1a14e4e3929cce6.png 2 h9 O# q7 k7 R; l9 ]2 G

4 ^# ^# N$ ?* O) C+ k  二、按键输入实验过程
& T- Q/ z* n7 }  ?& k: O, u1、新建STM32CubeMX基础工程
$ J# ]& C+ Z/ S- W  e(1)打开STM32CubeMX,点击“File”-->"New Project"4 P0 x$ b" n0 V4 o
' l# |. ?' I% X3 j& r+ O! X$ g
2399170347904e959c855fefd5877f84.png . `9 ]) e( W% E  ?  |; @$ c8 s. O

  s0 S- O8 Q7 B- V* t. Q# q(2)等待打开主芯片选项界面(大约1分钟时间)。
* ~# k6 x4 {+ U! E+ s0 W. t% h! N4 Z3 j  O3 r. E& ^5 G4 E
d74d2fdc60c9440483e2b7cf8d928e7f.png # y8 \0 P4 c6 d7 k: t* m
0 a1 @* U" R  _5 }) t4 K% y
(3)昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处选择STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。
, K1 c( _0 `, \0 f0 m1 J3 M: J% E$ _3 y8 p/ [
7b80345238d74bea82ce70e1a348f7b4.png
  _5 [8 f5 b2 ?1 ^; ]
7 q: c; x% n" M, X0 T! ^( E(4)选择时钟源。5 ~, p2 K! g, x+ c; d

4 u- W+ I1 m. c# N3 n: ~6 j(1)因为开发板上有8M外部时钟,硬件原理图如下所示,所以此处选择使用外部高速时钟(HSE)。
' D$ Q6 }: a$ J6 a6 d! w5 [( r6 h8 }& c6 ^7 B6 p9 t' d
3f65707eca104663a3dede6d25dfa961.png
  T# B3 Y$ B( Q' k& q" \' s, K8 O/ i$ b, V  P% \/ g! E
(2)因为我们没有用到外部低速时钟(LSE),此处不做处理,如下图所示。
$ y# e. V7 j0 a
' _+ l- p( b- V5 D  q, E
72119b971f62410fa8344f7f9fb9f389.png
. ]- R* Y* x5 m/ e: L: P# j
7 q1 i2 Q; e: c! Q) @$ R" n
2、配置GPIO控制LED
; V8 f+ _* }5 D. Y- j(1)查开发板原理图得,LED1、LED2、LED3、LED4的控制引脚分别为:
% T5 ]+ @+ O; `* t, ]9 u# j1 {5 [. V4 Q$ x: J
LED1——PC08 [! j) D% M0 T
LED2——PC17 E0 D3 U1 q1 Q( r, j+ Q
LED3——PC2
8 ?6 A, F+ ~% r* vLED4——PC3# m' e; R1 N# y! G' ^
2 E' }# q$ L& x6 b" A
(2)配置LED的控制引脚为输出,输出频率、输出方式默认即可。
8 U5 r9 W7 M8 H2 r8 s; u% w( m, e3 z" b! i# k
鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。% Z% C+ K6 e3 o
鼠标左键点击PC1,选择“GPIO_Output”,表示设置该引脚为输出模式。
+ R/ }! K  X& Y7 r7 T鼠标左键点击PC2,选择“GPIO_Output”,表示设置该引脚为输出模式。: q1 w* J6 ?( H% W# C0 C$ C$ T+ e  Y
鼠标左键点击PC3,选择“GPIO_Output”,表示设置该引脚为输出模式。
/ F. g/ W- Z2 w6 G( x
4 Y# x- r( W; v9 x$ |# `3 N
492907c1e71149819adbaee4516a2af4.png
" S7 `3 x7 @, Q# a" \) Q! G% b3 `, C9 H/ \5 t0 `* Z
c75d3f10ba2e427d9c1a10fad9bf5471.png ; E0 S" v4 E" H7 p/ ]9 W" Z" l5 M
, w5 b+ b5 `/ H& G
(3)也根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。' [( A& @' M. Q

7 |, _1 N  Y9 t
38ff4b80e1c5495ba3076a5158fd91fa.png
; W$ m' K$ ^8 k  E1 ~1 v
0 B, r1 s: d% x' j. f( J1 \; o​​3、配置PA0按键输入模式
6 x: f) o1 C1 ?- W  t0 T+ m如下图所示:右键点击PA0,选择GPIO_Input,配置PA0按键输入模式,默认内部Pull up上拉即可。
: X$ v+ c! u- u* b' ~6 S0 r
8 M1 F* P# e! }4 J/ i+ Y; O
dd6637a0885540099c753cda683008fb.png   j0 Z5 j) A3 W
100c273590ec423dbc03c83cb5bc088f.png
: T7 k6 m3 @* N7 k: I" L$ P/ y4 i, D1 T6 b  }" A
( l, h* R) ^% `+ G1 i/ j7 ]
3、配置项目工程参数
+ v. o2 Z9 B& h$ \* p(1)配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。3 D* l4 E" ^5 y1 b
! Z* `7 `8 k, P
f3ecedd9323f4463b69539906b3c1199.png
& n: X4 @6 c4 c
8 B3 h. N! {* ~; Q

" A  B7 b* R( [( n. z2 c9 R(2)完成配置工程。; @# [" Y' Q& `; l
备注:需要注意代码生成过程中的继承关系,如图所示:需要保留开发者自己编写的代码时,请根据配置设置,不然生成代码后会删除自己编写的代码(从这个方面也可以看出开发者备份自己的代码是多么的重要。)5 V- v: G1 C+ x$ ?; d8 j
9 l! l# Q4 w3 @) v; l
efdb616174f54925b6eac31109f227b5.png % [( P" |$ e9 K2 z5 p7 ?! h
​​
3 n" ~( w( L# j  q" k& ~ 41c3f2716e4e4eda8f62fa3a1d871322.png ; g8 D# v. P4 C) ~1 ]
( I8 M! |* F' j
(3)生成代码。
  V8 h1 [& ]& g9 S) |2 }备注:使用Generate CODE生成工程代码前,请确保文件路径无中文,否则会生成项目失败。
2 b* q' \, N+ {, ~& X, n
' V2 J- h' D$ o% N
8eaa7d0babea40ee93f158481a6ee471.png 2 p8 R* @* ?8 x" ~$ c
​​
3 ]/ Q- h4 E4 X. K(4)工程代码生成成功。1 U# H0 I+ F  Y( E& I3 ^2 b
4 ~3 Q0 v% ?* o  N! u
e8f46d59a1fb4af589feb613fdff17b4.png
% z7 S2 L9 K, `3 U- [8 M2 ]  k" @6 Q. Q: a" {; m
三、在KEIL 5中编写代码9 D+ e! v: e" }: }' F5 g0 B! z* m
1、使用KEIL 5(MDK)打开项目工程文件
; g, S  k9 c& D* F, o3 n: w源码使用说明:使用前必须把项目工程复制到无中文路径的文件夹下使用。; K3 w8 g) \( X
(1)找到刚才新建工程的存储路径,安装项目名称,打开项目工程.uvprojx。. S( m. F0 D7 W7 b+ c

' z  V2 T+ w, [
c4de30b9c6ed4cfba7c8581501244b42.png : i2 F/ ?: C7 r( x2 l

2 l8 _% j2 y) U+ Y2、添加按键输入验证程序  a/ f! c$ T2 ]8 o7 w+ {2 S, P2 q
(1)main.c文件中,初始化LED1、LED2、LED3、LED4默认为点亮,并在while循环中添加按键输入控制程序,如下所示:实现按键输入后LED1、LED2、LED3、LED4点亮和熄灭之间反转切换。# Q% `& c8 w: S: h- F1 d7 `1 Q

5 z: [4 l( [  R备注:自己添加的代码需要在 /* USER CODE BEGIN 3 */和 /* USER CODE END 3 */之间添加,否则STM32CubeMX更新代码时,会造成自己添加的代码丢失。
3 ?. f1 ?# M0 O( Z( a
: a0 k2 g3 w; J* S% e+ V
7ce423ed75a64c7c834a1547b2b07f80.png 6 n  R! s1 T( w6 b$ X8 e
9 n( u) a- Y3 K2 H) z" [
(2)main 函数代码如下所示:  L" k2 o, k( s; [$ J4 P0 J0 h0 Q% M7 J
  1. int main(void): n% F3 y# i) c1 l
  2. {
    + R- a1 C, c4 z/ C
  3.     /* USER CODE BEGIN 1 */
    7 Z$ s/ E% h% s' A

  4.   O) O* [: j* b- V7 u* S$ S/ \
  5.     /* USER CODE END 1 */
    ) N8 t( S$ |: j1 D
  6. ! |2 M: L: y7 k( b3 _" [
  7.     /* MCU Configuration--------------------------------------------------------*/
    # n% k* I/ D8 m. E" b: Q
  8. 4 {6 `6 o" j9 R9 _  Z9 a$ A
  9.     /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    8 g/ s) P- k! J: `* C
  10.     HAL_Init();4 k! N" l' i+ _  R! t* I( W- j& p
  11. % V( j) u' C9 @3 ?
  12.     /* USER CODE BEGIN Init */6 f1 u, j0 E) v4 Q

  13. 1 p3 t, ]9 t' B* U
  14.     /* USER CODE END Init */- F  J4 R) Q7 |, S; }9 B( H4 u% W
  15. 8 t' F; a0 \6 M4 W* s
  16.     /* Configure the system clock */
    , X1 K8 Y( S9 R* K: `8 J8 J- ]
  17.     SystemClock_Config();  I/ _  _8 u4 t7 s

  18. ! O+ k* M. ?2 n1 P( A) b
  19.     /* USER CODE BEGIN SysInit */
    ) Z3 N+ n3 b4 e, O9 n! E$ M

  20. ( C: D" e  p/ I( s' x# K) Z1 }
  21.     /* USER CODE END SysInit */
    ) F+ f/ w' l6 w3 K
  22. 6 T  J# J; r9 T9 T/ s: c& z7 i
  23.     /* Initialize all configured peripherals */) Q0 S. W, g; L/ P/ ]% G( ?; y
  24.     MX_GPIO_Init();
    6 K& H1 K$ i0 p0 W
  25.     /* USER CODE BEGIN 2 */
    9 l* \' H% ]8 d! Z$ G" Z
  26.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);    //默认LED1、LED2、LED3、LED4初始化点亮
    $ r, @5 f  r& d* \" l, s- v% t# R0 V
  27.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET);1 p& ^" u7 c5 d/ H/ K4 b
  28.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,GPIO_PIN_SET);
    + I, M4 m% ^- v. ~" G$ ]
  29.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET);
    * K, k* ~+ |* D: f, H0 M- ^  _! H7 N
  30.     /* USER CODE END 2 */$ Y. @: `9 y+ ?# v* E

  31. : Z3 j. @1 t5 k# z! i; u
  32.     /* Infinite loop */, s4 _0 B. q  `1 f+ f) t2 z
  33.     /* USER CODE BEGIN WHILE */  r/ ?& r, M# e
  34.     while (1)8 s  j9 J! I$ ]! g5 }- J  x) W7 b
  35.     {
    2 c5 A* `/ W3 v. v
  36.         /* USER CODE END WHILE */2 `3 r; q( p" C: ~5 X( H! [5 P

  37. 2 K2 W  g+ T- L. Y5 A$ H0 D
  38.         /* USER CODE BEGIN 3 */
    2 h2 z  }* Z2 O  I) d, r. f9 T1 l
  39.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)                                //读取按键输入4 v: o& D6 U' \+ [
  40.         {0 f# X* J" \9 t3 _
  41.             HAL_Delay(200);                                                 //软件延时200ms- M0 S9 f$ y$ n" k7 c
  42.             if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)                    //按键反转LED,熄灭和点亮切换) G% S- v/ z/ S. W% w7 j
  43.             {7 f& G  Y( Z  C5 b% g8 K5 \
  44.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);
      l) @1 S+ f: o; f
  45.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_1);! S) _3 U: o. v
  46.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_2);  j, P5 O: x  A2 Q& ^, X5 z
  47.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_3);
    7 P: s, F( I! M) j7 A- c
  48.             }
    2 c5 ~0 a, c! M& W& [/ S& W
  49.         }1 e9 J1 Q" R7 K) @) ?
  50.     }% Y6 c0 a! r1 S, C
  51.     /* USER CODE END 3 */
      e  H/ b' k# P" Q% O
  52. }
复制代码

) ~7 L/ U1 c5 {+ U/ D: `. i3、设置编程仿真下载模式4 L9 F6 w& |2 b) a' ^+ x- U* b
(1)选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。
5 i0 X% j' V7 ^& B/ }% G$ |( w- _2 T7 y( q4 h) Y- @0 r( t  j- O
edefb6b9a2a14be3b1221ad6d5c7a8a2.png
( H% P+ \$ R7 }( i' T4 f* d% g​​
" D( d9 n6 O* W2 j. ?(2)点击编译,完成后提示“0 error(s),0 warning(s)”。3 X3 X! u  L: p$ R# Q" b! X5 n

  r( J+ d1 |  Q8 `7 l$ G; @/ J
e0b7e3e353b345a7987fe5f821de2dda.png 7 ?$ L" f* Z1 k9 V, O6 {
​​* x! y, {4 T3 F
(3)点击Download(或者快捷键F8),即可下载程序。
" ]$ p  Y/ l8 ]& p! Z! O
$ V* e# P2 \" Q; S) U  }
eb3f250f19e44862a7df80c2492fcd01.png
, ?- v: V5 R/ E4 m+ a​​& R: u# p' N& `  H4 F- Q

1 U9 o$ K* s9 W5 ~. |% i8 U# Z' }7 |(4) 如果下载程序后,没有看到LED1、LED2、LED3、LED4点亮,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。
/ }/ f, e- t3 m; i6 a' ]$ J) z- S% k
* R8 F+ j4 c# V8 I
9f8aa1a4e8f04041bcf5cb183facd100.png
6 j! }  p) H% B2 ^$ \: D5 s
' A) A3 K) U: \, H, R- c
& A7 Z2 K8 X% T/ ^, G2 `  E# u/ U0 x
4、按键输入实验效果展示
% s, S: u! T# \& W1 b        程序烧录到开发板后,即可看到LED1、LED2、LED3、LED4初始化后常亮,按下侧按键K1即可实现LED1、LED2、LED3、LED4点亮和熄灭的反转切换。3 Q: z+ m+ n( B1 Y4 Q: ^
————————————————
9 i9 @' I  C# U$ O6 w' G版权声明:智能小屋ZYXC( z' x2 {! W- D& ]0 j  w- U: D- K; h! ?

: e. o/ k+ q* C) V% |8 C, G7 g- I2 \6 `+ I* c
; T, R2 e: R( t6 I8 P2 X$ S8 J
收藏 评论0 发布时间:2023-1-14 18:52

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版