chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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速成筆記(3)—中斷

冬至子 ? 來(lái)源:二土電子 ? 作者:二土電子 ? 2023-10-24 09:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、什么是中斷

首先介紹一下什么是中斷。在實(shí)際開(kāi)發(fā)過(guò)程中,中斷是很有必要的。比如需要針對(duì)某種特殊情況進(jìn)行快速響應(yīng),單純的使用一個(gè)while輪詢似乎并不能滿足。中斷的概念非常好理解,舉個(gè)經(jīng)典例子。比如你在家里看電視,忽然有人敲門(mén),你臨時(shí)把電視暫停了,轉(zhuǎn)去開(kāi)門(mén)。開(kāi)完門(mén)之后再次回來(lái)繼續(xù)看電視。

中斷也就是這種流程??措娨暤男袨榫皖愃朴诔绦蛑衜ain函數(shù)的while,輪詢執(zhí)行業(yè)務(wù)。忽然有人敲門(mén),對(duì)應(yīng)程序運(yùn)行過(guò)程中忽然產(chǎn)生了一個(gè)中斷請(qǐng)求。此時(shí)暫停電視,對(duì)應(yīng)于此時(shí)程序中斷當(dāng)前的業(yè)務(wù),轉(zhuǎn)而去處理中斷業(yè)務(wù)(開(kāi)門(mén))。最后,中斷業(yè)務(wù)處理完成后,再繼續(xù)執(zhí)行main函數(shù)while輪詢中的業(yè)務(wù)。簡(jiǎn)單用一個(gè)圖來(lái)表示一下

圖片

中斷概念示意圖

根據(jù)中文參考手冊(cè)的介紹,STM32F103ZET6除了一些特殊的中斷外,常用的中斷有60個(gè),這些中斷是通過(guò)中斷控制器來(lái)有條不紊地分配執(zhí)行的。

二、中斷的相關(guān)概念

2.1 中斷優(yōu)先級(jí)

從字面意思來(lái)講,優(yōu)先級(jí)用來(lái)區(qū)分中斷的響應(yīng)順序。當(dāng)同時(shí)接收到多個(gè)中斷請(qǐng)求時(shí),中斷控制器會(huì)根據(jù)中斷優(yōu)先級(jí)來(lái)決定中斷處理的順序,優(yōu)先級(jí)高的會(huì)先被處理。如果在處理某個(gè)中斷請(qǐng)求時(shí)又來(lái)了一個(gè)中斷,這時(shí)會(huì)根據(jù)兩個(gè)中斷的中斷優(yōu)先級(jí)來(lái)確定處理方式。

如果新來(lái)的中斷優(yōu)先級(jí)比當(dāng)前中斷的優(yōu)先級(jí)高,則會(huì)停止對(duì)當(dāng)前中斷的處理,轉(zhuǎn)而處理新的中斷。反之,如果新來(lái)的中斷優(yōu)先級(jí)比當(dāng)前中斷的優(yōu)先級(jí)低,則需要等到當(dāng)前中斷處理完成后,再去處理新來(lái)的中斷。

中斷優(yōu)先級(jí)有兩種,一種是搶占優(yōu)先級(jí),一種是響應(yīng)優(yōu)先級(jí)。響應(yīng)優(yōu)先級(jí)通常又被稱為“亞優(yōu)先級(jí)”或者“副優(yōu)先級(jí)”。當(dāng)兩個(gè)中斷的搶占優(yōu)先級(jí)相同時(shí),用相應(yīng)優(yōu)先級(jí)來(lái)決定中斷的處理順序。

如果兩個(gè)中斷的搶占優(yōu)先級(jí)和相應(yīng)優(yōu)先級(jí)相同,則根據(jù)芯片手冊(cè)中的中斷向量號(hào)來(lái)決定中斷的處理順序。比如同時(shí)來(lái)了兩個(gè)中斷請(qǐng)求,在搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)均相同時(shí),中斷向量號(hào)為41的中斷會(huì)比中斷向量號(hào)為42的中斷先被處理。

STM32提供了16個(gè)可編程的優(yōu)先等級(jí)(使用了4位中斷優(yōu)先級(jí)),優(yōu)先級(jí)分組可以使用庫(kù)函數(shù)提供的NVIC_PriorityGroupConfig()設(shè)置。

2.2 中斷嵌套

一些低優(yōu)先級(jí)的中斷可以被高優(yōu)先級(jí)中斷打斷,這種情況叫做中斷嵌套。

2.3 中斷服務(wù)函數(shù)

中斷服務(wù)函數(shù)就是在進(jìn)入中斷后需要執(zhí)行的內(nèi)容。

中斷服務(wù)函數(shù)有特定的函數(shù)名,可以在下圖文件中搜索“IRQ”找到。

