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

stm32mp1 Cortex M4开发篇3:使用GPIO扫描检测按键

[复制链接]
STMCU小助手 发布时间:2022-10-2 10:00
1.资源扩展板介绍/ s6 Y' \) s; H( Z: X
1.1硬件介绍/ \& i4 w; E9 F/ u
6 F) {% W1 O  r% {7 F5 z$ G$ ^
2a60597904b14da696b646f8afbdf7d2.png 4 u/ B' q. @! G* d' ]) Q6 o9 ~/ `
$ R- ?( R5 L% }# C
4 C  {- z7 J& s- ~( p7 m0 ^
1.2资源扩展板可开发项目
b92e4e61eb734b448ea07a13872f58cf.png & e/ t& B5 R; Z, ?

6 g4 z3 ?% \: b7 |2.Cortex-M4 按键扫描* X1 j$ L( C) M1 g: R
2.1 实验目的

' ]3 K1 s! G  r! z2 L9 |+ b$ O& e熟悉STM32CubeIDE工具软件的使用。
3 n1 G3 i5 e" \# t" x- n# k3 o
" Q! r& Q: G) L% B. x  V! f0 {掌握STM32CubeIDE软件的基本设计流程和设计步骤,能够使用工具进行设计、编程、仿真调试。
5 h: {: H5 [& a, m8 e
" W& C9 {2 R+ W! N学习GPIO口的使用方法,掌握如何利用STM32MP157A芯片的I/O口读取按键状态。, U5 D) W2 g! p* K) c& Z& P

9 K' T3 E& y; C% U0 u" I3 [2.2 实验环境
$ o, X- v6 l" b4 f# fFS_MP1A开发平台
4 n. z4 H4 {. d# f/ D
" Z4 E4 k) u% N* x8 ?! ZST-Link仿真器
6 [3 W5 {8 J0 _( D3 _1 j; V, \6 ?/ @3 n1 J
STM32CubeIDE开发软件" c- P+ y5 A% G2 A

  A; J. O5 ~4 QPC机 XP、Window7/10 (32/64bit). l% _; @; @# \  W. @
* ^$ j% d0 m8 f3 u
2.3 实验原理
4 `- M8 Z8 f) u* q8 m* r本实验主要通过调用函数HAL_GPIO_ReadPin读取开发板上按键K2的IO口状态,控制LED灯的点亮和关闭状态。
+ w7 U; o  A6 Z& Q4 I6 e. p5 J" r0 _* u+ a% H
该实验需要使用到开发板上的LED灯,按键,相关硬件电路如下:
8 B) X6 D' V3 |6 A+ m0 x: `  y$ @- |! R8 G( w
35aa4715331aa54c84d2482c91209eb1.png
8 O! j: u( d" g- H
3 `/ j# R8 i  j: v+ o e1c219a80c6be28f0a8588246e046187.png 2 G6 Z2 `  u1 A, U
- w' t" L- F7 i& ?! G/ ]
b8907361026daaba2ae0ad000b46456c.png
+ f/ `  N* x% A( [7 j. m2 n1 p$ N% f
! [1 _* `% ^! L) m9 G2.4 实验步骤

8 ]# N" T6 b) i打开STM32CubeIDE->File->New->STM32 Project* @/ m# |2 m7 v
) C/ A3 M3 q. U1 y* l
6c3feeac4bfe4c6188f34f550ddd960a.png
" V7 M3 {+ x8 u% }, ~  \' g( ]' K( v* U
可以在左侧搜索框内输入芯片型号STM32MP157A进行搜索,选择对应芯片,点击Next& j3 I2 p  K' J% W

