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

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

[复制链接]
STMCU小助手 发布时间:2023-1-14 18:52
一、开发板平台简介:/ 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
bb91345227434ee7a43a34bf3fe366e6.png ' c& ~  O/ L# ], f. ]

2 e& y6 Z1 B! g( d  S5 {
929c0cce04aa4115a8623703982bf3e1.png
# 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) ^
0f177691c5814f16a508bcfa747f87ac.png 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
e923ad767b8448b7ac37c4ed693724bd.png
/ 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
0aef905d6dd649c1b1a14e4e3929cce6.png ; 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
2399170347904e959c855fefd5877f84.png # 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
d74d2fdc60c9440483e2b7cf8d928e7f.png ' 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
7b80345238d74bea82ce70e1a348f7b4.png
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
3f65707eca104663a3dede6d25dfa961.png & 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
72119b971f62410fa8344f7f9fb9f389.png
6 s$ F3 G  w6 F  B8 ^) M
1 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
492907c1e71149819adbaee4516a2af4.png 4 E) X; d# r! T4 R8 [

8 \6 x5 U( M$ k" V: ?2 q: J
c75d3f10ba2e427d9c1a10fad9bf5471.png
$ 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
38ff4b80e1c5495ba3076a5158fd91fa.png 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
dd6637a0885540099c753cda683008fb.png ( `& J- I' P8 x2 f- U* Y% \$ K
100c273590ec423dbc03c83cb5bc088f.png ! 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
f3ecedd9323f4463b69539906b3c1199.png
: 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* ^
efdb616174f54925b6eac31109f227b5.png
2 `: t$ b9 i2 W- Y/ R7 ~​​) b9 U5 U8 `% \
41c3f2716e4e4eda8f62fa3a1d871322.png
( ^( 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
8eaa7d0babea40ee93f158481a6ee471.png
* s, H- D9 K6 Z6 v5 C​​
- J  U7 C: l, |- ](4)工程代码生成成功。
, v0 S. |* h; K+ `( o: v7 N7 y3 j% T  j1 L
e8f46d59a1fb4af589feb613fdff17b4.png
% 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
c4de30b9c6ed4cfba7c8581501244b42.png
% 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
7ce423ed75a64c7c834a1547b2b07f80.png
+ G* j- Q( v0 i& I" R4 X8 c3 F1 F. L* w
(2)main 函数代码如下所示:
5 n/ {' |* d/ X4 o
  1. int main(void)
    ( k" U) L9 ~+ p3 }* R  A: C3 f
  2. {0 E" `( J6 Q* R) t& ~; ^  q# G+ h
  3.     /* USER CODE BEGIN 1 *// d! s( d3 D( s6 M- s" ^. @2 @4 V
  4. ' Y) y- l; i. |: E
  5.     /* USER CODE END 1 */
    8 D4 I9 v' d# t' J. q

  6. ! x+ A+ W* ?- n% B, K. U: o
  7.     /* MCU Configuration--------------------------------------------------------*/
    & Z" H8 _% N8 L& h3 ?

  8. ' Z. s+ {( s9 n4 _' H
  9.     /* Reset of all peripherals, Initializes the Flash interface and the Systick. */) F' @: e7 U2 [, C: u2 C
  10.     HAL_Init();3 V% g# P/ N6 K3 m4 N
  11. - `( y, U5 `0 L6 T% f3 A9 X7 p
  12.     /* USER CODE BEGIN Init */. v) E# U+ [0 P4 ^6 X$ Y9 Q
  13. $ a9 j/ r3 u7 ~; z& G4 u- N
  14.     /* USER CODE END Init */
    & n4 ~  }9 D3 b$ d5 ]& a$ q3 Q

  15. ( ~3 X2 `# j4 [6 ?/ t. J
  16.     /* Configure the system clock */2 S6 j: S' h& W+ O2 i, o5 m( X+ ]3 _
  17.     SystemClock_Config();
    5 ]& @2 X) M4 ^  Z2 G4 f: L2 U
  18. # V3 k9 c4 N& c! U& k# l
  19.     /* USER CODE BEGIN SysInit */% k% n! C& {4 j' P3 u
  20. * M# M: ~% Q) n- y: t3 I
  21.     /* USER CODE END SysInit */
    5 u% Y$ y7 s9 e7 k  \! i
  22. 5 j5 H2 A9 X1 @2 {+ a& d
  23.     /* Initialize all configured peripherals */
    ' G4 Y  U1 n' o4 }8 z+ j: ~- e; U
  24.     MX_GPIO_Init();0 F3 A, U4 ]  @; n* r" {5 A% H. N; F( t
  25.     /* USER CODE BEGIN 2 */
    3 j6 m5 o; i/ g1 }
  26.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);    //默认LED1、LED2、LED3、LED4初始化点亮# |1 W) w: f+ {  d: Z0 j
  27.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET);5 x* q* v9 R8 i6 Z) \) _) ?4 k
  28.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,GPIO_PIN_SET);
    # N% {5 x( X7 f# L+ N7 w0 ?" L; x
  29.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET);- z- i9 g4 w) j( R0 [
  30.     /* USER CODE END 2 */
    ; J# B" {/ Q. G

  31. 9 S& G8 ?2 j3 O( K  n+ t1 N
  32.     /* Infinite loop */
    # ?. E/ ~! a& z- f0 t2 L0 T  Z
  33.     /* USER CODE BEGIN WHILE */* v8 q" @- g/ J4 b6 X% X4 S0 }0 ?
  34.     while (1)
      w! ]1 X0 ~3 _5 N' X
  35.     {& d" f) c5 P% _
  36.         /* USER CODE END WHILE */
    & R* t! Q2 K4 u/ d. Z1 @
  37. + Z  \5 Q  W3 L
  38.         /* USER CODE BEGIN 3 */& [0 a$ G3 N6 H, X9 [6 m
  39.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)                                //读取按键输入  m% S2 ^4 _1 _" z7 b
  40.         {
    ) u; ?8 ~& G# I$ t" {
  41.             HAL_Delay(200);                                                 //软件延时200ms
    3 G- X8 R3 h9 s7 V7 x( }
  42.             if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)                    //按键反转LED,熄灭和点亮切换! v5 q( ]6 C6 u" _' _
  43.             {
    / [* T1 }6 d) q& z1 d% ~8 E; ^
  44.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);4 e9 r* s1 j9 P5 {& |, J# V+ R
  45.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_1);/ O4 _" |( p- W7 a
  46.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_2);
    ' ]# w$ z) b2 ^0 R6 c
  47.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_3);$ m0 D2 ]: ^% w: C
  48.             }8 D) q% h' [! {: }' T1 w# A0 v; ]4 D
  49.         }
    # f+ G9 r" x* T0 N' }
  50.     }
    1 @. D+ b7 K+ v4 K8 n/ x
  51.     /* USER CODE END 3 */
    ! n* i- e8 t  }) E5 H5 n
  52. }
复制代码

! 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' }
edefb6b9a2a14be3b1221ad6d5c7a8a2.png & }  _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 |
e0b7e3e353b345a7987fe5f821de2dda.png 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
eb3f250f19e44862a7df80c2492fcd01.png
/ 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 `! {+ |
9f8aa1a4e8f04041bcf5cb183facd100.png
, 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
收藏 评论0 发布时间:2023-1-14 18:52

举报

0个回答

所属标签

相似分享

官网相关资源

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