圖片

中斷服務(wù)函數(shù)名

2.4 中斷標(biāo)志位

不同的中斷會(huì)有對(duì)應(yīng)的中斷標(biāo)志位,通常標(biāo)志位默認(rèn)值為0。當(dāng)產(chǎn)生中斷請(qǐng)求時(shí),標(biāo)志位被置1。比如設(shè)置一個(gè)串口接收完成中斷,串口接收完成標(biāo)志位初始值為0。當(dāng)串口接收完成后對(duì)應(yīng)的串口接收完成標(biāo)志位會(huì)被置1。

在中斷服務(wù)函數(shù)中檢測(cè)該標(biāo)志位的值,來(lái)確定是否是串口接收完成中斷產(chǎn)生了。每次中斷服務(wù)函數(shù)執(zhí)行結(jié)束后,需要清除一下對(duì)應(yīng)的中斷標(biāo)志位。

三、外部中斷EXIT

STM32F103ZET6有一個(gè)外部中斷控制器(EXIT),可以支持20個(gè)軟件的中斷/事件請(qǐng)求,其中外部中斷的EXIT0~EXIT15同坐IO中斷。

圖片

外部中斷IO對(duì)應(yīng)

其他詳細(xì)的介紹這里就不再說(shuō)明。

四、中斷程序配置

這里以配置PA0(按鍵WK UP)的外部中斷為例,展示一下庫(kù)函數(shù)開(kāi)發(fā)時(shí),外部中斷的配置流程。關(guān)于其他中斷的配置,后續(xù)使用其他外設(shè)時(shí)會(huì)單獨(dú)介紹。

想要實(shí)現(xiàn)的效果是,利用外部中斷實(shí)現(xiàn)按下WK UP,LED1點(diǎn)亮。

4.1 設(shè)置中斷分組并使能中斷

這里使用外部中斷,需要開(kāi)啟AFIO時(shí)鐘,設(shè)置IO與外部中斷線的映射關(guān)系。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);   // 開(kāi)啟AFIO時(shí)鐘

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);   //選擇GPIO管腳用作外部中斷線路

設(shè)置中斷分組并使能中斷時(shí),庫(kù)函數(shù)提供了一個(gè)結(jié)構(gòu)體,我們直接配置這個(gè)結(jié)構(gòu)體就可以了。

//EXTI0 NVIC 配置
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;   //EXTI0中斷通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;   //搶占優(yōu)先級(jí)
    NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;   //子優(yōu)先級(jí)
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //IRQ通道使能
    NVIC_Init(&NVIC_InitStructure);    //根據(jù)指定的參數(shù)初始化VIC寄存器

需要注意的是,配置優(yōu)先級(jí)時(shí),數(shù)值越大,優(yōu)先級(jí)越低。

4.2 初始化EXIT

初始化EXIT時(shí),庫(kù)函數(shù)也提供了一個(gè)結(jié)構(gòu)體,其中包括中斷線,EXIT模式,觸發(fā)方式以及EXIT使能或者失能。由按鍵檢測(cè)一節(jié)了解到,WK UP按下時(shí),會(huì)產(chǎn)生一個(gè)上升沿。因此觸發(fā)方式我們選擇上升沿觸發(fā)。

EXTI_InitStructure.EXTI_Line=EXTI_Line0;   // EXIT0
    EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;   // 中斷
    EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;   // 上升沿觸發(fā)
    EXTI_InitStructure.EXTI_LineCmd=ENABLE;   // 使能
    EXTI_Init(&EXTI_InitStructure);

整體配置函數(shù)如下

/*
 *==============================================================================
 *函數(shù)名稱:Exit_Init
 *函數(shù)功能:初始化外部中斷
 *輸入?yún)?shù):無(wú)
 *返回值:無(wú)
 *備  注:無(wú)
 *==============================================================================
 */
void Exit_Init (void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    EXTI_InitTypeDef  EXTI_InitStructure;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);   // 開(kāi)啟AFIO時(shí)鐘

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);   //選擇GPIO管腳用作外部中斷線路
    
    //EXTI0 NVIC 配置
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;   //EXTI0中斷通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;   //搶占優(yōu)先級(jí)
    NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;   //子優(yōu)先級(jí)
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //IRQ通道使能
    NVIC_Init(&NVIC_InitStructure);    //根據(jù)指定的參數(shù)初始化VIC寄存器
    
    EXTI_InitStructure.EXTI_Line=EXTI_Line0;   // EXIT0
    EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;   // 中斷
    EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;   // 上升沿觸發(fā)
    EXTI_InitStructure.EXTI_LineCmd=ENABLE;   // 使能
    EXTI_Init(&EXTI_InitStructure);
}

