在STM32F103C8T6中与中断合作蓝色药丸板

在本教程中,我将讨论微控制器中断的重要概念之一。另外,我将向您展示如何在STM32F103C8T6蓝色药丸板中使用中断。使用STM32中断上的这些知识,您可以实现更好的代码,以有效使用MCU。

介绍

中断系统可能是任何MCU中的重要功能之一。STM32F103C8T6也不例外。在微控制器中中断是一种硬件机制,可以告知处理器停止执行当前指令并执行一组特殊的指令,通常是优先级。

在里面Arduino中断教程,我讨论了有关中断,民意调查和其他相关主题的大量讨论。我建议您在进一步进行之前阅读该教程,因为所有微控制器的一般解释或多或少都是相同的。

主要区别将是微控制器内部中断的实际硬件实现。我将在下一部分中谈论STM32F103C8T6中的中断。

来到这个项目,我将通过将按钮连接到MCU并触发MCU的外部中断,来实现一个简单的电路,以证明在STM32F103C8T6蓝色药丸板中中断。

中断类型和ISR

基本上,中断分为两种类型。他们是:

  • 硬件中断
  • 软件中断

硬件中断

构成处理器核心外部源的任何中断都称为硬件中断。最简单的示例是从外部按钮中断。

软件中断

如果在MCU上运行的程序存在问题,则将生成软件中断。

中断服务例程或中断处理程序

当发生中断时,相应的中断服务程序(ISR)和手臂术语中,会调用中断处理程序。如果中断,当前指令的执行将暂时停止,并执行中断处理程序中的指令。完成后,执行返回到停止的说明。

关于中断服务例程有两件事要注意。首先是ISR中的指令必须尽可能最低。第二件事是您不能使用ISR中的delay()之类的阻止函数。

中断STM32F103C8T6

在STM32蓝色药丸或特定于STM32F103C8T6 MCU中,有一个称为NVIC的特殊硬件单元(嵌套的缩写矢量中断控制器),负责管理所有外部中断和外围中断。

如果您还记得Arduino的外部中断,它只有两个外部中断,即数字IO引脚2和3上的INT0和INT1。但是,在STM32F103C8T6的情况下,您可以在任何GPIO引脚上有多达16个外部中断。您所要做的就是根据电路设计选择程序中的合适销钉。

如何在STM32F103C8T6中启用中断?

由于我们使用Arduino IDE开发了STM32蓝色药丸应用程序,因此我们可以使用相同的语法在STM32F103C8T6上配置外部中断。这是由称为“ actactInterrupt()”的特殊函数完成的,下面给出了其语法:

AttachInterRupt(DigitalPintoInterrupt(PIN),ISR,模式);

从上面的语法中可以看到,AttachInterrupt()函数需要三个参数。他们是:

  • DigitalPintoInterrupt(PIN)
  • ISR
  • 模式

在第一个参数DigitalPintoInterrupt(PIN)中,您必须提及预期外部中断的MCU的PIN。例如,如果按钮连接到PA0,则该参数将是“ DigitalPintoInterrupt(PA0)”。

第二个参数是中断处理程序的名称或中断服务例程(ISR)函数。该函数必须具有无效返回类型,不应采用任何参数。

最后,attachInterrupt()函数中的第三个参数是指定触发中断的模式,即在信号转换的何时,必须触发中断。通常,在Arduino环境中,此论点可以具有五个预定义常数中的任何一个,但是如果使用STM32,则可以从以下三个值中选择一个。

  • 更改:当引脚值发生变化时,触发中断。
  • 上升:当引脚值从低至高升高时,触发中断。
  • 下降:当引脚值从高到低点降低时,触发中断。

电路原理图

现在,我们已经在STM32F103C8T6 MCU中看到了一些有关中断的信息,让我们继续进行该项目的演示。下图表示一个简单的电路图,用于将按钮与STM32 MCU接口并触发中断。

在STM32F103C8T6电路图中使用中断1

需要组件

编程STM32蓝色药丸,用于纽扣中断

首先,该按钮连接到引脚PA0。另外,销钉IS PA0在4.7kΩ电阻的帮助下将其拉高。按钮的另一端连接到GND。

以下代码用于激活PIN PA0上的中断,Button_isr将有助于切换LED。

int ledpin = pc13;
int buttonpin = pa0;

int ledtoggle;
int preadstate = high;
unsigned int先前= 0;
挥发性int纽扣;
int buttondebounce = 20;

void setup()
{
Pinmode(LEDPIN,输出);
pinmode(buttonpin,输入);
AttachInterRupt(DigitalPintoInterrupt(buttonpin),button_isr,更改);
}

void loop()
{
if(((米利斯() - 上press)> buttondebounce && buttonflag)
{
pronepress = millis();
if(DigitalRead(buttonpin)== low && preadstate ==高)
{
ledToggle =!ledToggle;
DigitalWrite(LEDPIN,LEDTOGGLE);
前州= low;
}

else if(DigitalRead(buttonpin)== High && preadstate ==低)
{
前州=高;
}
buttonflag = 0;
}
}

void button_isr()
{
buttonflag = 1;
}

结论

这里实施了一个简单的项目,以证明STM32F103C8T6蓝色药丸中外部中断的工作。按下按钮时,触发中断,STM32 MCU将执行简单的ISR并返回以切换LED的状态。

一个回应

发表评论

您的电子邮件地址不会被公开。

电子豪华粉丝
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu
map