STMCU小助手
发布时间:2022-6-21 17:24
|
中断是一种机制,通过这种机制,I/O或指令可以暂停处理器的正常执行,并像具有最高优先级一样先执行自己的任务。也就是说,当外部中断发生时(比如来自某个传感器),处理器暂停其正在执行,首先提供中断服务,然后继续其正常执行。 % t) c7 e' [; b2 e( k+ ? 为了了解 STM32F103C8 中的中断,我们将使用按钮作为外部中断。在这里,我们让从一个变量从 0 开始每秒增1,并将其显示在16x2 LCD上,当按下按钮时,LED亮起,LCD 显示屏会显示 INTERRUPT,松开按钮LED熄灭。 中断类型和 ISR(中断服务程序) 中断大致可以分为两类:; q z0 V6 s; X ~; ]) E. j3 i. p! E 硬件中断: 如果到处理器的信号来自某些外部设备,例如按钮或传感器,或者来自其他信号并告诉处理器执行 ISR 中存在的特定任务的硬件设备,则称为硬件中断。 0 n5 r! Y, d1 Z/ W 软件中断:由软件指令产生的中断。) x/ E2 N1 x2 Y7 H5 Z # z" `# F* [! ^+ b2 ` 中断服务程序:中断服务程序或中断处理程序是其中包含少量指令的事件,当发生中断时,处理器首先执行 ISR 中的这些代码,然后再继续执行中断之前正在执行的任务。6 K( X+ e5 j: A9 Z ) H! ^3 q% E* X' ^+ E2 B/ v2 T STM32中的中断语法% Y7 a- Q4 }! S 在Arduino IDE中,启用ISR具有以下语法attachInterrupt (digitalPinToInterrupt(pin), ISR, mode),同样可以在 STM32 中使用,因为本文正是使用 arduino IDE 上传代码。3 W# g/ m) x: X. b 8 c6 } x8 k6 B, } O& Q digitalPinToInterrupt(pin):就像在Arduino board Uno中,我们有引脚2,3,而在mega中,我们有2,3,18,19,20,21用于中断。在STM32F103C8中,我们也有中断引脚,任何GPIO引脚都可以用于中断。我们只需要指定用于中断的输入引脚。但是,当同时使用多个中断时,我们可能需要遵循一些限制。4 ~1 p% W0 i( x$ ^1 ?& r- L - H+ w% z7 @) P2 {9 E ISR:它是一个在发生外部中断时调用的中断处理函数。它没有参数和返回值。 mode:触发中断的方式条件! _/ I# e% w5 K( g3 J " y/ U( I0 p3 E: W6 L& P8 j 上升沿:当引脚从 低电平变为 高电平时触发中断。 下降沿:当引脚从 高电平变为 低电平时触发中断。 双边沿触发(CHANGE):当引脚从 低电平变为 高电平或 高电平变为 低电平时触发中断(即,当引脚电平发生变化时)。% a) _8 \4 }5 Q: Z3 H3 Y- ^ . e/ d+ y+ f( p! v5 b9 w 使用中断注意事项 2 H" O6 G" ]. m( r! B9 S0 o m 中断服务程序功能 (ISR) 必须尽可能短。 避免在ISR中使用delay函数。6 P+ _( K1 }6 I1 I4 ] 电路图和连接说明
' B& e0 A- e5 }; ~1 r- h! P8 t* a% d 按钮引脚的一侧连接到 STM32 的 3.3V,另一侧通过下拉电阻连接到 STM32 的输入引脚(PA0)。 ; Q* u# u" H9 X4 T; h" K& ]( j1 Y 关于使用下拉电阻器,当按下或释放按钮时,微控制器只会在其输入端获得高电平或低电平。如果没有下拉电阻,按钮没有按下,输入端状态不确定(不是高也不是低),并且容易受外界影响,输入端电平可能是浮动随机值(忽高忽低)。
. E) c3 B3 h% p7 f7 r% ~8 J STM32F103C8与LCD的连接5 \5 o: H- ?# u Y% c1 l 下表显示了 LCD (1602) 和 STM32F103C8 微控制器之间的引脚连接。& V; j6 X, T& e# Y$ v" j; e
STM32F103C8中断编程 程序很简单,使用Arduino IDE编程。7 J- Z( X. c2 V7 q$ E2 C 我们将一个变量从 0 开始每秒自增1并将其显示在 1602 LCD 上,每当按下按钮时,LED亮起,LCD 显示屏会显示“Interrupt”,松开按钮LED熄灭。+ e U% ~' g4 k+ k- v ; X+ t8 u* a5 m5 m
|
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版