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

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

[复制链接]
STMCU小助手 发布时间:2023-1-14 18:52
一、开发板平台简介:
) A. h1 d% `) ]! v4 r3 o1、开发板资源简介
+ G: L! F; }. ~3 w( Y
(1)开发板主芯片型号:STM32L431RCT6( H1 V) v0 N! G' M8 V$ o
(2)开发板主芯片封装:LQFP-64_10x10x05P
6 m1 p$ K6 F3 c+ n9 W0 T% ?(3)开发板主芯片内核:ARM® Cortex®-M45 S& r# g* `4 F) ?4 i
(4)开发板主芯片主频:80MHz1 p: U. i0 K& d
(5)开发板主芯片Flash大小:256KB5 Z) b, k  K; G) V, C" O
(6)开发板主芯片RAM大小:64KB
# A, y( h6 ~. |6 J3 z3 R$ d5 R. q+ |: e0 h) l$ {
bb91345227434ee7a43a34bf3fe366e6.png 2 `  m6 |. q) E5 ^* P- w6 q, t
* Z( r  I5 W5 ^1 O  G1 V6 L& Y/ D
929c0cce04aa4115a8623703982bf3e1.png
% d6 z) V0 E: E  W* Q0 m) W- J2 {. G! W
2、LED灯资源

- P0 J' ^7 G  r. |  d$ C. k(1) STM32L431RCT6开发板共5个LED灯资源,其中一个红色LED为系统指示灯,指示开发板供电系统是否正常,如供电系统正常,红色LED为上电常亮状态,硬件原理图如下图所示:, }  W- k' D; N+ A0 K( ^# ^$ h
) i3 e( L  V) I9 b5 d) x
0f177691c5814f16a508bcfa747f87ac.png 2 d, _- H& |# M+ p# h5 L- F$ O3 u% F

  S4 r$ o1 z# C/ c# B2 w, n: B4 m

+ v! n( j* f1 ^  j(2)其他四个LED灯为黄绿色可控LED,高电平点亮、低电平熄灭,计划用LED常亮验证看门狗的作用,硬件原理图如下图所示:+ M7 C5 n" D& c- _: ]5 Q
& s* F! k0 x& Z
e923ad767b8448b7ac37c4ed693724bd.png " E9 u! M" [* @$ [* n- |/ r8 \

$ |. ?6 d( }7 N​3、按键输入工作原理0 D: l! U! I8 d1 f
按键输入原理:读取GPIO引脚的输入高低电平。硬件原理图设计中通常会加入100nf的硬件消抖,以及ESD二极管防止静电损坏。
: a5 q' r% x1 P! U) Z- U8 u( ^
: D+ _2 V! a! Z5 |9 n: R8 G如下硬件原理图所示:默认PA0输入上拉,按键按下后高电平转换为低电平。
6 w% |2 |- Q/ T( p/ C; _4 i
8 c. J4 e0 {: g/ o2 ?: ]& u
0aef905d6dd649c1b1a14e4e3929cce6.png
6 U, c  b: V% d; B8 |- h. J3 P9 J. z. p6 z% {, i1 R( c
  二、按键输入实验过程
1 w0 W* ?+ \% u) R& r9 i* H1、新建STM32CubeMX基础工程
' N( j0 g; \3 `/ z" v' Z5 b7 y8 u( K(1)打开STM32CubeMX,点击“File”-->"New Project"' @% ^/ O0 v7 j* R4 a
  r- @: l8 |. M" i
2399170347904e959c855fefd5877f84.png
0 F. T* _( d, `9 e$ f
. a( _) p5 f/ d' G8 w  r5 N+ i( x
(2)等待打开主芯片选项界面(大约1分钟时间)。4 Q4 n  v6 S, _9 w

6 C& C# j2 y9 o7 v- e
d74d2fdc60c9440483e2b7cf8d928e7f.png   G3 S9 f& \: b. g4 j
2 ]# {- Q5 U! L, T# u1 ]) U  f
(3)昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处选择STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。
7 v6 C1 s* x& y7 Q2 c8 [& r) Y
% S4 \3 o0 h1 w* `1 r1 ^
7b80345238d74bea82ce70e1a348f7b4.png
4 J( v1 y) k0 _4 E8 @& ^9 ~# l6 H; y  p; x! F3 |
(4)选择时钟源。6 N' H2 R6 h9 _' E4 I% c9 H2 l( H, ?

5 b* i! W1 d; U4 J: y(1)因为开发板上有8M外部时钟,硬件原理图如下所示,所以此处选择使用外部高速时钟(HSE)。
3 _+ w" |  [2 W2 K* I1 ]5 W5 _& H. Z% N8 V
3f65707eca104663a3dede6d25dfa961.png 7 n/ ]3 w' \# c% c4 \" N( U

5 Y( N  D$ V0 p  E- B(2)因为我们没有用到外部低速时钟(LSE),此处不做处理,如下图所示。/ s) K! p8 \& e7 b; }$ K% M$ e

