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

stm32mp1 Cortex M4开发篇4:GPIO外部中断详解

[复制链接]
STMCU小助手 发布时间:2022-10-2 09:47
1.资源扩展板介绍
7 h% O- V  F' G$ L' M1.1硬件介绍
) {2 ]# `) f% x4 Y* u
/ U4 [- X  R6 u+ R
2a60597904b14da696b646f8afbdf7d2.png
) z3 o9 Q; q$ o; M' b8 U+ s
: t6 U9 `' `. G, Q+ Y6 B; K# V' R" z3 C" O& z
1.2资源扩展板可开发项目7 f" x" H% N) e' y- u7 a9 U. y
; z+ {& M5 Q' i* O
b92e4e61eb734b448ea07a13872f58cf.png
3 H; C3 V1 g4 R' Z/ h2 e; }  ?5 T" j
2. Cortex-M4 外部中断
' u( \) j. j3 B2.1 实验目的

# p, _: m( ^: H/ t4 [( h熟悉STM32CubeIDE工具软件的使用。* @0 ]/ T; s" v! b( {
* K8 h- [+ R& {4 x& g) b
掌握STM32CubeIDE软件的基本设计流程和设计步骤,能够使用工具进行设计、编程、仿真调试。7 ?! z  y: J( H5 V
8 K2 b3 z$ y. A: C" o* n$ q& G
学习GPIO口的使用方法,掌握如何利用STM32MP157A芯片的I/O口作为外部中断输入。
0 ~" q1 Y7 e" _1 M; X
, o) M" |  _7 U/ U3 ~8 \2.2 实验环境# {. d5 X$ P, J. z
FS-MP1A开发平台1 Y9 F; i3 F/ I
, a4 Z* Q! m3 I' l
ST-Link仿真器
2 ^5 \% f0 r5 N# Z( H8 B2 r4 D# q' c* n/ h$ F. R( |: P
STM32CubeIDE开发软件& s% _) `1 Q+ T$ F

" e# z" Z4 E/ W* T) |PC机 XP、Window7/10 (32/64bit)* U% K7 V1 z( h$ |% V/ d

2 ^* `6 t( v& I4 n2.3 实验原理
) ~9 Q- |* G. H3 [9 B, N本实验的原理主要是,通过开发板上按键K2的外部中断方式读取键值即IO口状态,控制LED点亮、熄灭查看实验现象。
5 \5 @, H0 q2 q/ J+ a! E# w
9 W5 z; F% I  d: y* J af6c2078a3e68de5e6db0118ef682b44.png
. Z9 H  ?3 ?& e7 ], G1 a$ c. c; r$ v0 h( y
. L0 c) H: t3 i+ k; Y: Y
518d6ff71aa718f2d590038644ea3e65.png " Q' R7 ?4 `( Z4 q' B/ a  g5 g1 ]
ebfbaaa670fab2b1723f9c31c0e238a9.png
- y5 v, c) H9 F9 C% I# r* _1 Q$ z, U8 ]) n( y) C9 U
3 s5 K3 |6 n( l" k  X3 a0 s8 _
配置IO口外部中断的步骤:
( W2 h2 X- k. {4 K4 y1 v6 G- q( n( n: y( m7 @) c$ }0 @7 r
使能 IO 口时钟。0 E: b1 ~9 D( h- n. f+ k

5 p+ p! c% I% E; {; c4 v初始化 IO 口模式,触发条件。$ U# d) {0 T" _& r. A9 c% x

, s; U: M; i' M3 A! k' @配置中断优先级( NVIC),并使能中断。
% @" G0 `9 \6 H/ S" I  ]) s+ H7 _5 L" |
在中断服务函数中调用外部中断共用入口函数 HAL_GPIO_EXTI_IRQHandler。, g; C1 X+ _+ _3 X
) ?3 w9 J+ R% M4 b$ }
编写外部中断回调函数。
# Z: Y% [8 b1 U0 Q1 E; W4 p7 Y% U6 Y% C. B" w) A
通过以上几个步骤的设置,我们就可以正常使用外部中断了。
( d* m0 v9 C  r  s8 W. p
" k" t: `3 D* O$ j2.4 实验步骤6 R7 @! Y, i- d1 ]6 M3 ?% R
打开STM32CubeIDE->File->New->STM32 Project
/ D, f% b2 L, f1 F" D, C+ Q" |( J; K  `3 X: L+ c( L, s
afc5399bb967fec3fe565619b6a7d7be.png 1 J% e. o8 A8 D5 [$ X1 X

9 x9 q' o/ R2 y1 D6 e可以在左侧搜索框内输入芯片型号STM32MP157A进行搜索,选择对应芯片,点击Next
1 B) _& X! {  _; i; S' O$ q3 L: F9 W( T3 ]& H, d! i
280cbf420b5967011086a7f6d942185f.png
: }; h- U1 z1 T& D- A( g8 a% B: g  I5 v4 z& Y. ~
填写工程名,点击Finsh
: C6 [! C9 [# W& e+ s9 ]% d$ r! H& ]* ]( u8 r& k' g8 q
9e1bd3c117301106f724da80d5df8464.png
* s. x; ?5 G. o( |, I2 v2 R" I; @. C! Z
点击Yes打开配置页面
. _) z+ U. c) V0 [7 x) U) x0 x7 D
1f6c07374b7b560a51b7e10c61b786f1.png $ n- Y% h! M. ^) h2 P( o+ F

  `8 B+ X3 `# v/ G. k/ ?搜索框内搜索LED对应GPIO引脚PZ5,左键点击设置为GPIO_output6 A+ }3 N: J8 n% h
& S. y, ]3 d0 k: _+ Z
搜索框内搜索K2对应GPIO引脚PA0,左键点击设置为GPIO_EXTI0
0 A$ P( Z* k! r% `) q% e+ \. Y2 Q: @5 p% [6 J
254c3a7fe48a05c8e5e000f4ee43583b.png
" a+ o7 a& }" d+ `
* N: a* e% F/ f( d+ F1 x  ^这里我们需要注意一下,和其他单片机不同,还需要继续设置" Pin Reservation"给"Cortex-M4",否则STM32CubeMX不会生生成GPIO初始化相关代码。具体操作:在刚才选择的引脚上,鼠标右键选择" Pin Reservation"->" Cortex-M4"。
3 J: u7 |. E0 M
  u  l( \5 X/ ^/ j- P 59edd2cf55a87c7f8a9b5abe4f784a38.png / x. o" x6 @! N, r8 H, v
! \) I" E* ]: H" H* x
在Code Generator处选择为每个外设生成单独的C和H文件,这样设置方便阅读代码
4 A9 ]: v- N8 |% o# ~$ P2 U+ |' Z5 u* {$ N- `! [
a9d5a4f59900c861a1e6fe447cb03f95.png
  z6 G: [8 A/ E$ y- J/ [4 S' o7 K; d& X, Q3 J7 c: f- L" |' j3 y+ e
完成以上设置后,Ctrl+S保存,会提示是否需要生成代码,选择Yes即可自动生成代码。系统会自动生成System Clock代码
- V0 ]  s& s9 g% l# K/ p) S( E  `; N+ j- D: P2 a5 |5 C1 E
327303ebf2cf25d3369002935b7741ac.png " y$ L2 T" D- h- g, x4 {, @3 F$ X
: d. I. z/ P; [
可以在左侧工程文件夹找到EXIT_CM4子工程,打开stm32mp1xx_it.c
3 ], J. P0 G5 Z+ M! y  E" b7 ~) P9 H4 q; h4 K! T
添加GPIO中断回调函数,自定义延时函数% V- v* S6 I3 t5 r# S: D  C% `) A, B

  y5 D8 L$ S  g$ q% |C++ Code
8 U, @5 V* ^- e$ L) `/ o: W# c3 E% L- a
" |& _! D2 Z. p# Y4 Z8 O" @
  1. int i = 0;
    6 M/ G8 l0 ^" W: w
  2. int j = 0;# C4 C( ]% ^" |
  3. void delay_my(uint8_t time)
    . v% N5 S$ y4 a' f' i- Z/ k# _1 k0 s
  4. {
    , e8 E) @( D2 _
  5.     for(i = 0; i < time * 10; i++)# R0 ~9 B6 p2 S
  6.     {
    4 m0 K2 l, {9 Y" `, Q
  7.         for(j = 0; j < time; j++), a' f' Z  Z. c7 t8 I/ p' z9 C+ H
  8.         {}
    " O' _7 q7 J* J) h# c: M
  9.     }& f3 ]4 B- `. {, u6 ]* L
  10. }) v& G$ B8 O/ V8 T7 ^  Q. ]5 g8 H7 _' Q
  11. - r! k+ b9 M' W; ]. i: U( T
  12. void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)0 {& w1 D( W4 [
  13. {# y2 c. C, K5 R; _, M8 p
  14.     delay_my(10);3 j6 Z3 b. I7 n3 n+ j) P' O
  15.     if(GPIO_Pin == GPIO_PIN_0)
    . D: t/ T% w9 c4 X2 d' ?9 o
  16.     {
    2 v' R( Z6 a6 M  u

  17. * y& C- P* c; k$ C. ?( F1 L
  18.         if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET)/* read PA0 state */
    # ]9 _' F' E& b- Y
  19.         {3 [9 A' P7 _2 Q: @# k% ~: Z( x
  20.             HAL_GPIO_TogglePin(GPIOZ, GPIO_PIN_5);
    4 P. Y$ x! G7 _2 G
  21.         }2 n# p, q5 a( p$ o6 x3 p& t# O
  22.     }6 H: D$ _0 F( R6 o
  23. }
复制代码
+ \; g; }; d; y& }

) l3 T: d$ |  C1 X上述为新建工程配置过程,可参考16.3.2章节进行导入已有工程,工程存放路径【华清远见-FS-MP1A开发资料\02-程序源码\ARM体系结构与接口技术\Cortex-M4\3_EXTI】
4 Y& O/ c+ G4 @: ~$ o! f5 H# s) v" X) H5 n
配置完成或导入工程后进行程序下载,具体步骤参考16.3.3节进行开发板连接,程序编译、下载# F4 G/ ?* h& R7 s; J

  V% u7 K4 |# F+ Y7 \$ c6 p2.5 实验现象; N& k- R/ O5 B
按下K2键,可看到LED灯状态发生改变
, u$ n0 ]* q# C9 N9 A+ m0 r————————————————
, M5 @. d5 P2 `版权声明:华清远见IT开放实验室
5 o, l) j& d( \; x; G. @/ M2 D1 R" z$ H: U( J, J+ l% F( h3 C" T
/ N6 M: o4 u' Q1 F/ ~8 n
赞 收藏 评论0 发布时间:2022-10-2 09:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

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