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

【经验分享】STM32Cube HAL 外部中断

[复制链接]
STMCU小助手 发布时间:2022-4-7 16:58
实验内容:通过按键触发外部中断,LED灯电平翻转。
7 ^( e3 G6 Q1 \( S, t6 n3 A1 d) ~& E' W) E3 @- Y; n
一、原理图
9 c/ y; s9 f' H7 n; L4 P
3 i- x8 w; \" u 44_Z1A9LZU@Y3W%II%9PCSB.png
5 d' i; F/ I, m1 o) p
  Y/ H" h2 m; U# l/ B8 W; b* H) C( E 二、 CubeMX配置
9 [0 Y& r( f4 j5 c& Z0 B# l
# L5 v: R: A8 Q& n5 p! |Step1.打开 STM32CubeMX,点击“New Project”,选择芯片型号,STM32F103VETx。4 g4 g8 ~7 l2 \( T% N' Z1 v
/ k! G, p1 o: c& u2 M9 h
~H6~EUZBNZQ`7@$S165%P)K.png " D! t( w) ^, G9 u
- s4 R! S  H4 i" T& v. X
Step2.选择时钟源,并配置时钟树。选择Crystal/Ceramic Resonator,并配置系统时钟为72M。0 y1 _' E- `( A% C$ E
+ n! q. Q) `4 N* `& X; m
WILJW%HFCD5[V`M1RAK3X(P.png / t6 w6 O$ G  T; L2 c9 f& X4 D

: R9 X+ F0 ~# M, P, G [QQDV(ZX(GMQZUS77Z6UTNY.png
8 F; G0 F; K+ ^# ^4 p, u4 E+ o/ P( w# y  P: t
Step3.配置SYS,我们这里选择的是Serial Wire。(正常情况配置不配置不影响,debug可以使用。但是你不可以把这两个引脚用于其他复用功能,如果用于其他复用功能,debug就不起作用了。)
" e! ^6 }- s# k
9 [) D4 e7 `- ]2 ?3 L0 | B)4LO@1GA1FSDJGES]05`C3.png
- I2 k+ P+ @8 g; _
# s4 _- N$ |7 R/ VStep4.  通过搜索框添加我们需要使用的IO口进行简单的配置。然后根据以下步骤到相应栏中进行具体信息配置,主要配置按键引脚PA0为外部中断,上升沿触发,既不上拉也不下拉;PB0为推挽输出,既不上拉也不下拉,低速,默认输出高电平。同时使能外部中断源。
, q  J: Y4 V8 b2 T8 Y" `
- J, [/ R; I; u0 c0 {5 Z %I1HVNSN2SAQBMQ}MG11H.png
2 i4 O/ c! c( A, g9 F3 U# R
3 d: K5 K7 U! |$ P: b: W: \ ]N7O5[P7YYCZH_SD}WW{5YY.png
, i1 p0 o  l0 G' ?. `0 t! \' W, I
3 C$ r: o. d* _0 |5 O  p 6[QD@3~M_C4EGDC9}[2K~]R.png . ~& s, G  x+ [6 |/ P
29ZU4Z)_F{4_E[F7}3$W[Q0.png & D3 `! u- @$ U0 S

' `5 j3 N- D$ A" M& [8 `4 i 到这里关于相关配置基本已经完成,只需要根据之前文章《STM32Cube HAL:GPIO输入/输出(一)》Step4-Step8,设置相关工程参数和生成代码。
5 N* H* A. P# r$ g4 [
8 L6 s, L* d) D: ]1 `' l7 {6 D三、添加功能代码$ o+ \( Y1 @, ~* G& E0 o9 q6 o/ d' ^

- Q0 q# B# l6 A* M. L4 s3 a在main.c写入中断回调函数:
# B3 D! C# }+ q0 x* p8 P5 F7 B
, W8 P. J* {! n) P; j- C
  1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
    ! r. c6 ~" x8 C- z, F
  2. {" ]9 l! m( ]* V; ?8 u/ m
  3.         if(GPIO_Pin==GPIO_PIN_0)//同时多个外部中断时用于区分: m$ k+ S; Q) h) c$ z5 q3 ^
  4.         {
    7 _* J$ z% p7 Z+ f$ b
  5.                 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);//输出电平翻转函数, }, ]) W& Y' v4 `& {6 w+ d8 t
  6.         }
    3 P" S  J0 k" n$ h
  7. }
复制代码
7 Z* X7 D- q9 _. R% c: I* l
由于该实验较为简单,只需在配置完CubeMX以后写一个回调函数,就可以实现我们需要的功能。该实验旨在让我们了解配置外部中断的过程。
# \% c2 i+ l# P+ ?+ c8 t
0 w/ o  e! S. s0 Z& P3 T+ l$ p在使用中断回调函数的时候我们总能看到自带的回调函数用__weak修饰,这属于弱定义的形式。里面的注释“NOTE:…”描述是,“该函数不应被修改,如果需要回调,则可以在用户文件中实现。”也就是说,要在用户文件中重写该函数。
/ R1 f' P9 n/ H4 g" w- f' J& T1 Y$ ]; h6 G# w5 D- L
FHDDMKF{TUID}X(4]6@X8B3.png / x) n- a, n: A" K# J
1 B9 f/ n8 [! K* [8 `/ s3 r
$ o; V' L9 b" x9 Y" ^- |

! h3 o4 p9 E) Y7 N1 @
赞 收藏 评论0 发布时间:2022-4-7 16:58

举报

0个回答

所属标签

相似技术帖

官网相关资源

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