. c$ n* h: Y6 Q9 w: n
72119b971f62410fa8344f7f9fb9f389.png 8 m4 Z' e0 J9 K- B; d3 e) t: M

; K  @5 C3 H. D5 V2、配置GPIO控制LED% j# x* ?' J3 K. ?; l
(1)查开发板原理图得,LED1、LED2、LED3、LED4的控制引脚分别为:; |. j  W. D' W% T! f$ ]

# S; a: I; w8 r/ ~# oLED1——PC0# {$ x0 g4 |% t
LED2——PC1
7 k. F4 h- U% f5 ?! vLED3——PC2
3 Q" V' J" Y2 Z/ ^4 vLED4——PC38 O7 H" m" E0 g! ~3 _! |. u4 a9 h
8 ^3 L6 o( j8 A
(2)配置LED的控制引脚为输出,输出频率、输出方式默认即可。, w2 T0 A; E3 o+ F9 O. ~, k& A
# P0 O/ Z: t2 V& ~. R# d$ \
鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。
. _  Q0 u7 O" N$ d- g: _鼠标左键点击PC1,选择“GPIO_Output”,表示设置该引脚为输出模式。
7 t, G6 H3 V) I- y+ U. L鼠标左键点击PC2,选择“GPIO_Output”,表示设置该引脚为输出模式。
6 s+ \5 l% V! Z: m3 e( M" D, K6 M鼠标左键点击PC3,选择“GPIO_Output”,表示设置该引脚为输出模式。
; v7 Y) n1 ], W0 `- y) c4 v4 |: s6 J! b, t& }
492907c1e71149819adbaee4516a2af4.png
- {- I% b! |/ u& |
+ a% D# ?, R% a
c75d3f10ba2e427d9c1a10fad9bf5471.png
. O+ j- P6 x% Y& \2 d* W- k
2 _0 t* ~; g) i& N
(3)也根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。
/ a1 n" Q8 R2 R" _: T
3 z8 P& n4 ~. m* W8 q. d- [
38ff4b80e1c5495ba3076a5158fd91fa.png ! q% x5 J4 Q# N) h/ a. s" \! G

7 R6 p! r% Q0 ?​​3、配置PA0按键输入模式
7 b- j: ~2 v9 C. |& B0 }如下图所示:右键点击PA0,选择GPIO_Input,配置PA0按键输入模式,默认内部Pull up上拉即可。
% b* J4 T" Z- w+ e1 p$ Y& Y8 q2 l: {1 q7 w
dd6637a0885540099c753cda683008fb.png " {( K: a0 A5 Z' z) y, O' }3 V9 k
100c273590ec423dbc03c83cb5bc088f.png 1 h2 E& B. W5 D
1 x9 [8 f, p. T
) ?2 }! I7 o; x# E7 M
3、配置项目工程参数
% j1 U' c, f7 C. ~* Z( [! R(1)配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。
, X% C. p5 }5 v* g
( H5 V( i/ c. T/ c* U4 [! b
f3ecedd9323f4463b69539906b3c1199.png 2 K0 @1 c$ v* ~, {- C* Y" v
: h' B$ [+ m# y$ |/ B; k

% [+ j* e5 Q/ s(2)完成配置工程。" j( q2 Q# S1 T5 V- r
备注:需要注意代码生成过程中的继承关系,如图所示:需要保留开发者自己编写的代码时,请根据配置设置,不然生成代码后会删除自己编写的代码(从这个方面也可以看出开发者备份自己的代码是多么的重要。)  m7 H. m; t1 H$ _! G3 ~

' }6 Z9 W9 I( m6 s- I- n4 @
efdb616174f54925b6eac31109f227b5.png : B4 ~- ~1 `5 E  ~
​​
6 S* R# @  V( e% C$ R& T 41c3f2716e4e4eda8f62fa3a1d871322.png - u0 d, \5 J2 a8 m
% H  Q- d, {# A* N! ~8 H. B- U/ \
(3)生成代码。
. p0 Y' v1 `( h1 ^备注:使用Generate CODE生成工程代码前,请确保文件路径无中文,否则会生成项目失败。3 F. M% E! @- Y* ~' Y$ D0 i. e
$ s- B. Q& I! r  B, y; j$ _5 Y
8eaa7d0babea40ee93f158481a6ee471.png 2 D/ v* ?9 X5 I
​​7 n* g' O# [+ x# a" I$ s& V: W
(4)工程代码生成成功。
% h* j: c+ ]4 Q2 r2 `0 S  r* j3 m/ ?* g& i
e8f46d59a1fb4af589feb613fdff17b4.png
( n3 d6 r' y% n5 M+ x, V& Y3 d6 L
6 q$ w4 r, I& ?, R7 S 三、在KEIL 5中编写代码# Y* {; a: C2 g
1、使用KEIL 5(MDK)打开项目工程文件7 @6 {& P: U. o: G# G, Q
源码使用说明:使用前必须把项目工程复制到无中文路径的文件夹下使用。3 M0 F. ^4 q& f' M0 @
(1)找到刚才新建工程的存储路径,安装项目名称,打开项目工程.uvprojx。
' ?) H; C3 u5 L9 F5 x5 M$ K# K/ P1 z4 B; p
c4de30b9c6ed4cfba7c8581501244b42.png ' e4 t! i- }! E$ Z
# |  N5 T; Y! n3 x! L
2、添加按键输入验证程序; p/ X1 w6 b$ |& C* g& {( F/ g5 X
(1)main.c文件中,初始化LED1、LED2、LED3、LED4默认为点亮,并在while循环中添加按键输入控制程序,如下所示:实现按键输入后LED1、LED2、LED3、LED4点亮和熄灭之间反转切换。% O$ C0 x' m5 Q& ~& h# [8 U

4 H; }4 g) I7 ]3 U( }) T! h备注:自己添加的代码需要在 /* USER CODE BEGIN 3 */和 /* USER CODE END 3 */之间添加,否则STM32CubeMX更新代码时,会造成自己添加的代码丢失。) N2 ?$ B( o! s+ w$ x% W4 W) n4 j' B
- q  N' i4 M4 m5 K5 l
7ce423ed75a64c7c834a1547b2b07f80.png - r. G5 r2 {' C  P. v
/ m8 c3 c. b" N+ g
(2)main 函数代码如下所示:) |6 z3 C% U* g: o6 r* u) `
  1. int main(void)5 x6 o. j4 E/ J$ M7 u
  2. {. _2 P! ]+ R% |% T8 F
  3.     /* USER CODE BEGIN 1 */
    1 y) V, Z- w: r
  4.   w1 f. M; y( _
  5.     /* USER CODE END 1 */
    $ k, |6 u' [/ F: ?

  6. # l' Y9 f1 Y& s6 k) o/ B/ c8 C1 S8 Z
  7.     /* MCU Configuration--------------------------------------------------------*/
    & ^, l' _! e& Z2 L
  8. 3 g* Z8 V) j/ k6 O2 I3 u# s' x8 g( J
  9.     /* Reset of all peripherals, Initializes the Flash interface and the Systick. */# B% }4 O: \3 r; U4 @/ ]
  10.     HAL_Init();
    8 E0 k9 d0 _7 b7 x* a3 F
  11. - V( h& J4 _& T3 x
  12.     /* USER CODE BEGIN Init */; U% W1 H, S4 M+ f8 r4 ~+ `

  13. ' [9 P, f9 g: ]/ k0 N- B# v) Z8 Y
  14.     /* USER CODE END Init */
    % e9 \5 k, i' z) ~

  15. 2 d+ p. |1 S4 S% O- {) p& X" c- k
  16.     /* Configure the system clock */+ k  O5 Q) Y) K; E- y( i0 u
  17.     SystemClock_Config();
    * Z: `8 [  C2 u7 L

  18. 4 a( w( T/ U7 y1 D- {
  19.     /* USER CODE BEGIN SysInit */
    $ I+ W7 b8 H9 v* [: J5 N* K5 s, ~

  20. , L; J% o3 w- I  ?
  21.     /* USER CODE END SysInit */" z7 U$ P5 {6 a% Z5 z' p# ^/ z
  22. ) l: Q/ E) G% ~. |
  23.     /* Initialize all configured peripherals */5 o1 N: I$ H0 K6 D# [
  24.     MX_GPIO_Init();6 \( U) v2 S3 N2 S6 s' I+ T6 b$ n
  25.     /* USER CODE BEGIN 2 */
    / `  V& J9 p% v- t  E: C
  26.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);    //默认LED1、LED2、LED3、LED4初始化点亮, x1 C3 K7 R% A  l; U$ E6 ^# a& e; ]
  27.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET);. Z, W# J4 B7 D( O% C
  28.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,GPIO_PIN_SET);
    & N% E9 n5 z* L4 ?: d* K8 o6 r2 x3 l
  29.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET);
    " ~$ z2 }  Z% e' |# S
  30.     /* USER CODE END 2 */2 U' _( x+ ~2 N" ~( g

  31. $ @$ p. X( J9 b5 H( p
  32.     /* Infinite loop */" V. z0 [: S+ u0 r* n
  33.     /* USER CODE BEGIN WHILE */
    + F' T) i& }: [/ |- [
  34.     while (1)
    ; R5 d/ j3 t, U: ^/ x% j
  35.     {+ [6 [+ T) K& b
  36.         /* USER CODE END WHILE */9 }: z0 K3 ^2 T3 v
  37. 5 [( [9 T& k* L9 z
  38.         /* USER CODE BEGIN 3 */' {, v1 a/ `7 J2 v/ K
  39.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)                                //读取按键输入
    ; Y' o# u6 ~# e! R2 }  S
  40.         {6 \. d& H5 D6 f( m& i6 `* K1 o. ~
  41.             HAL_Delay(200);                                                 //软件延时200ms
    ( Z; q; u. ^; f/ @2 X. T9 C1 H
  42.             if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)                    //按键反转LED,熄灭和点亮切换
    2 q' Y4 z9 V7 v: T, s
  43.             {
    , L$ a# E4 `+ ]4 W: Z" ?" l4 u
  44.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);
    6 c7 Z8 o4 i- N# b) a, V& Y0 w
  45.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_1);
    1 R! B0 x, t  n
  46.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_2);( v6 z: X* O6 E" l
  47.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_3);. I% N5 [6 I$ b* h
  48.             }
    2 ~4 Q# O7 {! \8 T
  49.         }
    2 n- n) X( }  Z; T8 e
  50.     }
    ) F  g# f) n; F
  51.     /* USER CODE END 3 */
    . c8 O8 a% H+ F. O! S
  52. }
