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

stm32中断原理

[复制链接]
flyingstar 发布时间:2025-10-10 19:29
1.搭载STM32的开发环境9 m1 Y3 @2 k' R+ B( E9 {
1.安装jdk) n  y& x' r+ F7 N  w, h
2.安装STM32CubeMX! o2 C$ G1 y$ }, C+ z5 H
安装结果如下5 R1 m" q. @- H, K

, M( l: n- J1 ^* \& h" S+ Z 115439zbjz3k7w7jfjwvjw.png . J, P2 |% F$ e! F
( m) l+ W5 I2 L: u5 d0 I4 g: `
1.配置STM32CubeMX:安装HAL库: x- L+ R8 e+ Y* I
7 W* r8 ^) j, k/ \8 [- Y1 }; o+ z! b
(1)选择自己想要安装的HAL库版本号
5 j6 e1 N7 ~* F+ G2 u6 @9 B5 g
6 b7 L0 P- ^! s: K(2)下载HAL库,HAL库环境安装完成! J5 ?5 \# f1 E2 ~" s% c! r) |2 q
; ~5 ?6 b2 U! N$ x! j$ G6 ~
安装结果如下
3 k* @% m" M+ P) `
6 d/ q; G* d3 ]7 ?$ }7 l 115439asjnh1amata0410v.png : ]1 F1 r" T8 o6 d- T& [
; u" n* Z1 d* V) Y. [
3.安装MDK5. R2 i( T$ ^' Z5 T2 c6 C
2.利用HAL库新建keil5工程7 ^" y, t' {* `( D) u) P# _+ c0 X
1.STM32CubeMX建项目
6 x2 `) u: Z4 x& E  a, W1.选择的单片机型号以及点击开始工程项目
8 g% A' H( g" a& V* k4 R
* a, W6 D* T, X/ _) b# X2.配置时钟,进入上面的RCC,有两个时钟,一个是HSE和LSE,将HSE那里设为Crystal/Ceramic Resonator4 A4 }1 Q$ ^& q
8 \' }: c- d8 O
3.进入GPIO选择引脚 并且配置其工作模式:) K2 ~/ Y6 p7 p- p9 t
7 W- N6 l, j1 |" b2 [( t. U
选择了三个GPIO:PA0,PA1,PA2设置为了GPIO_output;以及一个PB5设置为外部中断源:" Y( s, |+ O( y- `- o% D; x
8 O2 c6 C7 j, t7 m9 y
4.在GPIO界面里面点击PB5,对PB5的进行中断配置:! O  V8 k( m0 k9 \1 @
' s( {% ?  l1 Q& `+ Z; T+ F3 c, k4 F/ `
5.在CLK Configuration中,进行时钟配置2 L4 `  d- R# F0 {

8 z/ v, H; L3 I: C9 Q+ n0 M6.进入Project Manager,进行工程设置点击生成工程与代码:) S. }6 p# d4 U3 O4 D
' `/ D/ J8 p& f  s
2.keil工程编写: l/ X+ I+ q7 d, ^9 f
1.点击刚刚生成的keil5工程文件,双击main.c文件,在main函数上方进行编写一个中断函数HAL_GPIO_EXTI_Callback()以及自定义一个中断的标识符号flag! C7 c! r! C! O( L9 G) y

0 [$ g/ V2 N. k- n" y2 B, \5 z$ V输入以下代码5 A! ~2 a) ~1 n! u$ @2 X: I" O' A

  K4 T- q3 F& f  y3 \, {. ]/ Ruint32_t flag=0;: q" _# e; @0 |% Y% _4 i
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){( a1 u$ j" y. w
if(GPIO_Pin == SWITCH_Pin){
6 i$ u( K# b- A6 d: JGPIO_PinState pinState = HAL_GPIO_ReadPin(SWITCH_GPIO_Port,SWITCH_Pin);0 v3 [/ h! u) |$ r% N; S# |1 w
if(pinState==GPIO_PIN_SET)
* y8 v1 Q* q2 H3 ?{0 V( r7 L" r6 p/ ]
flag=1;  P+ T/ l* @  j, A" F3 ^) ^
}
" o4 |' a2 s% S' G+ Q( B, R7 `* i8 p& m
  else if(pinState==GPIO_PIN_RESET)
8 ?# W) L. L- t' ?5 w8 B  {- A' w- q1 U9 X' M5 {" J0 P4 F7 {
      flag=0;
' Z! O( w) M1 l) t: J) G  }* F; P0 t( i, @% x, l3 G
  }
7 x0 y! u2 @! k6 |
4 |8 r$ ]6 n. m1 p7 I) Q3 e$ a% `0 {
}( j1 K" i' o( d/ v1 M
2.在main函数里的while(1)里面写上如下代码:
: E% c+ @% |) c& r9 `! E! `( g$ T3 s% ?7 v5 ?
if(flag1)
4 ^" E9 d4 {4 y! f& y{& [9 s8 d7 v: w- I9 x
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
: @1 q3 Q! @$ F  Y2 |* d+ Y7 W" Q5 w7 ~HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);- y: V5 T( X+ P* b1 b
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
' o& i0 e* y1 a8 ^' NHAL_Delay(1000);
- v' y. i4 J! K, ?HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);$ w  n, m6 k' `* }: ~3 [2 t
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);+ @3 t7 F; w, y) G. z' H# P
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);0 t% {5 u% Q1 [
HAL_Delay(1000);9 V0 q7 s5 g3 I- f/ U
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);3 [# X3 u; `# {; h% J: t3 }
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
1 g- R. p: g5 H( b* s  rHAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);* P! M# O2 a! `0 `$ [; M& g
HAL_Delay(1000);7 Q4 I5 ~7 ^2 D- [/ j$ V" @0 j
}
4 W, c, H9 l5 v! {( eelse if(flag0)
% C0 P( t' p& X& Z8 u( p{4 U2 b- a* F) p' j' s" T
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);- e: C$ B4 H8 z- p9 k' m1 U$ Y
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);8 J* J. X7 }- z# {+ k1 ]
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);; ^1 B# d3 R+ p9 \
}
/ R! j  |6 C7 K$ i1 ?0 F2 Q- ]3.程序烧录
5 m+ B. ^' x% i4 i' F9 a0 c实验结果如下
! K8 M1 I' ]/ C# X# {7 k9 z# O4 q3 m% l6 A% w' ^  E0 X
115439t6vu7tc0tj1p76tt.png 6 k6 \# V3 [& l1 t+ F  C( {
- @! {8 R; ?: n6 k! ^5 }  [
(三)proteus仿真
8 I8 Z$ y, M( Q: l1.搭建固定项目
3 ]% ]/ V1 y# W2 s* k1.新建工程6 u  _4 {  S" L! G8 e( G% M5 L