4.3 編寫(xiě)中斷服務(wù)函數(shù)

上面介紹了如何找中斷服務(wù)函數(shù)的函數(shù)名,這里直接開(kāi)始寫(xiě)中斷服務(wù)函數(shù)。這里的中斷服務(wù)函數(shù)比較簡(jiǎn)單,直接點(diǎn)亮LED1即可。

/*
 *==============================================================================
 *函數(shù)名稱:EXTI0_IRQHandler
 *函數(shù)功能:外部中斷0中斷服務(wù)函數(shù)
 *輸入?yún)?shù):無(wú)
 *返回值:無(wú)
 *備  注:無(wú)
 *==============================================================================
 */
void EXTI0_IRQHandler(void)
{
    // 如果EXIT0中斷標(biāo)志位被置1
    if(EXTI_GetITStatus (EXTI_Line0)==1)
    {
        Med_Led_StateCtrl (LED1,LED_ON);   // 點(diǎn)亮LED1
    }
    EXTI_ClearITPendingBit (EXTI_Line0);   // 清除中斷標(biāo)志位
}

至此,按下WK UP后,LED1會(huì)點(diǎn)亮。這種方法與之前的按鍵點(diǎn)亮LED有什么區(qū)別?之前的按鍵點(diǎn)亮LED是在main函數(shù)的while中實(shí)現(xiàn)的,而利用外部中斷的方法,是在外部中斷的中斷服務(wù)函數(shù)中實(shí)現(xiàn)的。即使main函數(shù)的while輪詢業(yè)務(wù)中沒(méi)有按鍵業(yè)務(wù),按鍵依舊可以起作用。

五、注意事項(xiàng)

  • ? 中斷服務(wù)函數(shù)無(wú)需在.h文件中聲明
  • ? 中斷服務(wù)函數(shù)中不要有過(guò)長(zhǎng)的業(yè)務(wù)
  • ? 中斷服務(wù)函數(shù)最后需要清除中斷標(biāo)志位
