版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、STM32 外部中斷配NVIC_Configuration 函數(shù)實(shí)現(xiàn)配置嵌套向量中斷中斷優(yōu)先級(jí)并使能中斷。其中的 NVIC_PriorityGroupConfig 函數(shù)配置中斷優(yōu)先級(jí)的組織方式, STM32 的嵌套向量中斷 控制器可以配置 16 個(gè)可編程的優(yōu)先等級(jí) ,使用了 4 位表示中斷優(yōu)先級(jí) ( 2 的 4 此方就 是 16 ), 16 個(gè) 可 編 程 的 優(yōu) 先 等 級(jí) 又 可 以 分 為 主 優(yōu) 先 級(jí) 和 次 優(yōu) 先 級(jí) , 例 如 參 數(shù) NVIC_PriorityGroup_1 表示 1bit 主優(yōu)先級(jí) ( pre-emptionpriority ) 3 bits 次優(yōu)先級(jí)( s
2、ubpriority )。一、配置中斷1 、 分配中斷向量表:/* Set the Vector Table base location at 0x20000000 */NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);設(shè)置中斷優(yōu)先級(jí)中斷通道/ 響應(yīng)(次級(jí))優(yōu)先級(jí) 通道中斷使能2 、 設(shè)置中斷優(yōu)先級(jí):NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); /3 、 初始化外部中斷:/* 允許 EXTI4 中斷 */NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQChannel
3、; /NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= PreemptionPriorityValue; / 占先優(yōu)先級(jí) NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; / NVIC_Init(&NVIC_InitStructure); / 初始化中斷注意: 如果我們配置的外部針腳為 PA4 ,或 PB4 ,或 PC4 , PD4 等,那么采用的外部 中斷也必須是 EXTI4 ,同
4、樣,如果外部中斷針腳是PA1 ,PB1 ,PC1 ,PD1 那么中斷就要用 EXTI1 ,其他類推。二、配置 GPIO 針腳作為外部中斷的觸發(fā)事件1 、 選擇 IO 針腳 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; 注意,如果的針腳是端口的 4 號(hào)針腳,配置的中斷一定是 EXTI42 、 配置針腳為輸入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;3 、 初始化針腳 GPIO_Init(GPIOD,&GPIO_InitStructure);3 配置 EXTI 線,使中斷線和 IO 針腳
5、線連接上1 、 將 EXTI 線連接到 IO 端口上將 EXTI 線 4 連接到端口 GPIOD 的第 4 個(gè)針腳上 GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource4);注意 :如果配置的針腳是 4 號(hào),那么參數(shù)必須是 GPIO_PinSource4如果配置的針腳是 3 號(hào),那么參數(shù)必須是GPIO_PinSource32 、配置中斷邊沿/* 配置 EXTI 線 4 上出現(xiàn)下降沿,則產(chǎn)生中斷 */下降沿觸發(fā)/ 中斷線使能/ 初始化中斷/EXTI_Line4 中斷允許EXTI_InitStructure.EXTI_Line = EXT
6、I_Line4; 注意:如果配置的 4 號(hào)針腳,那么 EXTI_Line4 是必須的 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; /EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);EXTI_GenerateSWInterrupt(EXTI_Line4); 到此中斷配置完成,可以寫中斷處理函數(shù)。 舉例: 配置函數(shù)* * 函數(shù)
7、名 NVIC_Configration* 描述 配置各個(gè)中斷寄存器* */void NVIC_Configration(void)NVIC_InitTypeDef NVIC_InitStructure;/#ifdef VECT_TAB_RAM/* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);/#else /* VECT_TAB_FLASH */* Set the Vector Table base location at 0x08000000 */
8、/NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);設(shè)置中斷優(yōu)先級(jí)/#endifNVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); /* 允許 EXTI4 中斷 */NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriorityPreemptionPriorityValue;NVIC_InitStructure.NVIC_IRQChannelSubPriorit
9、y = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/* 允許 EXTI9 中斷 */NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChann
10、elCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/* 配置 SysTick 處理優(yōu)先級(jí):優(yōu)先級(jí)以及子優(yōu)先級(jí) */ /* 函數(shù)名GPIO_Configuration(void)* 描述配置 TIM2 針腳*/void GPIO_Configuration(void)/* GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode =
11、 GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure); */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOC,&GPIO_InitStructure);/* 配置 GPIO
12、D 的第一個(gè)管角為浮動(dòng)輸入 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOD,&GPIO_InitStructure);/* 配置 GPIOB 的第 9 個(gè)管腳為浮動(dòng)輸入 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB,&GPIO_I
13、nitStructure);/* 函數(shù)SysTick_Configuration* 描述設(shè)置 SysTick*/void SysTick_Configuration(void)/* 配置 HCLK 時(shí)鐘做為 SysTick 時(shí)鐘源 */ 系統(tǒng)時(shí)鐘 8SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); 分頻 72MHzNVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 8,2);/*SysTick Interrupt each 1000Hz with HCLK equal to 7
14、2MHz*/SysTick_SetReload(9000);/ 中斷周期 1ms/*Enable the SysTick Interrupt */SysTick_ITConfig(ENABLE);/ 打開中斷SysTick_CounterCmd(SysTick_Counter_Enable);SysTick_CounterCmd(SysTick_Counter_Clear);/* 函數(shù)名EXTI_Configuration* 描述配置 EXTI 線*/void EXTI_Configuration(void)/* 將 EXTI 線 4 連接到 PD4*/GPIO_EXTILineConfig(
15、GPIO_PortSourceGPIOD,GPIO_PinSource4);/* 配置 EXTI 線 4 上出現(xiàn)下降沿,則產(chǎn)生中斷 */EXTI_InitStructure.EXTI_Line = EXTI_Line4;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);EXTI_Gen
16、erateSWInterrupt(EXTI_Line4);/* 將 EXTI 線 9 連接到 PB9 上 */GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9);/* 將 EXTI 線 9 上出現(xiàn)下降沿產(chǎn)生中斷 */EXTI_InitStructure.EXTI_Line = EXTI_Line9;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStr
17、ucture.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);EXTI_GenerateSWInterrupt(EXTI_Line9);中斷函數(shù):void EXTI4_IRQHandler(void)if(EXTI_GetITStatus(EXTI_Line4)!= RESET) if(Ledflag = 0)Ledflag = 1; GPIOC->ODR |= 0X00000080;elseLedflag = 0; GPIOC->ODR &= 0XFFFFFF7F;EXTI_ClearITPendingBi
18、t(EXTI_Line4); / 清除 EXTI0 線路掛起位 ENABLE); / 使 能注:時(shí)鐘設(shè)置的時(shí)候最好加上這句:RCCRCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,AFIO 時(shí)鐘/*例程名稱:外部中斷實(shí)驗(yàn)實(shí)驗(yàn)硬件: DP-miniSTM32 硬件連接:指示燈連接 PA1按鈕連接 PA3功能描述:本例程實(shí)現(xiàn)外部中斷的輸入試驗(yàn),按下按鈕,指示燈閃爍一下*/#include <stm32f10x_lib.h> / STM32F10x Library Definitions #include "STM32_Init.h"
19、; / STM32 Initialization/* 名 稱: Delay() */void Delay(vu16 cnt) uint16 i,j;for (i=0;i<cnt;i+) for (j=0;j<1000;j+) /* 名 稱: RCC_Configuration() */ void RCC_Configuration(void)ErrorStatus HSEStartUpStatus;/ 使能外部晶振RCC_HSEConfig(RCC_HSE_ON);/ 等待外部晶振穩(wěn)定HSEStartUpStatus = RCC_WaitForHSEStartUp();/ 如果外部
20、晶振啟動(dòng)成功,則進(jìn)行下一步操作 if(HSEStartUpStatus=SUCCESS)/ 設(shè)置 HCLK ( AHB 時(shí)鐘) =SYSCLKRCC_HCLKConfig(RCC_SYSCLK_Div1);/PCLK1(APB1) = HCLK/2RCC_PCLK1Config(RCC_HCLK_Div2);/PCLK2(APB2) = HCLKRCC_PCLK2Config(RCC_HCLK_Div1);RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4);/ 啟動(dòng) PLL RCC_PLLCmd(ENABLE);/ 等待 PLL 穩(wěn)定 whi
21、le(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET);/ 系統(tǒng)時(shí)鐘 SYSCLK 來自 PLL 輸出 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/ 切換時(shí)鐘后等待系統(tǒng)時(shí)鐘穩(wěn)定 while(RCC_GetSYSCLKSource()!=0x08);/* RCC system reset(for debug purpose) */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO , ENABLE); / 給 GPIOA 和 重 映 射 提
22、供 時(shí) 鐘 , 注 意 : 一 定 要 設(shè) 置 RCC_APB2Periph_AFIO* * 名 稱: GPIO_Configuration()* void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;/* 設(shè)置 PA3 為輸入 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GP
23、IO_Init(GPIOA,&GPIO_InitStructure);/* 設(shè)置 PA1 為輸出 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);/* 名 稱 :EXTI_Configuration()*/void EXTI_Configuration(void)EXTI_In
24、itTypeDef EXTI_InitStructure;/* Configure EXTI Line3 to generate an interrupt on falling edge */ EXTI_InitStructure.EXTI_Line = EXTI_Line3;/ 外部中斷通道 3EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;/ 下降
25、沿觸發(fā)/ 使能EXTI_Init(&EXTI_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,PA3 連接到外部中斷通道 3GPIO_PinSource3); / 將* 名 稱 :NVIC_Configuration()*void NVIC_Configuration(void)NVIC_InitTypeDefNVIC_InitStructure;#ifdef VECT_TAB_RAM/* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorT
26、able(NVIC_VectTab_RAM, 0x0);#else /* VECT_TAB_FLASH */* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);/ 搶占式優(yōu)先級(jí)別設(shè)/ 指定中斷源/ 指定響應(yīng)優(yōu)先級(jí)/ 使能外部中斷通#endif NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);置為無搶占優(yōu)先級(jí)NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChan
27、nel;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; 別1= ENABLE;NVIC_InitStructure.NVIC_IRQChannelCmd 道3NVIC_Init(&NVIC_InitStructure);int main (void) RCC_Configuration(); / 配置時(shí)鐘 GPIO_Configuration(); /配置 IO 口NVIC_Configuration(); /中斷配置EXTI_Configuration(); /外部中斷配置while(1)/* 說明:將 LED 燈的連接到 PA1
28、 */void EXTI3_IRQHandler (void)if(EXTI_GetITStatus(EXTI_Line3) != RESET)/ 添加中斷處理程序GPIO_WriteBit(GPIOA, GPIO_Pin_1,(BitAction)0);Delay(1000);GPIO_WriteBit(GPIOA, GPIO_Pin_1,(BitAction)1);Delay(1000);EXTI_ClearFlag(EXTI_Line3); / 清除中斷標(biāo)志(必須) EXTI_ClearITPendingBit(EXTI_Line3);/ 以上兩條語句作用相同時(shí)鐘,讓我在使用 EXTI
29、的時(shí)候,因?yàn)闆]有開啟時(shí)鐘沒有開啟 RCC_APB2Periph_AFIO 調(diào)試吃了不少苦頭,看來還要好好看看 stm32 的時(shí)鐘啊現(xiàn)在給出我的 exti8 的配置首先一定要記得配置使能 AFIO 時(shí)RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); / 鐘/GPIOB8 作為中斷腳,配置為 浮空輸入void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;/* Configure PB8 as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB,&GPIO_InitStructure);繼續(xù)配置 NVICvoid NVIC_Configuration(void)NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 海底隧道工程中的海底地形變化監(jiān)測考核試卷
- 皮具維護(hù)的智能化生活應(yīng)用與科技發(fā)展趨勢考核試卷
- 漁業(yè)批發(fā)商的顧客關(guān)系管理考核試卷
- 毛皮制品加工行業(yè)環(huán)境保護(hù)法規(guī)考核試卷
- 森林改培對(duì)城市生態(tài)系統(tǒng)服務(wù)功能的提升考核試卷
- 2024年員工入股合作協(xié)議書:股權(quán)激勵(lì)與分紅保障3篇
- 皮革制品物流設(shè)備考核試卷
- 玉米種植的農(nóng)業(yè)可持續(xù)發(fā)展戰(zhàn)略考核試卷
- 2024年節(jié)能環(huán)保木工模板研發(fā)、生產(chǎn)與施工總承包合同3篇
- 2024年汽車制造專用鋁材采購合同范本及詳細(xì)條款3篇
- 八卦五行-PPT課件
- ISO8573-2測定懸浮狀油含量的試驗(yàn)方法學(xué)習(xí)資料
- 中國地質(zhì)大學(xué)(武漢)教育發(fā)展基金會(huì)籌備成立情況報(bào)告
- 薪酬管理試卷及答案
- 大學(xué)無機(jī)及分析化學(xué)----氣體練習(xí)題及答案
- 鐵路建設(shè)項(xiàng)目施工企業(yè)信用評(píng)價(jià)辦法(鐵總建設(shè)〔2018〕124號(hào))
- 保險(xiǎn)行業(yè)新會(huì)計(jì)準(zhǔn)則實(shí)施指南征求意見稿
- 形式發(fā)票模板 PI模板 英文版
- 初一的最美的風(fēng)景高分的作文600字
- 密封固化劑配方分析
- 國際項(xiàng)目管理專業(yè)資質(zhì)認(rèn)證(ipmp)b級(jí)報(bào)告模板
評(píng)論
0/150
提交評(píng)論