0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32的中斷及是如何使用

汽車(chē)電子技術(shù) ? 來(lái)源:華維單片機(jī)編程 ? 作者: 華維 ? 2023-02-09 17:32 ? 次閱讀

中斷是一種機(jī)制,通過(guò)這種機(jī)制,I/O或指令可以暫停處理器的正常執(zhí)行,并像具有最高優(yōu)先級(jí)一樣先執(zhí)行自己的任務(wù)。也就是說(shuō),當(dāng)外部中斷發(fā)生時(shí)(比如來(lái)自某個(gè)傳感器),處理器暫停其正在執(zhí)行,首先提供中斷服務(wù),然后繼續(xù)其正常執(zhí)行。

為了了解 STM32F103C8 中的中斷,我們將使用按鈕作為外部中斷。在這里,我們讓一個(gè)變量從 0 開(kāi)始每秒增1,并將其顯示在16x2 LCD上,每當(dāng)按下按鈕時(shí),LED 亮起,LCD 顯示屏?xí)@示 INTERRUPT。

中斷類(lèi)型和 ISR(中斷服務(wù)程序)

中斷大致可以分為兩類(lèi):

1.硬件中斷: 如果到處理器的信號(hào)來(lái)自某些外部設(shè)備,例如按鈕或傳感器,或者來(lái)自其他信號(hào)并告訴處理器執(zhí)行 ISR 中存在的特定任務(wù)的硬件設(shè)備,則稱(chēng)為硬件中斷。

2.軟件中斷: 由軟件指令產(chǎn)生的中斷。

ISR 中斷服務(wù)程序:

中斷服務(wù)程序或中斷處理程序是其中包含少量指令的事件,當(dāng)發(fā)生中斷時(shí),處理器首先執(zhí)行 ISR 中的這些代碼,然后再繼續(xù)執(zhí)行中斷之前正在執(zhí)行的任務(wù)。

STM32中的中斷語(yǔ)法

Arduino IDE中,啟用ISR具有以下語(yǔ)法attachInterrupt (digitalPinToInterrupt(pin), ISR, mode),同樣可以在 STM32 中使用,因?yàn)楸疚恼鞘褂?arduino IDE 上傳代碼。

digitalPinToInterrupt(pin)

在STM32F103C8中,任何GPIO引腳都可以用于中斷。我們只需要指定用于中斷的輸入引腳。但是,當(dāng)同時(shí)使用多個(gè)中斷時(shí),我們可能需要遵循一些限制。

ISR 中斷子程序

它是一個(gè)在發(fā)生外部中斷時(shí)調(diào)用的中斷處理函數(shù)。它沒(méi)有參數(shù)和返回值。

mode:觸發(fā)中斷的方式條件

上升沿觸發(fā):當(dāng)引腳從 低電平變?yōu)?高電平時(shí)觸發(fā)中斷。

下降沿觸發(fā):當(dāng)引腳從 高電平變?yōu)?低電平時(shí)觸發(fā)中斷。

雙邊沿觸發(fā):當(dāng)引腳從 低電平變?yōu)?高電平或 高電平變?yōu)?低電平時(shí)觸發(fā)中斷(即,當(dāng)引腳電平發(fā)生變化時(shí))。

使用中斷注意事項(xiàng)

中斷服務(wù)程序功能 (ISR) 必須盡可能短。

避免在ISR中使用delay函數(shù)。

電路圖和連接說(shuō)明

圖片

按鈕引腳的一側(cè)連接到 STM32 的 3.3V,另一側(cè)通過(guò)下拉電阻連接到 STM32 的輸入引腳(PA0)。

關(guān)于使用下拉電阻器,當(dāng)按下或釋放按鈕時(shí),微控制器只會(huì)在其輸入端獲得高電平或低電平。如果沒(méi)有下拉電阻,按鈕沒(méi)有按下,輸入端狀態(tài)不確定(不是高也不是低),并且容易受外界影響,輸入端電平可能是浮動(dòng)隨機(jī)值(忽高忽低)。

圖片

STM32F103C8與LCD的連接

下表顯示了 LCD (1602) 和 STM32F103C8 微控制器之間的引腳連接。

圖片

STM32F103C8中斷編程

程序很簡(jiǎn)單,使用Arduino IDE編程。

我們將一個(gè)變量從 0 開(kāi)始每秒自增1并將其顯示在 1602 LCD 上,每當(dāng)按下按鈕時(shí),LED亮起,LCD 顯示屏?xí)@示“Interrupt”,松開(kāi)按鈕LED熄滅。

圖片

//聲明LCD 引腳連接到STM32 的哪個(gè)引腳
const int rs= PB10,en= PB11,d4= PB0,d5= PB1,d6= PC13,d7= PC14;
#include//LCD 庫(kù)
LiquidCrystal lcd (rs,en,d4,d5,d6,d7);//初始化LCD
volatile boolean ledOn = false; //LED狀態(tài)標(biāo)識(shí)


void setup()
{
  lcd.begin(16,2);// 將 LCD 設(shè)置為 16x2 類(lèi)型
  lcd.print("Hello World"); //LCD 顯示 Hello World!
  delay(2000); //延時(shí)2秒
  lcd.clear(); //清屏
  pinMode(PA1,OUTPUT); //將引腳 PA1 設(shè)置為輸出
  pinMode(PA0,INPUT); //將引腳 PA0 設(shè)置為輸入
  int i = 0;
  attachInterrupt(PA0,buttonPressed,CHANGE);// 創(chuàng)建外部中斷
}


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


