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

stm32中断原理

[复制链接]
flyingstar 发布时间:2025-10-10 19:29
1.搭载STM32的开发环境! I( ~+ a2 F0 M6 m$ @. f
1.安装jdk- [6 s5 j8 S$ }' B* m! p
2.安装STM32CubeMX
: R2 |( \, L( q9 `  M7 e安装结果如下9 o7 d$ |& j( b+ b) R

8 J! R# R5 c/ N3 |" _1 D5 J- D: X8 V 115439zbjz3k7w7jfjwvjw.png
( d2 S. o! K7 p" L2 L* P* F1 H8 B7 I) A* a- a
1.配置STM32CubeMX:安装HAL库! Q1 L8 }6 L: L6 N4 C& z- C/ L
+ M- Q4 M% O* x! C4 Q. u7 ?+ Z
(1)选择自己想要安装的HAL库版本号
. q% i4 S0 _2 v; [! s- ^& n" x/ u/ s7 w* m9 a" P
(2)下载HAL库,HAL库环境安装完成9 r: r8 ~& Z: [
5 L5 `5 W: i2 U; C4 D, d  i6 _! w
安装结果如下
5 P% p) j9 \2 |; A; f
9 z5 P9 C  j2 V) j* K/ P! O 115439asjnh1amata0410v.png
- E- Z, F1 S( v9 r& j- O4 T! q: q
" j( p6 ]) b3 ~! g6 k0 t8 Q- @3.安装MDK5
0 ?) k3 C' E' b' `8 B2.利用HAL库新建keil5工程
2 O+ W. I5 U' I4 Q( b1.STM32CubeMX建项目% r; }& c% `: a* @) H5 o! o
1.选择的单片机型号以及点击开始工程项目& ~: V/ h" b9 s; w) B
' S# L5 S( L7 V/ h
2.配置时钟,进入上面的RCC,有两个时钟,一个是HSE和LSE,将HSE那里设为Crystal/Ceramic Resonator8 W. ?$ ]$ x! z' O

