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

stm32中断原理

[复制链接]
flyingstar 发布时间:2025-10-10 19:29
1.搭载STM32的开发环境1 c6 g, k' K8 \' M5 R/ P
1.安装jdk
7 u' z7 ?( Z2 O2.安装STM32CubeMX( h: \/ Y$ T* {0 I, b3 G0 ]4 n
安装结果如下
+ O( S" J6 @! O) i
, ^% d' e# W3 I$ s8 i; r 115439zbjz3k7w7jfjwvjw.png
; q: X& F' F9 _, [; ^% Z; a  Y1 ?- y) Y% I4 i: }9 _
1.配置STM32CubeMX:安装HAL库
7 }5 ^( R% K  Z5 r3 `( B  s" l' I# j5 [' z% p* t
(1)选择自己想要安装的HAL库版本号  U2 I: _. P% c3 o$ O

4 f, y3 A, i; f9 A' k' o(2)下载HAL库,HAL库环境安装完成
  X( z# H9 K( q# w( D
9 H" L. Y; `/ u* g% r9 {7 S% x安装结果如下
5 W, |! C( V" y( O. f
2 O, D8 Z' v. h! Q" K- T 115439asjnh1amata0410v.png + u9 Q6 y! Y$ W' u  A

4 L0 K# p7 W7 Q: T3.安装MDK5# z% d/ M9 \3 X- P% _
2.利用HAL库新建keil5工程. U) F1 ~% K3 S' c& u. ^# z9 i
1.STM32CubeMX建项目4 i5 l: T' b; j
1.选择的单片机型号以及点击开始工程项目- L" M2 B: a* r7 t$ ?4 \" b
  E+ Y- q+ ^6 M0 @7 T
2.配置时钟,进入上面的RCC,有两个时钟,一个是HSE和LSE,将HSE那里设为Crystal/Ceramic Resonator
, K# a2 j6 ?) E0 A
. r- W( B5 H; }0 R2 w$ m; O& O3.进入GPIO选择引脚 并且配置其工作模式:) Y  K5 `; @" Q- T

- S+ z# g" N6 n/ z$ m1 g  C( E选择了三个GPIO:PA0,PA1,PA2设置为了GPIO_output;以及一个PB5设置为外部中断源:
; j& g+ J4 R( m& z% {- l: p
: g' n& e, I2 h9 ]- d* j4.在GPIO界面里面点击PB5,对PB5的进行中断配置:7 u, y' N0 o/ |- y

* j, I  n$ g% p, N( l5.在CLK Configuration中,进行时钟配置
5 S! x8 U" ^8 H
% P, ^  v. X: H6.进入Project Manager,进行工程设置点击生成工程与代码:$ H& c9 Z9 g: N6 C- ^  N# ~

/ H+ P- T, o# w* T! N. ]8 F2.keil工程编写5 ?$ ^' y* H, w5 a
1.点击刚刚生成的keil5工程文件,双击main.c文件,在main函数上方进行编写一个中断函数HAL_GPIO_EXTI_Callback()以及自定义一个中断的标识符号flag/ ~3 R/ }7 [' m  H+ U

5 j) P6 F/ a9 Q# y/ N* m" b输入以下代码
+ ^* K$ ^& ]  j- Z6 X" L; e$ R+ L3 n
8 ~$ D, u9 T: S) ^& F; nuint32_t flag=0;
1 B4 L$ X( k  Ivoid HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
# {" g' x! O3 p& @9 Gif(GPIO_Pin == SWITCH_Pin){
$ Q8 O; \3 B0 `. u1 ]2 m3 A* @& u4 PGPIO_PinState pinState = HAL_GPIO_ReadPin(SWITCH_GPIO_Port,SWITCH_Pin);1 X4 ]* L( u) H. V3 D( `
if(pinState==GPIO_PIN_SET)8 s: K# w+ p' r9 b& u9 s
{
* n9 V( G3 a: }2 Z: n$ T* Fflag=1;
5 M7 F5 I4 U- i# ^& ?  F. }) L) P}+ g1 W' R% Q  Y
, i2 s3 U8 j8 W( Q
  else if(pinState==GPIO_PIN_RESET)
* U. e! u& d% |1 O7 ~8 A  {5 H# N( A  Y/ i) @/ B
      flag=0;2 `& P/ X4 N9 R0 Q1 C' G
  }# v, I4 `. f5 Z! L2 O3 \+ ]
  }
