0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32的中断及是如何使用

汽车电子技术 来源:华维单片机编程 作者: 华维 2023-02-09 17:32 次阅读

中断是一种机制,通过这种机制,I/O或指令可以暂停处理器的正常执行,并像具有最高优先级一样先执行自己的任务。也就是说,当外部中断发生时(比如来自某个传感器),处理器暂停其正在执行,首先提供中断服务,然后继续其正常执行。

为了了解 STM32F103C8 中的中断,我们将使用按钮作为外部中断。在这里,我们让一个变量从 0 开始每秒增1,并将其显示在16x2 LCD上,每当按下按钮时,LED 亮起,LCD 显示屏会显示 INTERRUPT。

中断类型和 ISR(中断服务程序)

中断大致可以分为两类:

1.硬件中断: 如果到处理器的信号来自某些外部设备,例如按钮或传感器,或者来自其他信号并告诉处理器执行 ISR 中存在的特定任务的硬件设备,则称为硬件中断。

2.软件中断: 由软件指令产生的中断。

ISR 中断服务程序:

中断服务程序或中断处理程序是其中包含少量指令的事件,当发生中断时,处理器首先执行 ISR 中的这些代码,然后再继续执行中断之前正在执行的任务。

STM32中的中断语法

Arduino IDE中,启用ISR具有以下语法attachInterrupt (digitalPinToInterrupt(pin), ISR, mode),同样可以在 STM32 中使用,因为本文正是使用 arduino IDE 上传代码。

digitalPinToInterrupt(pin)

在STM32F103C8中,任何GPIO引脚都可以用于中断。我们只需要指定用于中断的输入引脚。但是,当同时使用多个中断时,我们可能需要遵循一些限制。

ISR 中断子程序

它是一个在发生外部中断时调用的中断处理函数。它没有参数和返回值。

mode:触发中断的方式条件

上升沿触发:当引脚从 低电平变为 高电平时触发中断。

下降沿触发:当引脚从 高电平变为 低电平时触发中断。

双边沿触发:当引脚从 低电平变为 高电平或 高电平变为 低电平时触发中断(即,当引脚电平发生变化时)。

使用中断注意事项

中断服务程序功能 (ISR) 必须尽可能短。

避免在ISR中使用delay函数。

电路图和连接说明

图片

按钮引脚的一侧连接到 STM32 的 3.3V,另一侧通过下拉电阻连接到 STM32 的输入引脚(PA0)。

关于使用下拉电阻器,当按下或释放按钮时,微控制器只会在其输入端获得高电平或低电平。如果没有下拉电阻,按钮没有按下,输入端状态不确定(不是高也不是低),并且容易受外界影响,输入端电平可能是浮动随机值(忽高忽低)。

图片

STM32F103C8与LCD的连接

下表显示了 LCD (1602) 和 STM32F103C8 微控制器之间的引脚连接。

图片

STM32F103C8中断编程

程序很简单,使用Arduino IDE编程。

我们将一个变量从 0 开始每秒自增1并将其显示在 1602 LCD 上,每当按下按钮时,LED亮起,LCD 显示屏会显示“Interrupt”,松开按钮LED熄灭。

图片

//声明LCD 引脚连接到STM32 的哪个引脚
const int rs= PB10,en= PB11,d4= PB0,d5= PB1,d6= PC13,d7= PC14;
#include//LCD 库
LiquidCrystal lcd (rs,en,d4,d5,d6,d7);//初始化LCD
volatile boolean ledOn = false; //LED状态标识


void setup()
{
  lcd.begin(16,2);// 将 LCD 设置为 16x2 类型
  lcd.print("Hello World"); //LCD 显示 Hello World!
  delay(2000); //延时2秒
  lcd.clear(); //清屏
  pinMode(PA1,OUTPUT); //将引脚 PA1 设置为输出
  pinMode(PA0,INPUT); //将引脚 PA0 设置为输入
  int i = 0;
  attachInterrupt(PA0,buttonPressed,CHANGE);// 创建外部中断
}


void loop()
{
  lcd.clear();//清屏
  lcd.print("NUMBER:"); //LCD显示NUMBER:
  lcd.print(i);//LCD 显示“i”值
  ++i; //“i” 自增 1
  delay(1000); //延时1秒
}