5 m" d* P' {' `; S1 U& t efa5b1cdbd819773e2ac878a231948d9.png % n" M2 u' a8 m7 g+ r" R( O) z
1 R  s0 A1 G" U# H! a$ W, d+ M7 G
填写工程名,点击Finsh; I( k# K' q% d  ?! }8 x/ L

9 a8 T% r3 |, r: G# S 23b790ce29efd0f56216ff9ac74e7162.png
8 m! Q+ U# R( [
+ Q* v4 G* h$ O3 N( Z& X: @点击Yes打开配置页面
# k9 o3 C4 {5 y6 `! {  N" {) Z) N% @9 X- w! M
ff93ebec431a3997856e481773f14d4e.png
! Q4 R% D( y5 `1 a" v( o: ?, W8 [/ Q
搜索框内搜索K2对应GPIO引脚PA0,左键点击设置为GPIO_Input: V8 ~" f  u: g6 e& t

) ]# g3 k% i4 O% q 493d3e02cb945d93cd7cf5400403b343.png
0 i) m- H% U5 U8 Z, h4 |9 B) Y9 T8 W* C8 y- s$ t% O( C5 |5 V" f
在Code Generator处选择为每个外设生成单独的C和H文件,这样设置方便阅读代码! n0 I& R' z$ K9 }- y
1 Q2 d/ s2 m/ Z7 ?3 G
753b47436d0aae4b6eeaa34aad80c1fd.png
/ q, @% X$ K) ?2 Q- ^3 i: m6 b3 {# b& {+ W* Q
完成以上设置后,Ctrl+S保存,会提示是否需要生成代码,选择Yes即可自动生成代码。系统会自动生成System Clock代码
& G) d, S8 u) x* f# [1 B, Z. T' |6 h1 _; `
6c38a8e1f10a1bf93359916f53185eca.png 6 ?3 O6 n2 y: S  x  Q5 b

5 h8 x; b! _+ r/ s9 n: ?可以在左侧工程文件夹找到KEY_CM4子工程,打开main.c8 q' ]- S2 l" v# K6 G
3 H& @2 n8 v$ a* L
添加GPIO初始化函数,初始化LED灯引脚PZ5为输出模式,初始化K2引脚PA0为输入模式" |5 e; O0 y8 e' x7 v

4 V& ~- K# Z1 w9 o* q. e
  1. void bsp_gpio_init(void)8 h" X1 g9 M# q8 R0 T
  2. {
    7 Z* u( ?  r4 B' w
  3.     GPIO_InitTypeDef   GPIO_InitStruct;
    6 {) u) C: v8 x$ E/ O2 r# V1 ]& |* u

  4. % M3 c, g- S5 n: l" |
  5.     __HAL_RCC_GPIOZ_CLK_ENABLE();( w7 x) ]" j5 G3 s7 Y) Q% m
  6.     __HAL_RCC_GPIOA_CLK_ENABLE();  `. T5 J8 `  E
  7.   A) b5 |, t1 `- `" W3 g% q
  8.     HAL_GPIO_WritePin(GPIOZ, GPIO_PIN_5, GPIO_PIN_SET);
    8 R+ D, \  J# w# `% D; B, n

  9. 1 {; B# r3 |# s7 q5 N" j
  10.     /*Configure GPIO pin : PZ5 */
    . {; P: n3 v& V; y: |! v
  11.     GPIO_InitStruct.Pin = GPIO_PIN_5;
    5 t$ A! O0 H$ N1 ]9 ~
  12.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    ! l) [/ z5 C* A& R, c0 I
  13.     GPIO_InitStruct.Pull = GPIO_PULLUP;+ l- J+ k% ~3 v9 Q2 u& V- I
  14.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;7 K# c+ s- @9 [, z" C+ y: _! S* K# [
  15.     HAL_GPIO_Init(GPIOZ, &GPIO_InitStruct);/ i/ J( i- f1 L2 x( r0 e* u& ?

  16. + Q, E4 d) V+ N7 _" k7 V
  17.     /*Configure GPIO pin : PA0 */" n. ~/ B7 q- F9 M$ ~* w
  18.     GPIO_InitStruct.Pin = GPIO_PIN_0;9 p# f1 N2 ^) O) g
  19.     GPIO_InitStruct.Mode = GPIO_MODE_INPUT;+ k/ H; B# ]$ y- z6 O2 O+ v
  20.     GPIO_InitStruct.Pull = GPIO_NOPULL;
    / t" e- a9 r+ d
  21.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    6 D  w1 X- n7 V
  22. }
复制代码

- I5 c7 `7 N+ Q( Q  P在main.c中调用GPIO初始化函数,在while循环中添加GPIO读函数,判断K2引脚高低电平,改变LED灯状态( p9 N& R0 Q1 v
7 ^! N8 D  _$ ?8 u0 g% N
103337b9cffd98678a3b808251029724.png
3 e" k8 o( m$ v0 P5 e4 R' r9 y& b# j+ p! q% [" e$ p7 e' r& X, e; V
上述为新建工程配置过程,可参考16.3.2章节进行导入已有工程,工程存放路径【华清远见-FS_MP1A开发资料\02-程序源码\ARM体系结构与接口技术\Cortex-M4部分\2_KEY】$ L* K  x/ R( G" w. D# f$ s
4 L. C# l- J9 P, Z9 q( ^
配置完成或导入工程后进行程序下载,具体步骤参考16.3.3节进行开发板连接,程序编译、下载
4 K, D# P- R5 R; X
' q. F! w/ ]; b, ^4 E4 s0 E2.5 实验现象

, x4 \8 v( q1 z+ H' W5 n+ \% x' s: ?7 x按下K2键,可看到LED灯状态发生改变( a: |' L0 f/ E1 X
————————————————9 c5 L9 [& R' W4 @/ ^2 _; R5 J& c
版权声明:华清远见IT开放实验室
1 ~( j6 D; [+ N! e& z5 i1 V7 @8 h% _
7 a2 B( T) Y! W5 Y0 c- A
赞 收藏 评论0 发布时间:2022-10-2 10:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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