4 X. R7 k2 z4 q
3 W. t' ~( x% S# J7 W: R' `, c$ u  \6 p, F
}
1 H! N8 O7 L: A# e( ?2.在main函数里的while(1)里面写上如下代码:
+ |& H/ o: O. A* l9 i# k& T
2 ]6 ]6 J. D" a3 Kif(flag1)
- n; T# U& r: v$ i7 d; E{4 ^+ e* S8 C' O" U
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);  y) _) ?+ r/ ]: l# N% X
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
- D* a6 S! z% AHAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);. ~' i$ v8 P/ t8 F3 r# ]# ^
HAL_Delay(1000);; Z; ^; ~6 J2 X9 v
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);6 q" y: _7 ^$ ~& c! @% R
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
3 S4 s) m: B4 ~% R& THAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);9 R% N- F/ V. ?  ~) A4 }
HAL_Delay(1000);9 w% H/ G. Z4 b( w1 |" t7 {
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
$ W2 v9 a; s9 {' G6 p% u, WHAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
: ~2 \  P- y7 SHAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
0 I/ E2 A  \0 h3 X  FHAL_Delay(1000);
! o1 U* e5 u( l}
- t$ t* Q$ ~3 S  d8 a1 Z' Uelse if(flag0)
3 H, s7 s1 D0 _; |$ c" R& g; L{
# w. ^# y! R( o* e  s' C# HHAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);7 R  a6 j( d5 ^5 e1 u$ v& [
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);; ^4 B2 P  Z  i! s
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);+ s3 `; j* R: J/ _) f& L
}: w/ h8 G& Q1 h! l# e* B$ v' X
3.程序烧录
9 c+ u) }) e- [实验结果如下
$ d- g+ B' f5 ^7 K5 n/ _1 s
0 g& ~  w3 q) _* u. _ 115439t6vu7tc0tj1p76tt.png
# a# L4 z8 N% R8 z# a! ?' k8 Q. Q! ]( T+ A; d  s4 G$ r$ }
(三)proteus仿真9 H. J; p5 J; p! P+ t# k
1.搭建固定项目  [; i* G0 x) J0 F- ]" ?) V
1.新建工程) C1 L9 W8 I8 J

9 ?, V3 a4 N5 m5 k! D' ~6 ]  h6 O; ~结果如下
# Z& r: M2 p# ?- W) S0 d
: H  }6 [2 @# V3 m5 z+ [ 115438adjjxj8jndhp8hii.png
2 J: X6 |( s" [7 F1 |
: i) {( {+ n* l2 Q" ^2.绘制系统电路8 z  P' o  ^3 N! h
1.选择发光二极管,选择红、黄、绿三种颜色的led7 D* E9 h; \+ d, J8 W
- u/ u# W( v( @* ?" {' Q
2.分别拖入原理框内,并与对应的端口相连接
( }, @9 Y  ~7 R" X: z3 y7 r$ d- F( h: b3 A
3.分别给3个LED配置电源+ E4 w7 F# f3 L: t4 ?7 @+ `$ B! }3 [. _
1 s- m& x, S7 D) A- G( C
4.将开关拖入原理图内,与设置的外部中断端口相连,并配置电源, i& i) c  C5 X) m

5 Z; J& ^5 _" ?# k结果如下* W" f6 }) @$ B3 h. o) p6 j- t

# r5 Y3 w  E: j; T4 V 115438uf67ha7qk5ee6fef.png # Q! I+ I/ M. M; C% e4 y
' u: p5 {: n6 \. {# E( u
3.仿真运行, a9 h0 v9 ?" Y" S! O7 h
选对晶振频率,接入电网,开始仿真0 ~4 n, O( j) b( \; p4 d

% l& U4 S2 v# u' U, Z, a7 Y' w& Z/ m结果如下
5 M0 {+ L. G/ N3 j/ a: @( d" \0 B$ ]. J9 m& x4 q8 a% N
115437jxcgjojgvcgozjxj.png
5 R5 I, K9 w" z6 i, A% I+ {5 F5 X8 i& J( O; |
赞 收藏 评论0 发布时间:2025-10-10 19:29

举报

0个回答

所属标签

相似技术帖

官网相关资源

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