void buttonPressed() //ISR中斷子函數(shù)
{
  //松開(kāi)按鈕
  if(ledOn) //當(dāng)發(fā)生中斷時(shí)判斷LED 狀態(tài)標(biāo)識(shí),如果LED是亮起狀態(tài)
  {
    ledOn=false; //則設(shè)置LED狀態(tài)標(biāo)識(shí)為熄滅
    digitalWrite(PA1,LOW); //同時(shí)把PA1設(shè)置為低電平,熄滅LED
  }
  
  //按下按鈕
  else // 否則(即如果LED狀態(tài)標(biāo)識(shí)為熄滅)
  {
    ledOn = true; //則設(shè)置LED狀態(tài)標(biāo)識(shí)為亮起
    digitalWrite(PA1,HIGH); //同時(shí)把PA1設(shè)置為高電平,點(diǎn)亮LED
    lcd.setCursor(0,1); //將光標(biāo)設(shè)置在第一列和第二行
    lcd.print("Interrupt"); //LCD顯示Interrupt
  }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19044

    瀏覽量

    228496
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    894

    瀏覽量

    41322
  • i/o
    i/o
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    4559
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32中斷系統(tǒng)詳解 - 第2節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬(wàn)
    發(fā)布于 :2023年09月01日 16:21:24

    STM32中斷系統(tǒng)詳解 - 第4節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬(wàn)
    發(fā)布于 :2023年09月01日 16:23:05

    STM32中斷系統(tǒng)詳解 - 第6節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬(wàn)
    發(fā)布于 :2023年09月01日 16:24:45

    STM32中斷系統(tǒng)詳解 - 第9節(jié) #硬聲創(chuàng)作季

    STM32中斷系統(tǒng)
    充八萬(wàn)
    發(fā)布于 :2023年09月01日 16:27:16

    STM32中斷優(yōu)先級(jí)和開(kāi)關(guān)總中斷教程

    STM32中斷優(yōu)先級(jí)和開(kāi)關(guān)總中斷 教程
    發(fā)表于 11-23 18:03 ?0次下載

    STM32中斷與嵌套快速入門(mén)(NVIC)

    STM32中斷與嵌套快速入門(mén)(NVIC),喜歡的朋友可以下載來(lái)學(xué)習(xí)。
    發(fā)表于 01-15 17:45 ?41次下載

    STM32中斷與嵌套NVIC快速入門(mén)

    STM32 中斷與嵌套NVIC 快速入門(mén),喜歡的朋友可以下載來(lái)學(xué)習(xí)。
    發(fā)表于 01-15 17:45 ?20次下載

    STM32中斷管理函數(shù)

    STM32中斷管理函數(shù),感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-02 19:13 ?15次下載

    中斷是什么?STM32中斷系統(tǒng)介紹和中斷配置步驟資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是中斷是什么?STM32中斷系統(tǒng)介紹和中斷配置步驟資料免費(fèi)下載。
    發(fā)表于 10-11 08:00 ?5次下載
    <b class='flag-5'>中斷</b>是什么?<b class='flag-5'>STM32</b><b class='flag-5'>中斷</b>系統(tǒng)介紹和<b class='flag-5'>中斷</b>配置步驟資料免費(fèi)下載

    STM32中斷及FreeRTOS中斷優(yōu)先級(jí)配置

    STM32中斷,及FreeRTOS中斷優(yōu)先級(jí)配置
    的頭像 發(fā)表于 03-04 11:45 ?8729次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>中斷</b>及FreeRTOS<b class='flag-5'>中斷</b>優(yōu)先級(jí)配置

    STM32中斷與事件的區(qū)別資料下載

    電子發(fā)燒友網(wǎng)為你提供STM32中斷與事件的區(qū)別資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶(hù)指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-23 08:54 ?2次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>中斷</b>與事件的區(qū)別資料下載

    STM32關(guān)全局中斷的方法 STM32中斷類(lèi)型

    STM32中斷很強(qiáng)大,STM32中斷可以嵌套,任何外設(shè)都可以產(chǎn)生中斷,其中中斷和異常是等價(jià)的。
    的頭像 發(fā)表于 07-22 10:52 ?2.8w次閱讀

    STM32中斷系統(tǒng)的工作流程

    一、前言 在之前的STM32中斷系統(tǒng)理論基礎(chǔ)知識(shí)之基本原理及NVIC中,分別中斷的基本原理,中斷的管理機(jī)制和中斷的處理流程進(jìn)行了較為詳細(xì)的
    的頭像 發(fā)表于 06-22 09:17 ?2321次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>中斷</b>系統(tǒng)的工作流程

    為什么有些STM32中斷沒(méi)有子優(yōu)先級(jí)?

    看到一個(gè)交流群在討論關(guān)于【關(guān)于STM32中斷優(yōu)先級(jí)的話(huà)題】,其中就有小伙伴提到:為什么有些STM32中斷沒(méi)有【子優(yōu)先級(jí)】?
    的頭像 發(fā)表于 10-17 15:50 ?762次閱讀
    為什么有些<b class='flag-5'>STM32</b><b class='flag-5'>中斷</b>沒(méi)有子優(yōu)先級(jí)?

    stm32中斷怎么處理的

    STM32是一款非常強(qiáng)大的微控制器系列,具有豐富的外設(shè)和功能。中斷STM32中非常重要的部分,能夠幫助我們提高系統(tǒng)的響應(yīng)速度和效率。本文將詳細(xì)介紹STM32
    的頭像 發(fā)表于 01-02 17:35 ?2324次閱讀