聲明:本文內(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)投訴
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1299

    瀏覽量

    55243
  • 中斷控制器
    +關(guān)注

    關(guān)注

    0

    文章

    61

    瀏覽量

    9756
  • 串口中斷
    +關(guān)注

    關(guān)注

    0

    文章

    67

    瀏覽量

    14494
  • STM32F103ZET6
    +關(guān)注

    關(guān)注

    9

    文章

    67

    瀏覽量

    21978
  • AFIO
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    3221
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32各模塊學(xué)習(xí)筆記

    中斷......................................................3 STM32筆記之三 時(shí)鐘系統(tǒng)
    發(fā)表于 11-30 03:32 ?3308次閱讀

    stm32中斷與外部中斷

    前言:1.有51單片機(jī)開(kāi)發(fā)經(jīng)驗(yàn)會(huì)比較容易理解中斷優(yōu)先級(jí);2.本篇博文基于STM32F103RCT6芯片和3.5.0標(biāo)準(zhǔn)庫(kù)編寫(xiě);3.作為自己學(xué)習(xí)的一些心得,如有不足之處,還請(qǐng)前輩多多指教;一
    發(fā)表于 11-22 13:06 ?26次下載
    <b class='flag-5'>stm32</b>之<b class='flag-5'>中斷</b>與外部<b class='flag-5'>中斷</b>

    STM32F103學(xué)習(xí)筆記-中斷中斷的控制

    筆記中斷的定義入手,對(duì)中斷的種類、作用和配置的思路進(jìn)行了大致的闡述。由于水平不高,若有錯(cuò)誤,還懇請(qǐng)各位批評(píng)指正。
    發(fā)表于 11-24 17:21 ?9次下載
    <b class='flag-5'>STM32</b>F103學(xué)習(xí)<b class='flag-5'>筆記</b>-<b class='flag-5'>中斷</b>與<b class='flag-5'>中斷</b>的控制

    STM32學(xué)習(xí)筆記(4)——NVIC中斷優(yōu)先級(jí)管理和外部中斷EXTI

    STM32學(xué)習(xí)筆記(4)——NVIC中斷優(yōu)先級(jí)管理和外部中斷EXTI一、NVIC中斷優(yōu)先級(jí)管理1. 中斷
    發(fā)表于 11-26 11:36 ?2次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)<b class='flag-5'>筆記</b>(4)——NVIC<b class='flag-5'>中斷</b>優(yōu)先級(jí)管理和外部<b class='flag-5'>中斷</b>EXTI

    STM32核心筆記

    STM32核心筆記文章目錄STM32核心筆記1. 下載程序的兩種方式1.1 串口ISP1.2 仿真器2. 認(rèn)識(shí)寄存器3. 地址總線與外設(shè)地址
    發(fā)表于 12-04 12:21 ?2次下載
    <b class='flag-5'>STM32</b>核心<b class='flag-5'>筆記</b>

    STM32學(xué)習(xí)筆記--中斷系統(tǒng)

    目錄:一、STM32中斷系統(tǒng)二、NVIC中斷管理三、中斷配置相關(guān)函數(shù)一、STM32中斷系統(tǒng)
    發(fā)表于 12-04 18:36 ?4次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)<b class='flag-5'>筆記</b>--<b class='flag-5'>中斷</b>系統(tǒng)

    stm32學(xué)習(xí)筆記-中斷系統(tǒng)

    文章目錄問(wèn)題引入1、中斷系統(tǒng)概述。1.1 為什么要中斷中斷意義)中斷應(yīng)用場(chǎng)合:1.2 中斷處理過(guò)程i.保護(hù)現(xiàn)場(chǎng)ii.執(zhí)行
    發(fā)表于 01-13 10:19 ?0次下載
    <b class='flag-5'>stm32</b>學(xué)習(xí)<b class='flag-5'>筆記</b>-<b class='flag-5'>中斷</b>系統(tǒng)

    STM32自學(xué)筆記(二)中斷

    32位寄存器,控制CM3內(nèi)核的256個(gè)中斷 由于STM32F103的可屏蔽中斷只有60個(gè),故我們只會(huì)用到 ISER[0] 和ISER[1] . ISER[0] 的bit0~bit31.
    發(fā)表于 01-14 15:10 ?0次下載
    <b class='flag-5'>STM32</b>自學(xué)<b class='flag-5'>筆記</b>(二)<b class='flag-5'>中斷</b>

    stm32的NVIC中斷

    NVIC中斷優(yōu)先級(jí)分組CM3內(nèi)核支持256個(gè)中斷,其中包含了16個(gè)內(nèi)核中斷以及240個(gè)外部中斷,并且具有256級(jí)的可編程
    發(fā)表于 01-14 15:23 ?8次下載
    <b class='flag-5'>stm32</b>的NVIC<b class='flag-5'>中斷</b>

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

    STM32中斷優(yōu)先級(jí)和開(kāi)關(guān)總中斷一,中斷優(yōu)先級(jí):STM32(Cortex-M3)中的優(yōu)先級(jí)概念
    發(fā)表于 01-14 15:24 ?13次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>筆記</b>之<b class='flag-5'>中斷</b>優(yōu)先級(jí)和開(kāi)關(guān)總<b class='flag-5'>中斷</b>

    stm32軟硬件學(xué)習(xí)筆記3、中斷系統(tǒng)

    中斷類型與優(yōu)先級(jí)中斷分為兩個(gè)類型:內(nèi)核異常和外部中斷。上圖是stm32中斷向量表的部分內(nèi)容和優(yōu)先級(jí)。上圖-
    發(fā)表于 01-14 16:05 ?3次下載
    <b class='flag-5'>stm32</b>軟硬件學(xué)習(xí)<b class='flag-5'>筆記</b><b class='flag-5'>3</b>、<b class='flag-5'>中斷</b>系統(tǒng)

    STM32G0開(kāi)發(fā)筆記:串口中斷的使用

    使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,以下為串口中斷的使用。
    的頭像 發(fā)表于 01-17 10:46 ?3112次閱讀

    STM32入門(mén)學(xué)習(xí)筆記中斷架構(gòu)(下)

    Cortex-M3內(nèi)核支持256個(gè)中斷,其中包含了16個(gè)內(nèi)核中斷和240個(gè)外部中斷,并且具有256級(jí)的可編程中斷設(shè)置。但
    的頭像 發(fā)表于 02-16 09:57 ?1327次閱讀
    <b class='flag-5'>STM32</b>入門(mén)學(xué)習(xí)<b class='flag-5'>筆記</b>之<b class='flag-5'>中斷</b>架構(gòu)(下)

    STM32入門(mén)學(xué)習(xí)筆記中斷架構(gòu)(上)

    Cortex-M3內(nèi)核支持256個(gè)中斷,其中包含了16個(gè)內(nèi)核中斷和240個(gè)外部中斷,并且具有256級(jí)的可編程中斷設(shè)置。但
    的頭像 發(fā)表于 02-16 09:57 ?1931次閱讀

    STM32學(xué)習(xí)筆記一外部中斷

    STM32 的每個(gè) IO 都可以作為外部中斷中斷輸入口。STM32F103 的中斷控制器支持 19 個(gè)外部
    的頭像 發(fā)表于 10-24 14:12 ?2340次閱讀
    <b class='flag-5'>STM32</b>學(xué)習(xí)<b class='flag-5'>筆記</b>一外部<b class='flag-5'>中斷</b>