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

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

[复制链接]
STMCU小助手 发布时间:2023-1-14 18:52
一、开发板平台简介:
) X1 e4 T' a+ \! b1、开发板资源简介
: q! B# |! t# a% R
(1)开发板主芯片型号:STM32L431RCT6
" [; P, N9 _, ]5 ], E; o(2)开发板主芯片封装:LQFP-64_10x10x05P0 U4 c- _" k! ~/ k! \: o
(3)开发板主芯片内核:ARM® Cortex®-M4
( {1 i# P. N/ }# W0 V* u(4)开发板主芯片主频:80MHz5 E7 N0 h2 ~/ u* K
(5)开发板主芯片Flash大小:256KB1 j4 W) b) z3 g. A# a2 S
(6)开发板主芯片RAM大小:64KB
# \' J% U9 S. s
) m0 C& }( ]& V/ _# Y
bb91345227434ee7a43a34bf3fe366e6.png # g$ g3 J+ z( S; u  }

8 i: C9 W( p+ q' [; |
929c0cce04aa4115a8623703982bf3e1.png " b' o# {( k# i. e. P1 I' d
" X' z) Q5 {1 T: d% |4 q
2、LED灯资源
$ g# i% }. m, r& _7 f. h2 m
(1) STM32L431RCT6开发板共5个LED灯资源,其中一个红色LED为系统指示灯,指示开发板供电系统是否正常,如供电系统正常,红色LED为上电常亮状态,硬件原理图如下图所示:
3 M- ]3 t5 h7 C
* h: X# P# `; N$ P6 [
0f177691c5814f16a508bcfa747f87ac.png
2 f, Z' j: \# E; o% ^( k8 g& ^. i3 u
) C+ J, ~. c4 [7 O! E

* L- q; m; y4 l2 `5 ^* N6 i8 Q(2)其他四个LED灯为黄绿色可控LED,高电平点亮、低电平熄灭,计划用LED常亮验证看门狗的作用,硬件原理图如下图所示:9 ?' Q9 l. S  Q- z
! U8 F2 x' A% ]; M6 F# w" _5 H
e923ad767b8448b7ac37c4ed693724bd.png 8 {8 s. v, d! o4 A- |

. n$ W; F" F  j$ ~7 y1 A- `5 Q5 K# N# s​3、按键输入工作原理
. p# x) U% W% R/ T5 x按键输入原理:读取GPIO引脚的输入高低电平。硬件原理图设计中通常会加入100nf的硬件消抖,以及ESD二极管防止静电损坏。
( r+ W( X' m6 x- r5 M
+ q) z, M' D# f* `$ ]0 K9 x$ e2 J如下硬件原理图所示:默认PA0输入上拉,按键按下后高电平转换为低电平。
- I. w+ ^6 I4 ]$ m8 ?
7 @, D' |# P' ^( @  X* e& G- Q$ h
0aef905d6dd649c1b1a14e4e3929cce6.png
2 |( G& W# [6 e* }2 N5 L: l# s5 k& K. a' i1 k) C' N4 c
  二、按键输入实验过程1 c: G8 }# A8 K* [  W& r
1、新建STM32CubeMX基础工程4 X! _! j+ Z, Y, [1 `
(1)打开STM32CubeMX,点击“File”-->"New Project". p8 Z' A7 W5 O) C) N8 T
, M8 T. C% X5 A& @$ u5 O5 p) S/ I
2399170347904e959c855fefd5877f84.png
: _  m9 C# h' J. r- R

9 |# n( _; l  L& h) }(2)等待打开主芯片选项界面(大约1分钟时间)。
) w  Q& s: C4 b2 T
5 a2 g" T* F) l. b
d74d2fdc60c9440483e2b7cf8d928e7f.png   Q% A3 V" t. M1 V0 ~

/ a$ K& {' ^& X/ x' f7 ^(3)昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处选择STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。
! O0 T) Q/ Y2 O/ _* P2 y, }  @6 {: \) I; E# K; g
7b80345238d74bea82ce70e1a348f7b4.png 6 J  p  B2 Z  ~3 I
9 P2 a+ V8 R- `7 m; l- f
(4)选择时钟源。
3 j& r& O, c! `! U2 b2 e  s& w. C, {4 }0 P
(1)因为开发板上有8M外部时钟,硬件原理图如下所示,所以此处选择使用外部高速时钟(HSE)。, x& A5 b& y+ C) B& d( D4 \

' z/ B3 v8 U+ j' p5 ^* Z( x0 V& n0 q
3f65707eca104663a3dede6d25dfa961.png
+ ^6 N; d4 m  l- F' n1 U6 [
1 z' I2 J( A  m* l" s(2)因为我们没有用到外部低速时钟(LSE),此处不做处理,如下图所示。2 n! P0 s- y- y- p
! {( |  @6 u: H
72119b971f62410fa8344f7f9fb9f389.png 2 d: l7 [% s3 @7 Z. B) L6 Q# m4 ?
2 h: F! b+ L8 V/ ]; X) f* M1 M
2、配置GPIO控制LED, ~  x1 i$ i( E5 {
(1)查开发板原理图得,LED1、LED2、LED3、LED4的控制引脚分别为:. _$ N, J1 a! ]' _, \

2 [( O6 W: ~! L  C9 m4 ?/ ~: WLED1——PC0
* r3 ~* ^) `: P) D+ i$ O/ e, MLED2——PC1: D" u# R. G3 @' c4 p3 n
LED3——PC2
9 j6 u* s# C8 ALED4——PC3
/ B' P) ^( }+ s! f# ]* O
% d, v5 s. o( w4 M/ ^: H) @(2)配置LED的控制引脚为输出,输出频率、输出方式默认即可。& Z+ r3 b. q- C8 o- D

! _% N( E9 c# p& K鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。
! L9 `8 Z6 `9 V; ?% t) N& U鼠标左键点击PC1,选择“GPIO_Output”,表示设置该引脚为输出模式。
2 I. N' G! S& G* ^鼠标左键点击PC2,选择“GPIO_Output”,表示设置该引脚为输出模式。' |' }) z3 {* e' @4 f" R
鼠标左键点击PC3,选择“GPIO_Output”,表示设置该引脚为输出模式。
$ K9 F$ v2 j* \, d3 |7 z+ ^% l, M
2 F& V2 J$ ]. X1 m
492907c1e71149819adbaee4516a2af4.png
" B! m. A0 b: }6 [7 o# u- [' u+ i
c75d3f10ba2e427d9c1a10fad9bf5471.png ) H: g& ]5 n% @: Q5 ]3 @; k
$ K4 K6 i9 ?# G3 o
(3)也根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。, D3 |9 w3 c+ U5 Q$ [9 ?

9 A/ b& L; z9 p* E  v7 |$ u3 T
38ff4b80e1c5495ba3076a5158fd91fa.png " i: _5 j- t: Y. }, }3 s

$ v8 ?0 o/ K6 K; s​​3、配置PA0按键输入模式
9 T* [: f! A6 C# I. X  E如下图所示:右键点击PA0,选择GPIO_Input,配置PA0按键输入模式,默认内部Pull up上拉即可。
( ]- P. A: h+ B6 `& L5 U/ \( f
  m/ m3 s, C: N; {3 `/ C
dd6637a0885540099c753cda683008fb.png % w- O: }; l# J4 Q  ^
100c273590ec423dbc03c83cb5bc088f.png
1 a. y9 ~% [% c- a$ C( n1 l3 Y- s1 s, |, l# u6 O, z

. l8 m7 w2 e* B: @) d1 V) U 3、配置项目工程参数, z  g& z  ~9 V5 W
(1)配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。0 t5 ?+ O' ]6 C5 i

  {. g* o# K. `5 D" ~+ G
f3ecedd9323f4463b69539906b3c1199.png
# \& p+ G; I  b' V8 p: N: g) N
5 M- k2 n" \/ i6 [) C8 I
4 C: y+ i, h2 S4 O8 P- C
(2)完成配置工程。. p0 s8 B# A) Z( E! {# x
备注:需要注意代码生成过程中的继承关系,如图所示:需要保留开发者自己编写的代码时,请根据配置设置,不然生成代码后会删除自己编写的代码(从这个方面也可以看出开发者备份自己的代码是多么的重要。)2 X7 P4 J1 }5 W! @. I$ z2 \

3 \, V; D. W- U8 `3 M4 H6 V
efdb616174f54925b6eac31109f227b5.png
9 V% K! k3 o1 D2 x) b) p2 ^& `$ n​​$ u3 O0 t% |3 r& r
41c3f2716e4e4eda8f62fa3a1d871322.png 4 }( h* f# k* T. g. `

: o3 a+ \: z7 p1 \1 k' g0 R& v(3)生成代码。2 T$ o6 j! ^! Z* u3 ^
备注:使用Generate CODE生成工程代码前,请确保文件路径无中文,否则会生成项目失败。
0 j( e' z, {* j6 L( w  i6 G0 _4 R, {+ O
8eaa7d0babea40ee93f158481a6ee471.png   v3 \4 q/ f7 i& I! Y
​​
6 k( Z1 m" K8 A& T(4)工程代码生成成功。2 C; l& o6 o; v: E
+ O. E% O- u2 e( f6 V; Z" t
e8f46d59a1fb4af589feb613fdff17b4.png
6 Q8 e2 _4 o0 f% [' C  I+ w- Y9 E& s) \3 ~- b# U1 M
三、在KEIL 5中编写代码2 |2 d1 F2 W8 Y0 T( O
1、使用KEIL 5(MDK)打开项目工程文件1 G2 a! C$ ^' j. S1 o  _
源码使用说明:使用前必须把项目工程复制到无中文路径的文件夹下使用。! P$ r( j% h" ]" V( B4 [1 f
(1)找到刚才新建工程的存储路径,安装项目名称,打开项目工程.uvprojx。
. b( {5 X8 E. M* \+ u2 C' i" w
$ h. Z" p9 D8 k- M0 q0 V9 R! h
c4de30b9c6ed4cfba7c8581501244b42.png
7 O" h- S& \! F# n/ e  N
% F& e) B6 i, k+ h; u2、添加按键输入验证程序
( w6 c8 L) X) o( t0 h(1)main.c文件中,初始化LED1、LED2、LED3、LED4默认为点亮,并在while循环中添加按键输入控制程序,如下所示:实现按键输入后LED1、LED2、LED3、LED4点亮和熄灭之间反转切换。4 G' J2 ]  X' }' X& K  ~. S3 z

/ h* K' ^0 t% H# T, t备注:自己添加的代码需要在 /* USER CODE BEGIN 3 */和 /* USER CODE END 3 */之间添加,否则STM32CubeMX更新代码时,会造成自己添加的代码丢失。" l( l/ n1 R) E5 D. C: C

, s4 \+ I! p! d+ Z5 I9 A' U/ q
7ce423ed75a64c7c834a1547b2b07f80.png
0 b- W) V9 z, e/ p/ l8 _. O9 z8 _* B; M1 h6 B* Z
(2)main 函数代码如下所示:- g5 A$ j. X4 v4 F3 Z5 p/ _" C9 i
  1. int main(void)
    " a# g0 {8 k+ q1 P. y
  2. {: ^$ B) v/ b& o9 `* Z+ J5 P
  3.     /* USER CODE BEGIN 1 */7 y7 I: x' u: E

  4. 1 P% h' ~2 S9 A+ D5 A' ~
  5.     /* USER CODE END 1 */7 s& |. }4 D5 t# `' U' k0 G5 M
  6. : d( F" e+ }5 ]/ n" i
  7.     /* MCU Configuration--------------------------------------------------------*/
    9 e6 u7 s% y' t! ^" p
  8. 5 r" b  ?+ H$ J7 R, Q
  9.     /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    : }1 r: \4 N! z
  10.     HAL_Init();
    7 j. S$ M3 y  o; `  Y2 J9 t* v
  11. 7 l9 y, B) i& e9 i2 r5 H
  12.     /* USER CODE BEGIN Init */! I! K% v$ u% j9 w1 h6 i/ j
  13. $ Q1 Z' I1 N) p. M
  14.     /* USER CODE END Init */& a5 S* E$ e5 B" X* C

  15. ) W' j( G; f" }* ^! r8 \
  16.     /* Configure the system clock */
    % X4 Z5 J0 l- Y/ a' E& B# I- }
  17.     SystemClock_Config();
    * z- t  g. k# @( b$ [/ M, Z

  18. " A- [* y( J$ l7 h# ~
  19.     /* USER CODE BEGIN SysInit */% H) U* t* W' ]+ b/ Q- @

  20. 5 l+ Y6 R' G9 d* q0 i& s/ ~! x
  21.     /* USER CODE END SysInit */
    1 \% k& R  n  |  [5 r5 _9 e/ e
  22. : \' ?$ C0 \3 c/ ~2 |: D
  23.     /* Initialize all configured peripherals */6 L9 n9 S& [/ S5 S) b1 C
  24.     MX_GPIO_Init();
    $ P# {4 ^% g. t$ G3 K4 z
  25.     /* USER CODE BEGIN 2 */- k6 g( j& h4 I- r; X
  26.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);    //默认LED1、LED2、LED3、LED4初始化点亮
    : b& {! C+ f. e
  27.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET);
    7 A6 p8 `6 X9 X# {$ {
  28.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,GPIO_PIN_SET);
    ( s( N; ]+ ~/ z. r: f: V. G. Q
  29.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET);
    " a4 |. W% H, ~4 d
  30.     /* USER CODE END 2 */) K/ ^4 V; s/ @: i3 p1 L

  31. 7 u! Q8 x$ z* ]8 j
  32.     /* Infinite loop */
    5 q: N/ ]6 a" F9 t7 P" H! a( s9 C
  33.     /* USER CODE BEGIN WHILE */, q6 d; T. z4 u/ q1 F: Z  N! ?7 i0 E
  34.     while (1)8 |2 K6 B) D- z
  35.     {/ Z9 M+ X( G/ r
  36.         /* USER CODE END WHILE */
    2 P8 p( U6 F* a7 q7 x: t

  37. + _( X; _$ C2 O9 R9 e
  38.         /* USER CODE BEGIN 3 */
    % }  t+ ?0 B5 x4 r2 t* }
  39.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)                                //读取按键输入
    8 G- n0 I8 \" x% n* d- {
  40.         {
    " q% N$ N" W/ s$ w$ v- H
  41.             HAL_Delay(200);                                                 //软件延时200ms6 E4 g  J$ z% R9 x. G7 U! ^/ A; j
  42.             if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)                    //按键反转LED,熄灭和点亮切换" P; T8 }# i4 C0 f! S3 P' w, Q2 D
  43.             {
    , {6 [2 Q( I# t5 n( G5 `' R
  44.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);) d9 w/ a, I' d: r
  45.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_1);
    5 M' ?( Y& c% }8 |1 D  a
  46.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_2);. u/ o$ C' t, c7 M/ }" E" Z, u
  47.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_3);1 V, B9 }( x8 d( K5 q3 }- [
  48.             }
      v* l+ R& I! v+ r$ z
  49.         }
    2 s  |0 v& P8 d
  50.     }, Q8 r( q! s* r8 h: X$ s4 ]1 L
  51.     /* USER CODE END 3 */
    0 c1 b9 n$ M( y4 Y8 ?
  52. }
复制代码

3 w5 h4 I. y1 u0 q4 h3、设置编程仿真下载模式4 D# o! F2 o1 q
(1)选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。
7 m; I! J. e5 d1 O1 k/ s0 \' i2 b1 g6 `+ u
edefb6b9a2a14be3b1221ad6d5c7a8a2.png
" W' u' U2 u! M: \( O+ f: p​​
9 b" j- V% H% }8 S2 `3 U1 r; l(2)点击编译,完成后提示“0 error(s),0 warning(s)”。) D# ^; k: x# a; f; m3 v

0 D( d/ k7 `) F4 ~7 z" ]
e0b7e3e353b345a7987fe5f821de2dda.png : I7 u3 R/ W1 u" f( E6 _
​​% I' z7 `9 |  D1 C) l
(3)点击Download(或者快捷键F8),即可下载程序。
9 m& S2 n( G% T8 ?3 G
$ B& b+ J8 W( }0 |# x0 W
eb3f250f19e44862a7df80c2492fcd01.png 0 C/ |5 ?8 j& F) G+ H
​​/ f+ w( U+ u/ J

  f, j+ E: H- s(4) 如果下载程序后,没有看到LED1、LED2、LED3、LED4点亮,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。
) S2 r1 {8 [5 O3 l- y  Y9 n6 O
' |7 `3 z2 p% J4 e) g
9f8aa1a4e8f04041bcf5cb183facd100.png , x) \: j6 [! M0 R
​
; C- e, C! s( L% R2 F- p
( v! ?0 J* O8 N2 J
4、按键输入实验效果展示
5 M% l2 x, U+ P/ o        程序烧录到开发板后,即可看到LED1、LED2、LED3、LED4初始化后常亮,按下侧按键K1即可实现LED1、LED2、LED3、LED4点亮和熄灭的反转切换。7 a- B. B0 `' }* x! k% w
————————————————
5 w2 K* P+ a3 S4 Z6 m; `( w版权声明:智能小屋ZYXC
# [. q" [. r* ]3 D' `
" `, _' a4 V* ?7 w# o: g8 ?- a7 Z+ c  o8 a0 h' r( |6 Z. W2 }- S# H5 X

$ [, i6 l: k- b0 D. n3 C! @
赞 收藏 评论0 发布时间:2023-1-14 18:52

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版