5 W: L! `9 _0 `8 E( t1 z结果如下
: l# H  ^+ ]9 Z; p4 J
4 O3 M% I4 q# o& q/ y  M- O 115438adjjxj8jndhp8hii.png 7 j( i% }$ R' Z6 i

) h- c+ x# Z. R, i2.绘制系统电路
6 B2 V/ A4 c9 B' Z. V1.选择发光二极管,选择红、黄、绿三种颜色的led- T( @! b. D+ L% J! X7 x

# F  M* g9 [5 y2.分别拖入原理框内,并与对应的端口相连接% B/ T0 `) m$ |" i

. I; I) U0 q! \' w0 L/ e5 s! s3.分别给3个LED配置电源
, L$ \8 g+ l* H3 X8 r8 r2 \6 p6 B/ E
  N; a8 Q! r' T+ i4.将开关拖入原理图内,与设置的外部中断端口相连,并配置电源9 x/ f/ p9 Q. L, L7 M4 h: V% @
0 c4 a$ w& L6 R9 V
结果如下3 Q8 Q4 C# r! b
% M  A, Y' ~8 q5 Q7 f; t
115438uf67ha7qk5ee6fef.png
6 q  c$ y1 A/ p0 a5 z2 c  Q( s" S+ t# g7 X
3.仿真运行; W( A4 ~, Q0 d# |- r' j
选对晶振频率,接入电网,开始仿真7 K/ b1 S4 J! m* L( B. \( a; q
/ R. [" l$ p, A' q) o
结果如下
+ E+ T; }( n: j7 h: t6 T2 r- O. P% ?0 Z5 u, F7 {
115437jxcgjojgvcgozjxj.png
' P( W2 w3 R3 e) \& m% P5 k% R3 J" G8 m
赞 收藏 评论0 发布时间:2025-10-10 19:29

举报

0个回答

所属标签

相似技术帖

官网相关资源

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