void buttonPressed() //ISR中断子函数
{
  //松开按钮
  if(ledOn) //当发生中断时判断LED 状态标识,如果LED是亮起状态
  {
    ledOn=false; //则设置LED状态标识为熄灭
    digitalWrite(PA1,LOW); //同时把PA1设置为低电平,熄灭LED
  }
  
  //按下按钮
  else // 否则(即如果LED状态标识为熄灭)
  {
    ledOn = true; //则设置LED状态标识为亮起
    digitalWrite(PA1,HIGH); //同时把PA1设置为高电平,点亮LED
    lcd.setCursor(0,1); //将光标设置在第一列和第二行
    lcd.print("Interrupt"); //LCD显示Interrupt
  }
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18954

    浏览量

    227651
  • 中断
    +关注

    关注

    5

    文章

    889

    浏览量

    41243
  • i/o
    i/o
    +关注

    关注

    0

    文章

    33

    浏览量

    4557
收藏 人收藏

    评论

    相关推荐

    STM32中断系统详解 - 第2节 #硬声创作季

    STM32中断系统
    充八万
    发布于 :2023年09月01日 16:21:24

    STM32中断系统详解 - 第4节 #硬声创作季

    STM32中断系统
    充八万
    发布于 :2023年09月01日 16:23:05

    STM32中断系统详解 - 第6节 #硬声创作季

    STM32中断系统
    充八万
    发布于 :2023年09月01日 16:24:45

    STM32中断系统详解 - 第9节 #硬声创作季

    STM32中断系统
    充八万
    发布于 :2023年09月01日 16:27:16

    STM32中断优先级和开关总中断教程

    STM32中断优先级和开关总中断 教程
    发表于 11-23 18:03 0次下载

    STM32中断与嵌套快速入门(NVIC)

    STM32中断与嵌套快速入门(NVIC),喜欢的朋友可以下载来学习。
    发表于 01-15 17:45 41次下载

    STM32中断与嵌套NVIC快速入门

    STM32 中断与嵌套NVIC 快速入门,喜欢的朋友可以下载来学习。
    发表于 01-15 17:45 20次下载

    STM32中断管理函数

    STM32中断管理函数,感兴趣的小伙伴们可以瞧一瞧。
    发表于 11-02 19:13 15次下载

    中断是什么?STM32中断系统介绍和中断配置步骤资料免费下载

    本文档的主要内容详细介绍的是中断是什么?STM32中断系统介绍和中断配置步骤资料免费下载。
    发表于 10-11 08:00 5次下载
    <b class='flag-5'>中断</b>是什么?<b class='flag-5'>STM32</b><b class='flag-5'>中断</b>系统介绍和<b class='flag-5'>中断</b>配置步骤资料免费下载

    STM32中断及FreeRTOS中断优先级配置

    STM32中断,及FreeRTOS中断优先级配置
    的头像 发表于 03-04 11:45 8651次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>中断</b>及FreeRTOS<b class='flag-5'>中断</b>优先级配置

    STM32中断与事件的区别资料下载

    电子发烧友网为你提供STM32中断与事件的区别资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-23 08:54 2次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>中断</b>与事件的区别资料下载

    STM32关全局中断的方法 STM32中断类型

    STM32中断很强大,STM32中断可以嵌套,任何外设都可以产生中断,其中中断和异常是等价的。
    的头像 发表于 07-22 10:52 2.8w次阅读

    STM32中断系统的工作流程

    一、前言 在之前的STM32中断系统理论基础知识之基本原理及NVIC中,分别中断的基本原理,中断的管理机制和中断的处理流程进行了较为详细的
    的头像 发表于 06-22 09:17 2236次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>中断</b>系统的工作流程

    为什么有些STM32中断没有子优先级?

    看到一个交流群在讨论关于【关于STM32中断优先级的话题】,其中就有小伙伴提到:为什么有些STM32中断没有【子优先级】?
    的头像 发表于 10-17 15:50 718次阅读
    为什么有些<b class='flag-5'>STM32</b><b class='flag-5'>中断</b>没有子优先级?

    stm32中断怎么处理的

    STM32是一款非常强大的微控制器系列,具有丰富的外设和功能。中断STM32中非常重要的部分,能够帮助我们提高系统的响应速度和效率。本文将详细介绍STM32
    的头像 发表于 01-02 17:35 2230次阅读