/ f3 |8 e1 c  l/ d3.进入GPIO选择引脚 并且配置其工作模式:
% A9 W# }9 ]6 M& W8 B5 }; S- [# R
( L! T0 y4 q6 n6 d选择了三个GPIO:PA0,PA1,PA2设置为了GPIO_output;以及一个PB5设置为外部中断源:
9 R. X: C2 }* p& w* a# T+ h6 J$ e6 u2 L( Y. |* C/ L( X
4.在GPIO界面里面点击PB5,对PB5的进行中断配置:# I! v$ U) g/ e
8 Z8 _. l6 ]% l' J- L
5.在CLK Configuration中,进行时钟配置
5 I% [4 s1 D$ y9 R& o9 \2 [9 e* \5 x$ `7 l2 m
6.进入Project Manager,进行工程设置点击生成工程与代码:
9 w) l7 E! N. S3 Y
: P2 I9 G# V' N! e  Q8 f8 _2.keil工程编写
; c$ }5 S5 m& j- j+ i1.点击刚刚生成的keil5工程文件,双击main.c文件,在main函数上方进行编写一个中断函数HAL_GPIO_EXTI_Callback()以及自定义一个中断的标识符号flag' C% Q+ j8 s' J" E& }0 A
0 c* \" S9 A% ^  {/ l/ ?3 E5 ?
输入以下代码
, m) i; L$ b% a: N  v+ c( W) R9 F$ x: B$ D8 C3 R' t& X
uint32_t flag=0;2 Q$ H& V8 `# m7 b# r
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){0 _; }: j. `; U) M
if(GPIO_Pin == SWITCH_Pin){
& |$ Q1 W1 _* L1 G/ ]GPIO_PinState pinState = HAL_GPIO_ReadPin(SWITCH_GPIO_Port,SWITCH_Pin);
* e& b0 P/ q% ~8 ?. P5 hif(pinState==GPIO_PIN_SET)9 J" i' {4 ]  d# z% o% x4 L
{
9 J. `7 e! O% ^- \  `2 u: I& Sflag=1;
  B' e5 ~/ F; d8 P0 M, k, n# \}
$ W8 A& s+ R7 G" a. V# a/ n2 C) n" N* m8 T) O% }
  else if(pinState==GPIO_PIN_RESET)7 }( t8 Y* ]' J* i/ }7 `
  {
4 O) U" E" G2 ^* I: q      flag=0;" Z5 s0 }: ?: `8 R2 g! K7 N( g
  }" M- `0 F1 x- ^0 W+ E! P' A! i4 O
  }- m! L: N/ F. {; U- H% H
3 @/ o/ v8 F  I! C

5 D5 C  |6 i  X3 h+ d0 |. D, @}6 ]0 `9 S* ~* u  `
2.在main函数里的while(1)里面写上如下代码:0 {3 R6 Q) _" W1 N" q
( z; D7 l* u8 t/ ?
if(flag1)1 ^, o' V' R$ K& M& y' G
{" _5 Y" G3 {0 W: e& }. e
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
0 r5 |; ]8 B* s! g) vHAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
1 ^# M* ~0 w3 F2 f2 ]2 HHAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);/ q  e( p! O) w2 k" t
HAL_Delay(1000);0 L/ A, M' p- x
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);( O: x. r  n0 V8 ^2 x
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
; N1 Z  j; G; K1 FHAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);1 Y2 c9 s+ D9 {8 X2 Y# z& _/ ?% m
HAL_Delay(1000);0 R6 J* @& R0 K
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);0 h) l# z# Y  y% H* c, n6 `
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);. B/ C  Q; }5 y/ T9 Q
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
. T% k1 `& j, {9 T0 L5 VHAL_Delay(1000);9 ^" S! k7 i6 }& j$ d& q7 d
}
+ e) X$ h1 W2 ?8 E7 k% e/ F9 velse if(flag0)
: i# h% N' I% p" l& \3 b/ x& f9 O+ D{
8 r3 [; B2 f- A1 q- j. }HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);! o6 ]0 d9 f$ E2 u% w! P
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);" J4 U- }4 t" S% Q1 X* C
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
* U& ~. G6 z' f" b; \3 d. F" u}
+ d/ z/ s5 _/ Y* P- {3.程序烧录
) K* a: L, v9 g+ r: y% ]实验结果如下
! w* g1 W# L' \7 T$ q3 k% C; Q# N; \$ D3 O/ o
115439t6vu7tc0tj1p76tt.png
6 n3 u) k$ o! u
5 u1 D$ p+ [$ N; i(三)proteus仿真9 z) Q$ v8 e- D0 ^0 Z$ B- k$ X
1.搭建固定项目- K6 f# q6 v* L1 x! w# u
1.新建工程' ~- m# i9 A# e+ l0 T( W$ k# O

9 P) s% ]4 }$ u" u$ p结果如下
3 t0 p) z! Y- B3 S+ Q5 `  j
, {4 _# Q) D. y# v 115438adjjxj8jndhp8hii.png + C2 k+ j( |/ J) v3 d$ [& ]! U' d

! C* U, ]9 A' L. {, U  T0 U( i0 C2.绘制系统电路
+ |7 |/ M( b, f2 \& _0 i1.选择发光二极管,选择红、黄、绿三种颜色的led) _  n0 H1 K3 S
% v0 v4 ?7 `" A! {5 j+ A& o
2.分别拖入原理框内,并与对应的端口相连接
" N  B% o+ ^9 Z0 i
6 |0 U7 i  y$ F. b) ~3.分别给3个LED配置电源
. }' I% f3 ~0 |1 X1 M. J5 b$ N4 T1 v% R
4.将开关拖入原理图内,与设置的外部中断端口相连,并配置电源0 C" U& x# Q" @0 O' _4 o# ~- @+ F

- V2 M+ P4 o) O" L& E+ N结果如下
' W3 w5 w' B) O9 t' P2 m" h% E8 l4 d# G+ Z
115438uf67ha7qk5ee6fef.png
8 T) K: W/ h; A: ]# O/ `2 m% M- z1 P
3.仿真运行
2 ]0 I& q* r% e3 P选对晶振频率,接入电网,开始仿真
! z$ Z- j0 ?8 c- Z% ~! c" B- H6 c+ ~7 P7 J& |
结果如下* z: `8 X8 M' h  M# k/ Q
4 U* x! M% O: D( T) T
115437jxcgjojgvcgozjxj.png + G6 W' ^$ }  T
: l" @/ i* B1 d7 d: Q$ m/ J3 E
收藏 评论0 发布时间:2025-10-10 19:29

举报

0个回答

所属标签

相似技术帖

官网相关资源

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