版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 STM32外部中斷原理與配置STM32-外部中斷原理與配置IO外部中斷原理概述STM32控制器持的外部中斷 /事件請(qǐng)求中斷線M3 M4 M7 EXTI線015:對(duì)應(yīng)外部IO的輸中斷。EXTI線16:連接到PVD輸出。EXTI線17:連接到RTC鬧鐘事件。EXTI線18:連接到USB OTG FS喚醒事件。EXTI線19:連接到以太喚醒事件。 EXTI線20:連接到USB OTG HS(在FS中配置)喚醒事件EXTI線21:連接到RTC侵和時(shí)間戳事件。EXTI線22:連接到RTC喚醒事件。EXSTI線23:連接到LPTIM1異步事件IO外部中斷STM32的每個(gè)IO都可以作為外部中斷輸。每個(gè)外部
2、中斷線可以獨(dú)的配置觸發(fā)式(上升沿,下降沿或者雙邊沿觸發(fā)),觸發(fā)/屏蔽,專的狀態(tài)位。STM32供IO使的中斷線只有16個(gè),但是STM32F系列的IO多達(dá)上百個(gè),STM32F103ZGT6(112),那么中斷線怎么跟io對(duì)應(yīng)呢?GPIO和中斷線映射關(guān)系GPIOx.0映射到EXTI0GPIOx.1映射到EXTI1GPIOx.14映射到EXTI14GPIOx.15映射到EXTI15對(duì)于M4/M7,配置寄存器為SYSCFG_EXTIRx對(duì)于M3,配置寄存器為AFIO_EXTICRx如下圖所,EXTI03:0有4個(gè)位,可以配置16個(gè),所以可以從PA0選擇到PI0。也就是說16個(gè)中斷線,最多可以處理16*1
3、6個(gè)外部引腳的中斷??梢栽趦?cè)中找到SYSCFG 外部中斷配置寄存器:16個(gè)中斷線就分配16個(gè)中斷服務(wù)函數(shù)?IO外部中斷在中斷向量表中只分配了7個(gè)中斷向量,也就是只能使7個(gè)中斷服務(wù)函數(shù)。從表中可以看出,外部中斷線5 9分配個(gè)中斷向量,共個(gè)服務(wù)函數(shù)外部中斷線1015分配個(gè)中斷向量,共個(gè)中斷服務(wù)函數(shù)。中斷服務(wù)函數(shù)列表:EXTI0_IRQHandlerEXTI1_IRQHandlerEXTI2_IRQHandler EXTI3_IRQHandlerEXTI4_IRQHandlerEXTI9_5_IRQHandlerEXTI15_10_IRQHandlerIO外部中斷 HAL庫配置法外部中斷操作使到的函
4、數(shù)分布件stm32fxxx_hal_gpio.hstm32fxxx_hal_gpio.c外部中斷配置:外部中斷的中斷線映射配置和觸發(fā)式都是在GPIO初始化函數(shù)中完成:GPIO_InitTypeDef GPIO_Initure;GPIO_Initure.Pin=GPIO_PIN_0; /PA0GPIO_Initure.Mode=GPIO_MODE_IT_RISING; /上/ 升沿觸發(fā)GPIO_Initure.Pull=GPIO_PULLDOWN;HAL_GPIO_Init(GPIOA,&GPIO_Initure);void HAL_GPIO_Init(GPIO_TypeDef *GPIOx,
5、GPIO_InitTypeDef *GPIO_Init)uint32_t position;uint32_t ioposition = 0 x00;uint32_t iocurrent = 0 x00;uint32_t temp = 0 x00;/* Check the parameters */assert_param(IS_GPIO_ALL_INSTANCE(GPIOx);assert_param(IS_GPIO_PIN(GPIO_Init-Pin);assert_param(IS_GPIO_MODE(GPIO_Init-Mode);assert_param(IS_GPIO_PULL(GP
6、IO_Init-Pull);/* Configure the port pins */for(position = 0; position GPIO_NUMBER; position+)/* Get the IO position */ioposition = (uint32_t)0 x01) Pin) & ioposition;if(iocurrent = ioposition)/*- GPIO Mode Configuration -*/* In case of Alternate function mode selection */if(GPIO_Init-Mode = GPIO_MOD
7、E_AF_PP) | (GPIO_Init-Mode = GPIO_MODE_AF_OD)/* Check the Alternate function parameter */assert_param(IS_GPIO_AF(GPIO_Init-Alternate);/* Configure Alternate function mapped with the current IO */temp = GPIOx-AFRposition 3;temp &= (uint32_t)0 xF Alternate) AFRposition 3 = temp;/* Configure IO Directi
8、on mode (Input, Output, Alternate or Analog) */temp = GPIOx-MODER;temp &= (GPIO_MODER_MODER0 Mode & GPIO_MODE) MODER = temp;/* In case of Output or Alternate function mode selection */if(GPIO_Init-Mode = GPIO_MODE_OUTPUT_PP) | (GPIO_Init-Mode = GPIO_MODE_AF_PP) |(GPIO_Init-Mode = GPIO_MODE_OUTPUT_OD
9、) | (GPIO_Init-Mode = GPIO_MODE_AF_OD)/* Check the Speed parameter */assert_param(IS_GPIO_SPEED(GPIO_Init-Speed);/* Configure the IO Speed */temp = GPIOx-OSPEEDR;temp &= (GPIO_OSPEEDER_OSPEEDR0 Speed OSPEEDR = temp;/* Configure the IO Output Type */temp = GPIOx-OTYPER;temp &= (GPIO_OTYPER_OT_0 Mode
10、& GPIO_OUTPUT_TYPE) 4) OTYPER = temp;/* Activate the Pull-up or Pull down resistor for the current IO */temp = GPIOx-PUPDR;temp &= (GPIO_PUPDR_PUPDR0 Pull) PUPDR = temp;/*- EXTI Mode Configuration -*/* Configure the External Interrupt or event for the current IO */if(GPIO_Init-Mode & EXTI_MODE) = EX
11、TI_MODE)/* Enable SYSCFG Clock */_HAL_RCC_SYSCFG_CLK_ENABLE();temp = SYSCFG-EXTICRposition 2;temp &= (uint32_t)0 x0F) (4 * (position & 0 x03);temp |= (uint32_t)(GPIO_GET_INDEX(GPIOx) EXTICRposition 2 = temp;/* Clear EXTI line configuration */temp = EXTI-IMR;temp &= (uint32_t)iocurrent);if(GPIO_Init-
12、Mode & GPIO_MODE_IT) = GPIO_MODE_IT)temp |= iocurrent;EXTI-IMR = temp;temp = EXTI-EMR;temp &= (uint32_t)iocurrent);if(GPIO_Init-Mode & GPIO_MODE_EVT) = GPIO_MODE_EVT)temp |= iocurrent;EXTI-EMR = temp;/* Clear Rising Falling edge configuration */temp = EXTI-RTSR;temp &= (uint32_t)iocurrent);if(GPIO_I
13、nit-Mode & RISING_EDGE) = RISING_EDGE)temp |= iocurrent;EXTI-RTSR = temp;temp = EXTI-FTSR;temp &= (uint32_t)iocurrent);if(GPIO_Init-Mode & FALLING_EDGE) = FALLING_EDGE)temp |= iocurrent;EXTI-FTSR = temp;和串中斷樣,HAL庫同樣提供了外部中斷通處理函數(shù)HAL_GPIO_EXTI_IRQHandler,我們?cè)谕獠恐袛喾?wù)函數(shù)中會(huì)調(diào)該函數(shù)處理中斷。/中斷服務(wù)函數(shù)void EXTI0_IRQHandl
14、er(void)HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);/調(diào)中斷處理公函數(shù)void EXTI2_IRQHandler(void)HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);/調(diào)中斷處理公函數(shù)HAL_GPIO_EXTI_IRQHandler函數(shù)內(nèi)部通過判斷中斷來源引腳,最終調(diào)外部中斷回調(diào)函數(shù)HAL_GPIO_EXTI_Callback來處理中斷。void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) /* EXTI line interrupt detected */if(_HAL_GPIO
15、_EXTI_GET_IT(GPIO_Pin) != RESET)_HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);HAL_GPIO_EXTI_Callback(GPIO_Pin);然后找到定義,可以看到HAL_GPIO_EXTI_Callback是個(gè)弱函數(shù)_weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)/* Prevent unused argument(s) compilation warning */_IO uint32_t tmpreg = 0 x00;UNUSED(tmpreg);/* NOTE: This fu
16、nction Should not be modified, when the callback is needed,the HAL_GPIO_EXTI_Callback could be implemented in the user file*/戶最終編寫中斷處理回調(diào)函數(shù)來編寫中斷處理邏輯void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)switch(GPIO_Pin)case GPIO_PIN_0:/ 控制邏輯break;case GPIO_PIN_2:/ 控制邏輯break;外部中斷的般配置步驟: 使能IO時(shí)鐘。 初始化IO,設(shè)置觸發(fā)式:HAL
17、_GPIO_Init(); 設(shè)置中斷優(yōu)先級(jí),并使能中斷通道。 編寫中斷服務(wù)函數(shù):函數(shù)中調(diào)外部中斷通處理函數(shù)HAL_GPIO_EXTI_IRQHandler。 編寫外部中斷回調(diào)函數(shù):HAL_GPIO_EXTI_Callback;按鍵硬件連接key0按下低電平,松開應(yīng)該是電平,所以key0設(shè)置為上拉輸,松開的時(shí)候,按下低,所以按下的時(shí)候是下降沿,因此就下降沿觸發(fā)。KEY0-PH3 上拉輸,下降沿觸發(fā)KEY1-PH2 上拉輸,下降沿觸發(fā)KEY2-PC13 上拉輸,下降沿觸發(fā)WK_UP-PA0 下拉輸,上升沿觸發(fā)IO外部中斷實(shí)驗(yàn)按鍵KEY0按下: 同時(shí)控制LED0和LED1翻轉(zhuǎn)。按鍵KEY1按下: L
18、ED1狀態(tài)翻轉(zhuǎn)。按鍵KEY2按下: LED0翻轉(zhuǎn)。按鍵WK_UP按下:控制LED0和LED1互斥點(diǎn)亮。根據(jù)外部中斷的配置的五個(gè)步驟,可以寫出代碼: 使能IO時(shí)鐘。 初始化IO,設(shè)置觸發(fā)式:HAL_GPIO_Init(); 設(shè)置中斷優(yōu)先級(jí),并使能中斷通道。 編寫中斷服務(wù)函數(shù):函數(shù)中調(diào)外部中斷通處理函數(shù)HAL_GPIO_EXTI_IRQHandler。 編寫外部中斷回調(diào)函數(shù):HAL_GPIO_EXTI_Callback;先編寫exti.h件:#ifndef _EXTI_H#define _EXTI_H#include sys.hvoid EXTI_Init(void);#endif然后編寫exti
19、.c件寫出要到的函數(shù)#include exti.hvoid EXTI_Init(void)void EXTI0_IRQHandler(void)void EXTI2_IRQHandler(void)void EXTI3_IRQHandler(void)void EXTI15_10_IRQHandler(void)void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)然后進(jìn)函數(shù)編寫,先是 使能IO時(shí)鐘、初始化IO,設(shè)置觸發(fā)式,然后是設(shè)置中斷優(yōu)先級(jí),并使能中斷通道void EXTI_Init(void)/ 使能IO時(shí)鐘、初始化IO,設(shè)置觸發(fā)式GPIO_Init
20、TypeDef GPIO_Initure;_HAL_RCC_GPIOA_CLK_ENABLE();_HAL_RCC_GPIOC_CLK_ENABLE();_HAL_RCC_GPIOH_CLK_ENABLE();GPIO_Initure.Pin=GPIO_PIN_0;/ 開啟GPIOA時(shí)鐘/ 開啟GPIOC時(shí)鐘/ 開啟GPIOH時(shí)鐘/PA0GPIO_Initure.Mode=GPIO_MODE_IT_RISING;GPIO_Initure.Pull=GPIO_PULLDOWN; / 下拉/IT 是外部中斷 RISING上升沿觸發(fā)GPIO_Initure.Speed=GPIO_SPEED_HIGH
21、; / 速HAL_GPIO_Init(GPIOA,&GPIO_Initure);GPIO_Initure.Pin=GPIO_PIN_13;GPIO_Initure.Mode=GPIO_MODE_IT_FALLING;GPIO_Initure.Pull=GPIO_PULLUP; / 上拉/PC13/ 下降沿觸發(fā)GPIO_Initure.Speed=GPIO_SPEED_HIGH; / 速HAL_GPIO_Init(GPIOC,&GPIO_Initure);GPIO_Initure.Pin=GPIO_PIN_2|GPIO_PIN_3; /PH2,3HAL_GPIO_Init(GPIOH,&GPIO
22、_Initure);/ 設(shè)置中斷優(yōu)先級(jí),并使能中斷通道HAL_NVIC_EnableIRQ(EXTI0_IRQn);HAL_NVIC_SetPriority(EXTI0_IRQn,2,0);HAL_NVIC_EnableIRQ(EXTI2_IRQn);HAL_NVIC_SetPriority(EXTI2_IRQn,2,1);HAL_NVIC_EnableIRQ(EXTI3_IRQn); HAL_NVIC_SetPriority(EXTI3_IRQn,2,2);HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);HAL_NVIC_SetPriority(EXTI15_10_IRQn,2,3);然后在后編寫中斷服務(wù)函數(shù):函數(shù)中調(diào)外部中斷通處理函數(shù)HAL_GPIO_EXTI_IRQHandler。和 編寫外部中斷回調(diào)函數(shù):HAL_GPIO_EXTI_Callback;void EXTI0_IRQHandler(void)HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);void EXTI2_IRQHandler(void)HAL_GPIO_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)性化租房協(xié)議范本:2024年版版A版
- 2025年度綠色環(huán)保型不銹鋼宣傳欄廣告制作與安裝一體化服務(wù)合同
- 科技企業(yè)中的定制化服務(wù)解決方案
- 家用紡織品材料的技術(shù)創(chuàng)新與市場(chǎng)機(jī)遇
- 流程再造小微企業(yè)貸款審批新思路
- 個(gè)人自建房屋承包建設(shè)合同2024
- 個(gè)人對(duì)個(gè)人簡(jiǎn)易借款合同(2024年新版)版B版
- 個(gè)人二零二四年度房地產(chǎn)經(jīng)紀(jì)服務(wù)合同5篇
- 家教中的音樂教育方案創(chuàng)新研究
- 教育與技術(shù)融合下的新型小學(xué)環(huán)保教學(xué)模式探索
- 2024年萍鄉(xiāng)衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫標(biāo)準(zhǔn)卷
- 2024年高考數(shù)學(xué)(理)試卷(全國甲卷)(空白卷)
- DB32-T 4444-2023 單位消防安全管理規(guī)范
- 臨床三基考試題庫(附答案)
- 合同簽訂執(zhí)行風(fēng)險(xiǎn)管控培訓(xùn)
- 人員密集場(chǎng)所消防安全管理培訓(xùn)
- JCT587-2012 玻璃纖維纏繞增強(qiáng)熱固性樹脂耐腐蝕立式貯罐
- 典范英語2b課文電子書
- 員工信息登記表(標(biāo)準(zhǔn)版)
- 春節(jié)工地停工復(fù)工計(jì)劃安排( 共10篇)
- 新教材人教版高中物理選擇性必修第二冊(cè)全冊(cè)各章節(jié)課時(shí)練習(xí)題及章末測(cè)驗(yàn)含答案解析(安培力洛倫茲力電磁感應(yīng)交變電流等)
評(píng)論
0/150
提交評(píng)論