娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月31日(星期六)

2019年05月31日 | HAL庫(kù)教程4:外部中斷

發(fā)布者:PeacefulSoul 來(lái)源: eefocus關(guān)鍵字:HAL庫(kù)  外部中斷  控制LED 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

外部中斷機(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ù)。

關(guān)鍵字:HAL庫(kù)  外部中斷  控制LED 引用地址:HAL庫(kù)教程4:外部中斷

上一篇:HAL庫(kù)教程5:串口數(shù)據(jù)發(fā)送
下一篇:HAL庫(kù)教程3:引腳輸入檢測(cè)

推薦閱讀

在主文件main.c中添加如下代碼:#ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endif PUTCHAR_PROTOTYPE{ USART_SendData(EVAL_COM1, (uint8_t) ch); while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) {} return ch;}#ifd...
??STM32的時(shí)鐘系統(tǒng)比較復(fù)雜,不像51單片機(jī),可能只有一個(gè)時(shí)鐘。原因:1、外設(shè)多,不同的外設(shè)有不同的時(shí)鐘要求;2、功耗原因,速度越快,功耗越大,抗電磁干擾能力越弱。 此處以STM32F405為例,講一點(diǎn)最常用的知識(shí)。其它的型號(hào)大同小異。時(shí)鐘 含義 特點(diǎn)HSE 外部高速時(shí)鐘信號(hào) 一般選擇外接晶振,最常用的時(shí)鐘信號(hào)。電機(jī)驅(qū)動(dòng)板外接12MhzHSI 內(nèi)部高速時(shí)鐘信...
在科幻電影中,機(jī)器人幫助太空人工作將變成現(xiàn)實(shí)。日本機(jī)器人新創(chuàng)公司Gitai正研發(fā)一項(xiàng)新技術(shù),未來(lái)可將遠(yuǎn)程臨場(chǎng)(lepresence)仿真機(jī)器人送至太空,代替太空人處理艱難任務(wù),先前該公司與日本宇宙航空研究開(kāi)發(fā)機(jī)構(gòu)(JAXA)合作,對(duì)機(jī)器人的實(shí)用性進(jìn)行研究。 據(jù)報(bào)導(dǎo),送太空人執(zhí)行任務(wù)既危險(xiǎn)又昂貴,若能遙控半自動(dòng)機(jī)器人代替這項(xiàng)工作,宇宙航空機(jī)構(gòu)預(yù)估將節(jié)...
0 引言工業(yè)無(wú)線(xiàn)通訊技術(shù)是繼工業(yè)以太網(wǎng)、工業(yè)現(xiàn)場(chǎng)總線(xiàn)技術(shù)之后工業(yè)自動(dòng)化領(lǐng)域又一個(gè)行業(yè)研究熱點(diǎn)。目前多標(biāo)準(zhǔn)多協(xié)議共存的場(chǎng)合應(yīng)用增多,而充當(dāng)協(xié)議轉(zhuǎn)換橋梁作用的網(wǎng)關(guān)起到了關(guān)鍵作用當(dāng)前比較流行的兩個(gè)本地?zé)o線(xiàn)技術(shù)無(wú)疑是Wi-Fi 和藍(lán)牙,但是,對(duì)于低功耗、低帶寬的控制類(lèi)應(yīng)用,諸如工廠(chǎng)內(nèi)的傳感器網(wǎng)絡(luò),ZigBee 或許是個(gè)更好的選擇。配備一個(gè)功能強(qiáng)大的...

史海拾趣

問(wèn)答坊 | AI 解惑

NAND和NOR flash詳解

“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)答∨

泰克示波器的FFT

本帖最后由 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)答∨

stm32f105/107usbhost

                                 請(qǐng)問(wèn)各位ST的大俠們,stm32f105/ 107能不能做 usb host ?各位大俠哪里有 stm32  usb host的demo程序 ...…

查看全部問(wèn)答∨

制作簡(jiǎn)易路由器

我想自己設(shè)計(jì)(或者說(shuō)制作)一個(gè)簡(jiǎn)易的路由器,不知可行不?網(wǎng)上很少有這方面的資料?!?

查看全部問(wèn)答∨

求助LM3S9B96 i2s模塊

剛接觸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)答∨

基于DSP的濾波器組設(shè)計(jì)

輸入信號(hào)頻譜較寬 要求多個(gè)不同濾波器組成濾波器組同時(shí)對(duì)信號(hào)濾波處理 輸出合并信號(hào) 要求與原信號(hào)差異小…

查看全部問(wèn)答∨

做芯片代理商fae怎么樣

如題,芯片代理商 fae這個(gè)職位怎么樣! 歡迎大家指點(diǎn)…

查看全部問(wèn)答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車(chē)開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 新竹市| 绥宁县| 大冶市| 扶余县| 富川| 永嘉县| 灵武市| 新蔡县| 虞城县| 平谷区| 吉木萨尔县| 诏安县| 石渠县| 武宁县| 鹿邑县| 乃东县| 武功县| 宣化县| 平阳县| 二手房| 育儿| 鄯善县| 灵璧县| 诏安县| 涟水县| 望奎县| 乌海市| 黄骅市| 黔南| 宜川县| 永仁县| 兴安县| 百色市| 黑龙江省| 洞头县| 迁西县| 花莲县| 开远市| 疏勒县| 定边县| 江安县|