复制代码

/ {/ T& ^2 `" |/ C/ Z- I% O; G& [3、设置编程仿真下载模式3 N8 G+ Z, u3 D$ h
(1)选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。& i2 X) q4 j3 N0 X  R
; Y1 s& F( k- U
edefb6b9a2a14be3b1221ad6d5c7a8a2.png
2 z* T0 v) E) T1 z​​/ D; X  }( ?4 z  N
(2)点击编译,完成后提示“0 error(s),0 warning(s)”。
/ C, g; Q5 ~1 O8 F: m7 S, m6 V- O, Q* d6 l- N2 J  C/ l' g( C
e0b7e3e353b345a7987fe5f821de2dda.png * Y2 ~' e/ a/ S/ Y/ j
​​0 q  T* b0 f( b0 K
(3)点击Download(或者快捷键F8),即可下载程序。
. B5 Y8 _  g5 v8 l- t4 A, M2 U; M9 z$ @2 ]4 X
eb3f250f19e44862a7df80c2492fcd01.png
4 A- d3 k& t- X6 G8 ?8 k​​, ], B$ J+ D; ^% r

* X& N! A1 j$ I" [0 \9 G0 a(4) 如果下载程序后,没有看到LED1、LED2、LED3、LED4点亮,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。) ~* n6 B" O+ O# f) t
# P2 q: a+ h! d- s( g/ T/ k1 t. c
9f8aa1a4e8f04041bcf5cb183facd100.png ( ~5 q  N4 ^, y/ j5 d' p/ _; r% T
​6 l2 t" y/ T4 n& T+ w8 N6 X+ s
$ \, E& z0 d/ H! ^+ @
4、按键输入实验效果展示
" J- n- v1 f& ]        程序烧录到开发板后,即可看到LED1、LED2、LED3、LED4初始化后常亮,按下侧按键K1即可实现LED1、LED2、LED3、LED4点亮和熄灭的反转切换。; `2 E$ G3 l5 I/ o1 v2 D1 }
————————————————
% T1 e& Z$ J( D6 q3 x版权声明:智能小屋ZYXC: B, C' k4 P7 [% P
% V/ e, Y6 K6 n# f' O& |. ]7 F
  Z4 J# \' M' N6 j6 |9 m! J, M& Z

6 A# d/ V% e, A# Y* ^
赞 收藏 评论0 发布时间:2023-1-14 18:52

举报

0个回答

所属标签

相似技术帖

官网相关资源

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