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

【经验分享】STM32F7学习笔记(四)-外部中断

[复制链接]
STMCU小助手 发布时间:2022-7-3 16:00
一、打开cubemx,配置按键相关的管脚为外部中断模式
; v4 z* z5 l" b) S6 e9 F( a8 D8 s& }/ [- O: i3 z8 P# b4 c/ m& X
20190410200153855.png
2 k) d- s# T  N* e4 U1 a 20190410200213300.png
% P3 G1 |* B* P( z2 _3 {
. `; T# |* Y! ~4 V: k) ^ 2019041020023397.png ; p! [+ b8 n- h: a& v9 C9 r' E

6 B  J: f/ r% V J`622WPAG1H6(WN_[E3ZP.png - J6 D' Y' F* z2 C6 I6 g2 G
: B( x& K( ?8 J8 L

. s3 R3 F2 x" `4 R7 o1 z1 ~根据阿波罗开发板的原理图可以知道,只有PA0脚当按键按下时是高电平,其余几个按键按下时都为低电平,因此配置PA0为下拉,上升沿触发中断,其他按键管脚配置为上拉,下降沿触发中断。配置完如下图所示
, W, _- e4 W- \. @& A9 o" @2 L+ `1 v, W: Q" I: v9 }
EKZR(]F{GMCEGU_Y2EB92RO.png 0 I; b! t4 q: J2 X4 ]
  a, F3 l2 \8 C# d2 }8 K+ @
二、配置中断优先级! n( ^+ n$ h$ ^" @
点击NVIC选项卡,配置如下( \+ n- z! h$ y( b, C
3 n  a, [1 K+ r& T  ]8 s
V0A(B2A%@2@UI_N~GQWL011.png 6 {+ o7 G" \+ S9 }9 p7 R) S
3 u, I, {) d( z9 s/ z9 r/ B+ D
三、生成代码
% k7 t9 v* r% G在stm32f7xxit.c文件中可以看到与外部中断相关的中断服务函数
6 X. M) ^7 `% e6 R3 x! r8 o5 }% x4 K" ]3 E" S, Q' Z0 Z
{M3_~XQWUPD`K{`~Y[YMBSC.png
9 y% }* S/ i; V% w
1 s  Y9 s2 U4 Y8 \4 Z1 J2 `" O; o0 \根据上图的方法我们进入到HAL_GPIO_EXTI_IRQHandler函数中可以看到函数调用了 HAL_GPIO_EXTI_Callback函数,我们只需要重构该函数即可。8 |4 g2 U! ?* G

. {5 \/ \! h1 u0 w+ s 6 ^9 @5 R# l2 m* O, n) ?  @

( f$ q% q& ^- i' a$ w四、添加代码
) p. \) I5 h3 Y' U在stm32f7xxit.c中添加函数如下, s  b$ Z& e: g- R! o) F

0 g2 q" M& t7 a2 t7 p
  1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
      U/ }6 k  s5 ?3 }6 g& H, P
  2. {
      _4 _+ i! c* t$ n' {3 F8 V1 e* J# k
  3.     switch(GPIO_Pin)
    8 @$ g& m. o( T( S. X- @$ X
  4.     {4 @) G" B1 @) F. p- j, U
  5.         case KEY0_Pin:* g& y  A* \/ A# Q
  6.             printf("key0 pass\r\n");0 w3 v9 U# u, Q' H  c% A% s5 d
  7.         break;' \' \: k, m- s1 {6 Q9 k8 ?* T
  8.         case KEY1_Pin:
    : e6 X5 B. {- s2 q+ l, C' X
  9.             printf("key1 pass\r\n");3 \4 m( d, |) i' |- F. T
  10.         break;  w2 I6 `1 W" ~7 ~$ d  F( L% ]# \
  11.         case KEY2_Pin:
    9 Q8 Z8 n; g* h6 R
  12.             printf("key2 pass\r\n");
    . U8 d% ^: v/ H+ @
  13.         break;. U  c# X. {! i; W% }6 }/ _
  14.         case WK_UP_Pin:4 H" _# ?& H: ]8 \3 t" \, \0 K
  15.             printf("kwk_up pass\r\n");
    / J( i3 H: G! F& S. ?
  16.         break;
    # N0 F$ @* L* Z2 f7 s; s& j* G
  17.         default:break;* H7 f1 p, t* S. A
  18.     } 8 ~) X: E/ ]% x: @" o
  19. }
复制代码

; g* h- m& P6 ~2 }! V/ n6 u0 B2 d五、编译下载,通过串口调试助手观看现象7 y4 g( B4 c" u# N$ Q$ Z# D
按下按键会有对应的键值打印出来,实际现象当按下某个按键时,该键值会多次打印,是由于按键抖动造成了,只需要添加消抖程序即可
  R0 A1 w# l! K7 C, M: a- ~0 Z2 }1 w" e; D3 v
5F8Y9I`@WE}2$F[XAH5B552.png
  Y; t- ?* o- ]* J7 p
1 d- @: o) h( O
, `6 S$ B6 @- m& E; w$ X( H
赞 收藏 评论0 发布时间:2022-7-3 16:00

举报

0个回答

所属标签

相似技术帖

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