外部中斷機(jī)制
??本章我們?nèi)匀皇峭ㄟ^(guò)按鍵來(lái)控制LED,只不過(guò)實(shí)現(xiàn)方式由輪詢(xún)變?yōu)榱送獠恐袛?。為什么需要外部中斷?為了給CPU減輕負(fù)擔(dān)。
??舉個(gè)例子
??比如你今天有個(gè)快遞,快遞一般放在前臺(tái)或是門(mén)衛(wèi)。你有兩種方法,1、不停問(wèn)前臺(tái),你的快遞到了沒(méi)有;2、等快遞到了,讓前臺(tái)告訴你。
??前者就是輪詢(xún),后者就是外部中斷。
??外部中斷是由引腳檢測(cè)到的中斷。中斷可以由上升沿、下降沿或雙邊沿觸發(fā)。換句話(huà)說(shuō),中斷不是由CPU去“詢(xún)問(wèn)”,而是由中斷控制器“通知”的。
??ARM的體系架構(gòu)決定了處理器是執(zhí)行完當(dāng)前指令后再去檢查是否有中斷發(fā)生。
??硬件:中斷源->中斷控制器篩選->CPU核保存當(dāng)前工作狀態(tài),跳到對(duì)應(yīng)異常向量表
??軟件:根據(jù)中斷號(hào),執(zhí)行對(duì)應(yīng)中斷服務(wù)程序,執(zhí)行完畢恢復(fù)各類(lèi)寄存器值,并返回。
??中斷向量表,基本上所有的外設(shè),都有中斷。所以中斷很重要
??屬于外部中斷的線(xiàn)共有16條,引腳數(shù)量多于16,所以引腳要共用外部中斷線(xiàn)。
??中斷允許嵌套,不同的中斷有不同的優(yōu)先級(jí),高優(yōu)先級(jí)的中斷可以打斷低優(yōu)先級(jí)的中斷。
??從理論上來(lái)講,STM32F4有16級(jí)中斷優(yōu)先級(jí)。習(xí)慣上,以前的工程師會(huì)把優(yōu)先級(jí)分為搶占優(yōu)先級(jí)和子優(yōu)先級(jí),兩者共用一個(gè)4位的寄存器。同搶斷優(yōu)先級(jí)的互不打斷。同搶占優(yōu)先級(jí)且同時(shí)發(fā)生的中斷,才看子優(yōu)先級(jí)。可以看出子優(yōu)先級(jí)功能過(guò)于雞肋,我并不習(xí)慣使用子優(yōu)先級(jí),所以設(shè)置搶占優(yōu)先級(jí)有16位。
使用CubeMX配置外部中斷
配置引腳
??我們?nèi)耘渲冒存I為外部中斷輸入源,所以把引腳PA4-PA7配置為外部中斷。然后設(shè)置為上拉輸入,下降沿觸發(fā)。
配置中斷優(yōu)先級(jí)
??在NVIC中使能外部中斷,并分配優(yōu)先級(jí)。
查看生成的代碼
static void MX_GPIO_Init(void)
{
/*Configure GPIO pins : PA4 PA5 PA6 PA7 */
GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI4_IRQn, 14, 0);
HAL_NVIC_EnableIRQ(EXTI4_IRQn);
HAL_NVIC_SetPriority(EXTI9_5_IRQn, 15, 0);
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
}
??另外,也配置了中斷處理函數(shù)。
??EXTI4_IRQHandler函數(shù)是誰(shuí)調(diào)用的?匯編程序,或者說(shuō)是硬件調(diào)用的,硬件決定CPU每執(zhí)行完一條指令,都會(huì)查詢(xún)是否產(chǎn)生中斷。發(fā)生中斷的時(shí)候,會(huì)產(chǎn)生一條跳轉(zhuǎn)指令,跳去別的地方執(zhí)行函數(shù)。一條指令顯然是沒(méi)辦法處理完中斷的,所以這一條指令只能實(shí)現(xiàn)跳轉(zhuǎn)功能,跳轉(zhuǎn)到其它函數(shù)。EXTI4_IRQHandler函數(shù)沒(méi)有聲明,也不需要C調(diào)用,匯編為它分配了空間,至于誰(shuí)賦予了HAL_GPIO_EXTI_IRQHandler參數(shù),就是另外一個(gè)問(wèn)題了。
外部中斷處理機(jī)制分析
??可以看出,這幾個(gè)外部中斷都使用了同一個(gè)處理函數(shù),HAL_GPIO_EXTI_IRQHandler,通過(guò)傳入不同的參數(shù),來(lái)區(qū)分是哪一條中斷線(xiàn)觸發(fā)的中斷。不同的外部中斷都調(diào)用了同一個(gè)HAL庫(kù)的處理函數(shù):HAL_GPIO_EXTI_IRQHandler。
??而在HAL_GPIO_EXTI_IRQHandler的處理函數(shù)中,又調(diào)用了一個(gè)名為HAL_GPIO_EXTI_Callback的回調(diào)函數(shù)。此回調(diào)函數(shù)是用戶(hù)編寫(xiě)業(yè)務(wù)邏輯的函數(shù)。
??在計(jì)算機(jī)程序設(shè)計(jì)中,回調(diào)函數(shù),或簡(jiǎn)稱(chēng)回調(diào)(Callback 即call then back
被主函數(shù)調(diào)用運(yùn)算后會(huì)返回主函數(shù)),是指通過(guò)函數(shù)參數(shù)傳遞到其它代碼的,某一塊可執(zhí)行代碼的引用。這一設(shè)計(jì)允許了底層代碼調(diào)用在高層定義的子程序。
??我們注意到,在用戶(hù)重定義的處理函數(shù)名稱(chēng)之前,有__Weak標(biāo)記,這是為什么?在HAL庫(kù)中采用了一種弱函數(shù)機(jī)制,在HAL_GPIO_EXTI_Callback函數(shù)前有個(gè)__weak標(biāo)記,表明這是個(gè)弱函數(shù)。弱函數(shù)可以被用戶(hù)定義的同名函數(shù)覆蓋,也就是說(shuō),如果用戶(hù)定義了一個(gè)函數(shù)名為HAL_GPIO_EXTI_Callback,系統(tǒng)就不再編譯有weak標(biāo)記的函數(shù),所以,被weak標(biāo)記的,都是備胎。__weak在回調(diào)函數(shù)的時(shí)候經(jīng)常用到。這樣的好處是,系統(tǒng)默認(rèn)定義了一個(gè)空的回調(diào)函數(shù),保證編譯器不會(huì)報(bào)錯(cuò)。同時(shí),如果用戶(hù)自己要定義用戶(hù)回調(diào)函數(shù),那么只需要重新定義即可,不需要考慮函數(shù)重復(fù)定義的問(wèn)題
外部中斷處理函數(shù)
??我把代碼填寫(xiě)到IO.c中,業(yè)務(wù)處理邏輯與按鍵掃描一樣,當(dāng)檢測(cè)到按鍵時(shí),LED狀態(tài)變化?;卣{(diào)函數(shù)中無(wú)需處理中斷標(biāo)志位,是因?yàn)榇隧?xiàng)工作已經(jīng)由HAL_GPIO_EXTI_IRQHandler完成。主函數(shù)的死循環(huán)中,不處理任何業(yè)務(wù),所以什么都不用填寫(xiě),甚至,可以讓芯片進(jìn)入休眠模式。
//IO.c
/**
* @brief 外部中斷函數(shù)處理
* @param GPIO_Pin:中斷引腳號(hào)
* @retval None
*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
switch(GPIO_Pin)
{
case GPIO_PIN_7: LED1 = !LED1; break;
case GPIO_PIN_6: LED2 = !LED2; break;
case GPIO_PIN_5: LED1 = !LED2;break;
case GPIO_PIN_4: LED2 = !LED1;break;
default: break;
}
}
??為什么外部中斷4是獨(dú)立的處理函數(shù),而外部中斷5-9要共享一個(gè)處理函數(shù)?
??可能是歷史原因,之前的STM32單片機(jī)資源比較少,所以5-9共享處理函數(shù)。
上一篇:HAL庫(kù)教程5:串口數(shù)據(jù)發(fā)送
下一篇:HAL庫(kù)教程3:引腳輸入檢測(cè)
推薦閱讀
史海拾趣
自2000年4月成立以來(lái),Enova Technology Corporation(伊諾瓦科技)就以其卓越的技術(shù)創(chuàng)新能力在電子行業(yè)中嶄露頭角。公司總部位于臺(tái)灣新竹科學(xué)工業(yè)園區(qū),這里匯聚了眾多高科技企業(yè)和研發(fā)機(jī)構(gòu),為伊諾瓦科技提供了豐富的技術(shù)資源和人才支持。
伊諾瓦科技專(zhuān)注于硬件加解密解決方案的研發(fā)與應(yīng)用,其產(chǎn)品在軍事單位、政府機(jī)關(guān)、財(cái)務(wù)金融機(jī)構(gòu)等領(lǐng)域得到了廣泛應(yīng)用。其中,公司的X-WallSE產(chǎn)品憑借其獨(dú)特的攜帶式電子鑰匙(Security Key)技術(shù),實(shí)現(xiàn)了硬盤(pán)的一對(duì)一加密,為用戶(hù)提供了前所未有的數(shù)據(jù)安全保護(hù)。這一創(chuàng)新技術(shù)的推出,不僅提升了公司的市場(chǎng)競(jìng)爭(zhēng)力,也為整個(gè)電子行業(yè)樹(shù)立了新的技術(shù)標(biāo)桿。
隨著技術(shù)的不斷發(fā)展,伊諾瓦科技不斷推出更加先進(jìn)的產(chǎn)品和解決方案。例如,公司的SecureNAS系列產(chǎn)品在網(wǎng)絡(luò)硬盤(pán)服務(wù)器加解密應(yīng)用方面提供了全新的解決方案,為用戶(hù)提供了更加便捷、高效的數(shù)據(jù)安全保護(hù)。這些產(chǎn)品的推出,不僅進(jìn)一步鞏固了公司在電子行業(yè)的領(lǐng)先地位,也為公司的未來(lái)發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
為了進(jìn)一步提升競(jìng)爭(zhēng)力,C-MAC Automotive公司積極尋求與其他企業(yè)的戰(zhàn)略合作。通過(guò)與一家知名汽車(chē)制造商建立合作關(guān)系,C-MAC成功將其電子控制單元(ECU)集成到了對(duì)方的新款車(chē)型中。這一合作不僅提升了C-MAC的品牌知名度,還為公司帶來(lái)了穩(wěn)定的訂單來(lái)源。通過(guò)不斷拓寬合作領(lǐng)域,C-MAC逐漸在電子行業(yè)中占據(jù)了一席之地。
另一家名為“Innovative Memory Solutions”的公司,在2008年就開(kāi)始布局HMC技術(shù)的研發(fā)。經(jīng)過(guò)數(shù)年的潛心研究,該公司終于在2012年推出了首款商用HMC產(chǎn)品。這款產(chǎn)品的問(wèn)世,不僅解決了傳統(tǒng)DRAM帶寬受限的問(wèn)題,還顯著降低了系統(tǒng)延遲。Innovative Memory Solutions通過(guò)積極的市場(chǎng)推廣和與OEM廠(chǎng)商的合作,成功將HMC技術(shù)應(yīng)用于高性能計(jì)算、數(shù)據(jù)中心等領(lǐng)域,實(shí)現(xiàn)了從研發(fā)到市場(chǎng)的成功跨越。
為了進(jìn)一步提升競(jìng)爭(zhēng)力,Cal-Chip Electronics公司在XXXX年開(kāi)始實(shí)施產(chǎn)業(yè)鏈整合戰(zhàn)略。公司通過(guò)與上游原材料供應(yīng)商和下游終端制造商建立緊密的合作關(guān)系,實(shí)現(xiàn)了產(chǎn)業(yè)鏈的協(xié)同發(fā)展和資源共享。這一戰(zhàn)略不僅降低了公司的運(yùn)營(yíng)成本,也提高了產(chǎn)品的質(zhì)量和生產(chǎn)效率。同時(shí),公司還積極參與行業(yè)標(biāo)準(zhǔn)的制定和推廣,推動(dòng)了整個(gè)行業(yè)的健康發(fā)展。
“flash存儲(chǔ)器”經(jīng)常可以與“NOR存儲(chǔ)器”互換使用。許多業(yè)內(nèi)人士也搞不清楚NAND閃存技術(shù)相對(duì)于NOR技術(shù)的優(yōu)越之處,因 為大多數(shù)情況下閃存只是用來(lái)存儲(chǔ)少量的代碼,這時(shí)NOR閃存更適合一些。而NAND則是高數(shù)據(jù)存儲(chǔ)密度的理想解決方案?! OR的特點(diǎn)是 ...… 查看全部問(wèn)答∨ |
本帖最后由 paulhyde 于 2014-9-15 09:43 編輯 泰克示波器的FFT[free][/free] [ 本帖最后由 yushiqian 于 2009-8-15 23:31 編輯 ] … 查看全部問(wèn)答∨ |
使用Sim300無(wú)法發(fā)送數(shù)據(jù) 我是用sim300的gprs模塊,現(xiàn)在已經(jīng)可以成功連接上網(wǎng)絡(luò),發(fā)送at+cipstart有ok,和connect ok的返回,但是每次只有5秒不到的時(shí)間就返回close的信息,根本就無(wú)法發(fā)送數(shù)據(jù),請(qǐng)問(wèn)有人知道為什么嗎?… 查看全部問(wèn)答∨ |
請(qǐng)問(wèn)各位ST的大俠們,stm32f105/ 107能不能做 usb host ?各位大俠哪里有 stm32 usb host的demo程序 ...… 查看全部問(wèn)答∨ |
【為C2000做貢獻(xiàn)】DSP應(yīng)用以及開(kāi)發(fā)入門(mén)書(shū)籍 DSP應(yīng)用以及開(kāi)發(fā)入門(mén)書(shū)籍… 查看全部問(wèn)答∨ |
|
我想自己設(shè)計(jì)(或者說(shuō)制作)一個(gè)簡(jiǎn)易的路由器,不知可行不?網(wǎng)上很少有這方面的資料?!? 查看全部問(wèn)答∨ |
剛接觸I2S,用TI 的LM3S9B96開(kāi)發(fā)板燒寫(xiě)進(jìn)了i2s_demo這個(gè)例程,在SD卡里下載進(jìn)了一首wav格式的歌曲,通過(guò)液晶屏播放該wav格式的歌曲,聽(tīng)不到音樂(lè),請(qǐng)問(wèn)是怎么回事?想入門(mén)就遭到這般打擊,只好來(lái)求助大家了。請(qǐng)測(cè)試過(guò)的大俠指點(diǎn)下。萬(wàn)分感激?!? 查看全部問(wèn)答∨ |
輸入信號(hào)頻譜較寬 要求多個(gè)不同濾波器組成濾波器組同時(shí)對(duì)信號(hào)濾波處理 輸出合并信號(hào) 要求與原信號(hào)差異小… 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 【下載】LAT1526 利用SPI的下溢實(shí)現(xiàn)回顯功能
- 【下載】LAT1509 STM32G0B1的FDCAN進(jìn)行通信丟包和多包案例分享
- 【下載】LAT1511 運(yùn)行Ux_Host_HUB_HID_MSC通過(guò)Hub連接U盤(pán)讀寫(xiě)不穩(wěn)定問(wèn)題分析
- 【下載】LAT1466 USB x Device HID Standalone的移植
- 【下載】LAT1488 STM32 USBxDevice MSC standalone移植示例
- 【下載】LAT1482 STM32G0單線(xiàn)串口通信幀錯(cuò)誤問(wèn)題解析
- 人形機(jī)器人馬拉松背后的思考,兆易創(chuàng)新如何賦能機(jī)器人產(chǎn)業(yè)
- 一種基于STM32的智能柜控制器設(shè)計(jì)
- 小型傾轉(zhuǎn)旋翼機(jī)的無(wú)刷直流電機(jī)驅(qū)動(dòng)器設(shè)計(jì)
- 超高速攝影機(jī)電控系統(tǒng)設(shè)計(jì)
- 基于GPS自動(dòng)授時(shí)的無(wú)線(xiàn)智能控制器的設(shè)計(jì)
- 基于PTR2000的無(wú)線(xiàn)氣象信息采集系統(tǒng)設(shè)計(jì)
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無(wú)人飛行器機(jī)載穩(wěn)定云臺(tái)控制系統(tǒng)的設(shè)計(jì)
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時(shí)處理器M7000
- AI時(shí)代的孩子,如何成為未來(lái)的開(kāi)創(chuàng)者?
- 通用汽車(chē)轉(zhuǎn)向LFP電池,LG新能源和三星SDI擬在美建廠(chǎng)
- 蓋世汽車(chē)研究院:政策助推疊加技術(shù)迭代 全固態(tài)電池蓄勢(shì)待發(fā)
- 小鵬汽車(chē)董事長(zhǎng)預(yù)測(cè):2027年激光雷達(dá)非智能駕駛必備
- 解碼大眾汽車(chē)中國(guó)戰(zhàn)略 - 決戰(zhàn)智能化電氣化的三板斧
- 2025從具身智能大腦展望人形機(jī)器人發(fā)展
- “荊楚”人形機(jī)器人即將量產(chǎn),智能時(shí)代的新篇章!
- 小鵬純視覺(jué)方案:技術(shù)突圍與市場(chǎng)下沉的雙重博弈
- 為什么無(wú)人出租車(chē)能“零”事故,而智能駕駛輔助卻事故頻發(fā)?
- 重磅!一顆要顛覆全球智駕的芯片點(diǎn)亮了!
- 聊聊你眼中的仙童,超值極品拿到手!
- 感謝有你,感恩龍年,EEWORLD陪你一起“鬧”龍年!
- TI有獎(jiǎng)直播|使用DLP®微型投影技術(shù)的IoT顯示方案
- 有獎(jiǎng)?wù){(diào)查|跟泰克一起了解【半導(dǎo)體材料與器件測(cè)試知識(shí)】(材料科學(xué)篇)
- 【搶樓贏禮】聊聊我用過(guò)的MOSFET!
- 2024 DigiKey 應(yīng)用說(shuō):藍(lán)牙5.4新特性解讀和實(shí)例演示
- 答題有禮: 尋覓可靠的觸控、手勢(shì)控制解決方案?快來(lái)認(rèn)識(shí)新一代AVR DA單片機(jī)
- 慳錢(qián)十月,分享你的省錢(qián)購(gòu)物經(jīng)!
- #micropython大作戰(zhàn)#多種參與姿勢(shì),大家一起來(lái)玩micropython!
- Beats Powerbeats Pro全新配色6月10日上線(xiàn)
- 三星喊冤,壁紙引發(fā)死機(jī)根源在Android 10
- 傳言蘋(píng)果Apple Watch 6仍將采用OLED屏幕
- 大族激光:計(jì)劃啟動(dòng)子公司大族數(shù)控分拆上市籌備工作
- LG廣州廠(chǎng)下半年供應(yīng)OLED電視面板,電視市場(chǎng)有望加速增長(zhǎng)
- 鐵電隨機(jī)存儲(chǔ)器F-RAM在動(dòng)力電池管理上的應(yīng)用
- 安森美半導(dǎo)體與NVIDIA合作開(kāi)展基于云的自動(dòng)駕駛汽車(chē)仿真
- 指紋識(shí)別日薄西山?自有優(yōu)勢(shì)暫無(wú)法舍棄
- 存儲(chǔ)芯片越來(lái)越緊俏,中國(guó)企業(yè)該如何突破?
- 德國(guó)和波蘭同意建立電池生產(chǎn)聯(lián)盟