第9章-STM32外部中斷設(shè)計(jì)說明課件_第1頁
第9章-STM32外部中斷設(shè)計(jì)說明課件_第2頁
第9章-STM32外部中斷設(shè)計(jì)說明課件_第3頁
第9章-STM32外部中斷設(shè)計(jì)說明課件_第4頁
第9章-STM32外部中斷設(shè)計(jì)說明課件_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

EmbeddedSystemDevelopment嵌入式系統(tǒng)與應(yīng)用

EmbeddedSystemDevelopment嵌入式第9章STM32外部中斷設(shè)計(jì)9.1GPIO鍵盤設(shè)計(jì)9.2GPIO外部中斷EXTI設(shè)計(jì)第9章STM32外部中斷設(shè)計(jì)9.1GPIO鍵盤設(shè)計(jì)9.1GPIO鍵盤設(shè)計(jì)每個(gè)GPIO引腳都可配置為8種模式。GPIO端口如何進(jìn)行鍵盤設(shè)計(jì)?下面兩種辦法效果一樣。一是采用上拉輸入模式,按鍵在沒按下的時(shí)候,默認(rèn)為高電平。PE5–key1PE6–key2

二是直接采用浮空輸入模式,在芯片外部接上拉電阻。按鍵原理圖9.1GPIO鍵盤設(shè)計(jì)每個(gè)GPIO引腳都可配置為8種模式實(shí)現(xiàn)LED反轉(zhuǎn),main()函數(shù)intmain(void){/*configtheled*/LED_GPIO_Config();LED1(ON);

/*configkey*/Key_GPIO_Config();while(1){if(Key_Scan(GPIOE,GPIO_Pin_5)==KEY_ON){/*LED1反轉(zhuǎn)*/

GPIO_WriteBit(GPIOC,GPIO_Pin_3,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3))));}}}讀取PC3的當(dāng)前輸出電平當(dāng)前狀態(tài)反相后寫入到PC3實(shí)現(xiàn)LED反轉(zhuǎn),main()函數(shù)intmain(void)實(shí)現(xiàn)LED反轉(zhuǎn),main()函數(shù)1、關(guān)于Led燈的代碼,把前面寫的led.c和led.h文件復(fù)制一份添加到工程就可以了。2、啟動(dòng)文件調(diào)用了SystemInit()將系統(tǒng)時(shí)鐘SYSCLK配置為72MHz。3、接著進(jìn)入到main函數(shù),第一步先調(diào)用了在LED燈例程中編寫的LED_GPIO_Config(),配置LED用到的I/O。4、再使用LED1(ON)宏,把LED設(shè)置為點(diǎn)亮狀態(tài)。5、配置按鍵用到的I/O口Key_GPIO_Config函數(shù)。6、按鍵檢測函數(shù),按鍵時(shí)調(diào)用GPIO_WriteBit函數(shù),實(shí)現(xiàn)燈反轉(zhuǎn)。實(shí)現(xiàn)LED反轉(zhuǎn),main()函數(shù)1、關(guān)于Led燈的代碼,把前設(shè)計(jì)按鍵函數(shù)頭文件bsp_key.h#ifndef__KEY_H//條件編譯#define__KEY_H#include"stm32f10x.h"#defineKEY_ON 0//按鍵按下標(biāo)志#defineKEY_OFF 1//無按鍵標(biāo)志voidKey_GPIO_Config(void);uint8_tKey_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin);#endif設(shè)計(jì)按鍵函數(shù)頭文件bsp_key.h#ifndef__KE設(shè)計(jì)按鍵函數(shù)Key_GPIO_Config()#include"bsp_key.h"voidKey_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;/*開啟按鍵端口GPIOE(PE5)的時(shí)鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOE,&GPIO_InitStructure);}跟LED的GPIO初始化函數(shù)LED_GPIO_Config()類似??捎梅東同時(shí)配置多個(gè):GPIO_Pin_5|GPIO_Pin_6;設(shè)計(jì)按鍵函數(shù)Key_GPIO_Config()#includ按鍵檢測函數(shù)Key_Scan()/**輸入:GPIOx、GPIO_Pin:待讀取的端口、引腳*輸出:KEY_OFF(沒按下按鍵)、KEY_ON(按下按鍵)*/u8Key_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin){/*檢測是否有按鍵按下*/if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON){Delay(10000);//延時(shí)消抖

if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON)

{while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON);returnKEY_ON;}//等待按鍵釋放elsereturnKEY_OFF;elsereturnKEY_OFF;}}按鍵檢測函數(shù)Key_Scan()/**輸入:GPI檢測是否有按鍵按下庫函數(shù)GPIO_ReadInputDataBit(端口號,引腳號);返回引腳數(shù)據(jù),0為低電平,KEY_ON,可能有按鍵按下,調(diào)用延時(shí)函數(shù)消抖;否則返回1為高電平,KEY_OFF,表示按鍵沒有被按下。延時(shí)之后再次讀取該引腳數(shù)據(jù),若依然為低電平,表明確實(shí)有按鍵被按下了;否則返回KEY_OFF,表示沒按鍵。while循環(huán)調(diào)用GPIO_ReadInputDataBit(),等待按鍵釋放,條件變?yōu)榧偻顺鲅h(huán),返回表示按鍵被按下的標(biāo)志KEY_ON。同理,通過輸入不同的實(shí)參,來檢測其它按鍵的引腳。這就是庫的魅力!檢測是否有按鍵按下庫函數(shù)GPIO_ReadInputDat作業(yè):課下任務(wù)1、進(jìn)一步熟悉GPIO,掌握GPIO設(shè)計(jì)。2、掌握GPIO鍵盤實(shí)驗(yàn),實(shí)驗(yàn)報(bào)告。作業(yè):課下任務(wù)1、進(jìn)一步熟悉GPIO,掌握GPIO設(shè)計(jì)。9.2GPIO外部中斷EXTI設(shè)計(jì)EXTI(Externalinterrupt):通過GPIO檢測輸入脈沖,引起中斷事件,打斷原來的代碼執(zhí)行流程,進(jìn)入到中斷服務(wù)函數(shù),處理完后,再返回到中斷之前的代碼中執(zhí)行。STM32的所有GPIO都可以用作外部中斷源,可把按鍵輪詢檢測改為由中斷來處理,大大提高軟件執(zhí)行的效率。Cortex內(nèi)核具有強(qiáng)大的異常響應(yīng)系統(tǒng),能夠打斷當(dāng)前代碼執(zhí)行流程的事件分為異常exception和中斷interrupt,用一個(gè)異常向量表管理起來,編號為0~15的稱為內(nèi)核異常,而16以上的則稱為外部中斷。STM32向量表,優(yōu)先級從-3至6的中斷向量稱為系統(tǒng)異常,優(yōu)先級為負(fù)的不能設(shè)置優(yōu)先級,如復(fù)位Reset、不可屏蔽中斷NMI、硬錯(cuò)誤Hardfault。從優(yōu)先級7開始的稱為外部中斷,優(yōu)先級可自行設(shè)置。9.2GPIO外部中斷EXTI設(shè)計(jì)EXTI(ExternSTM32中斷向量表STM32中斷向量表STM32中斷向量表-詳見參考手冊STM32中斷向量表-詳見參考手冊GPIO外部中斷EXTI中斷控制器NVIC屬于Cortex內(nèi)核的器件,能配置16種中斷向量,超過16個(gè)中斷向量時(shí),必然有2個(gè)以上的中斷向量是使用相同的中斷種類。注意:相同種類的中斷不能嵌套。GPIO與EXTI的連接方式:PAx~PGx端口的中斷事件都連接到了EXTIx,可以分時(shí)復(fù)用??梢耘渲脼橄陆笛刂袛?,上升沿中斷和上升下降沿中斷這三種模式。EXTI最普通的應(yīng)用就是接上一個(gè)按鍵,設(shè)置為下降沿觸發(fā),用中斷來檢測按鍵。GPIO外部中斷EXTI中斷控制器NVIC屬于Cortex內(nèi)外部中斷0與NVIC的關(guān)系外部中斷0與NVIC的關(guān)系EXTI寄存器EXTI寄存器結(jié)構(gòu):typedefstruct{vu32IMR;vu32EMR;vu32RTSR;vu32FTSR;vu32SWIER;vu32PR;}EXTI_TypeDef;EXTI寄存器EXTI寄存器結(jié)構(gòu):EXTI庫函數(shù)EXTI庫函數(shù)NVIC寄存器NVIC寄存器NVIC庫函數(shù)NVIC庫函數(shù)NVIC配置misc庫中NVIC_Init()函數(shù)對NVIC初始化,用到NVIC_InitTypeDef結(jié)構(gòu)體,其中四個(gè)成員:NVIC_IRQChannel參數(shù)來選擇將要配置的中斷向量;NVIC_IRQChannelCmd參數(shù)來進(jìn)行使能(ENABLE)或關(guān)閉(DISABLE)該中斷;NVIC_IRQChannelPreemptionPriority成員要配置中斷向量的搶占優(yōu)先級;NVIC_IRQChannelSubPriority需要配置中斷向量的響應(yīng)優(yōu)先級。NVIC只可配置16種中斷向量的優(yōu)先級:編號越小,優(yōu)先級別越高;搶占優(yōu)先級:是指打斷其它中斷,會出現(xiàn)嵌套中斷;響應(yīng)優(yōu)先級:先處理響應(yīng)優(yōu)先級高的中斷;NVIC配置misc庫中NVIC_Init()函數(shù)對NVI中斷檢測按鍵實(shí)驗(yàn)硬件連接:PE5–key1、PE6–key2,key1按下時(shí),進(jìn)入線中斷處理函數(shù),LED1狀態(tài)取反。

配置工程環(huán)境:除使用GPIO和RCC片上外設(shè);還要使用exti片上外設(shè),stm32f10x_exti.c包含了支持exti配置和操作的函數(shù);misc.c文件則包含了NVIC的配置函數(shù);本實(shí)驗(yàn)中還會在stm32f10x_it.c中編寫中斷服務(wù)函數(shù)。中斷檢測按鍵實(shí)驗(yàn)硬件連接:PE5–key1、PE6–Main函數(shù)配置好LED用到的I/O后,調(diào)用LED1()點(diǎn)亮一盞LED燈;配置中斷,等待中斷發(fā)生。intmain(void){/*configtheled*/LED_GPIO_Config();LED1(ON);/*extilineconfig*/EXTI_PE5_Config();/*waitinterrupt*/while(1){}}Main函數(shù)配置好LED用到的I/O后,調(diào)用LED1()點(diǎn)亮配置外部中斷exti.cEXTI_PE5_Config()函數(shù),配置PE5為線中斷口,并設(shè)置中斷優(yōu)先級。主要步驟:1.使能EXTIx線的時(shí)鐘和第二功能AFIO時(shí)鐘2.配置EXTIx線的中斷優(yōu)先級3.配置EXTI中斷線I/O4.選定要配置為EXTI的I/O口線和I/O口的工作模式5.EXTI中斷線工作模式配置配置外部中斷exti.cEXTI_PE5_Config()函EXTI_PE5_Config()函數(shù)8.voidEXTI_PE5_Config(void)9.{10.GPIO_InitTypeDefGPIO_InitStructure;11.EXTI_InitTypeDefEXTI_InitStructure;13.

/*configtheextiline(PE5)clockandAFIOclock*/14.RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);16./*configtheNVIC(PE5)*/17.NVIC_Configuration();//NVIC初始化配置19./*EXTIlinegpioconfig(PE5)*/20.GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;21.GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//上拉輸入EXTI_PE5_Config()函數(shù)8.voidEXTEXTI_PE5_Config()函數(shù)_續(xù)22.GPIO_Init(GPIOE,&GPIO_InitStructure);24./*EXTIline(PE5)modeconfig*/25.GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource5);//PE5設(shè)置為EXTI輸入線26.EXTI_InitStructure.EXTI_Line=EXTI_Line5;27.EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;28.EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿觸發(fā)中斷

29.EXTI_InitStructure.EXTI_LineCmd=ENABLE;30.EXTI_Init(&EXTI_InitStructure);31.}EXTI_PE5_Config()函數(shù)_續(xù)22.GPIO_GPIO端口的復(fù)用功能AFIOAFIO(alternate-functionI/O),GPIO除了用作普通的輸入輸出(主功能),還可以作為片上外設(shè)的復(fù)用輸入輸出,如串口,ADC,這些就是復(fù)用功能。GPIO還有重映射功能:重映射功能是指把原來屬于A引腳的默認(rèn)復(fù)用功能,轉(zhuǎn)移到了B引腳進(jìn)行使用(當(dāng)然B引腳具有這個(gè)重映射功能)。當(dāng)把GPIO用作EXTI外部中斷或使用重映射功能的時(shí)候,必須開啟AFIO時(shí)鐘。代碼的第14行,開啟了AFIO的時(shí)鐘。GPIO端口的復(fù)用功能AFIOAFIO(alternateNVIC初始化配置EXTI_PE5_Config()調(diào)用了NVIC_Configuration()函數(shù)來配置NVIC控制器。8.staticvoidNVIC_Configuration(void)9.{10.NVIC_InitTypeDefNVIC_InitStructure;12./*Configureonebitforpreemptionpriority*/13.NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);15./*配置P[A|B|C|D|E]5為中斷源*/16.NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn;17.NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;18.NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;19.NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;20.NVIC_Init(&NVIC_InitStructure);//向寄存器寫入?yún)?shù)21.}把NVIC中斷優(yōu)先級分組設(shè)置為第1組要配置的為EXTI第5~9線的中斷向量搶占優(yōu)先級和響應(yīng)優(yōu)先級,設(shè)為最高NVIC初始化配置EXTI_PE5_Config()調(diào)用了N編寫中斷服務(wù)函數(shù)PE5連接到內(nèi)部的EXTI5,GPIO配置為上拉輸入,工作在下降沿中斷。在外圍電路上我們將PE5接到了key1上。PE5始終為高,當(dāng)按鍵按下時(shí),下降沿跳變,EXTI5會捕捉到這一跳變,并產(chǎn)生相應(yīng)的中斷,中斷服務(wù)程序在stm32f10x_it.c中實(shí)現(xiàn),專門用來存放中斷服務(wù)函數(shù)。中斷服務(wù)函數(shù)的名字必須要跟啟動(dòng)文件startup_stm32f10x_hd.s中的中斷向量表定義一致:DCDEXTI9_5_IRQHandler;EXTILine9..5EXTI9~EXTI5中斷向量的服務(wù)函數(shù)名在stm32f10x_it.c中加入EXTI9_5_IRQHandler()函數(shù);編寫中斷服務(wù)函數(shù)PE5連接到內(nèi)部的EXTI5,GPIO配置EXTI9_5_IRQHandler()函數(shù)/*I/O線中斷,中斷線為PE5*/voidEXTI9_5_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line5)!=RESET)

//確保是否產(chǎn)生了EXTILine中斷{//LED1取反GPIO_WriteBit(GPIOC,GPIO_Pin_3,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3))));//清除中斷標(biāo)志位EXTI_ClearITPendingBit(EXTI_Line5);}}EXTI9_5_IRQHandler()函數(shù)/*I/O線中實(shí)驗(yàn)現(xiàn)象將野火STM32開發(fā)板供電(DC5V),插上JLINK,將編譯好的程序下載到開發(fā)板,LED1亮,按下按鍵時(shí)LED1滅,再按下按鍵時(shí)LED1亮,如此循環(huán)。實(shí)驗(yàn)現(xiàn)象將野火STM32開發(fā)板供電(DC5V),插上JLIN9.2課下任務(wù)閱讀P161-172閱讀Cortex-M3權(quán)威指南,第7、8、9章閱讀野火資料:P124-1411、NVIC嵌套向量中斷控制器2、中斷向量表3、EXTI外部中斷9.2課下任務(wù)閱讀P161-172謝謝觀看!2020

謝謝觀看!EmbeddedSystemDevelopment嵌入式系統(tǒng)與應(yīng)用

EmbeddedSystemDevelopment嵌入式第9章STM32外部中斷設(shè)計(jì)9.1GPIO鍵盤設(shè)計(jì)9.2GPIO外部中斷EXTI設(shè)計(jì)第9章STM32外部中斷設(shè)計(jì)9.1GPIO鍵盤設(shè)計(jì)9.1GPIO鍵盤設(shè)計(jì)每個(gè)GPIO引腳都可配置為8種模式。GPIO端口如何進(jìn)行鍵盤設(shè)計(jì)?下面兩種辦法效果一樣。一是采用上拉輸入模式,按鍵在沒按下的時(shí)候,默認(rèn)為高電平。PE5–key1PE6–key2

二是直接采用浮空輸入模式,在芯片外部接上拉電阻。按鍵原理圖9.1GPIO鍵盤設(shè)計(jì)每個(gè)GPIO引腳都可配置為8種模式實(shí)現(xiàn)LED反轉(zhuǎn),main()函數(shù)intmain(void){/*configtheled*/LED_GPIO_Config();LED1(ON);

/*configkey*/Key_GPIO_Config();while(1){if(Key_Scan(GPIOE,GPIO_Pin_5)==KEY_ON){/*LED1反轉(zhuǎn)*/

GPIO_WriteBit(GPIOC,GPIO_Pin_3,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3))));}}}讀取PC3的當(dāng)前輸出電平當(dāng)前狀態(tài)反相后寫入到PC3實(shí)現(xiàn)LED反轉(zhuǎn),main()函數(shù)intmain(void)實(shí)現(xiàn)LED反轉(zhuǎn),main()函數(shù)1、關(guān)于Led燈的代碼,把前面寫的led.c和led.h文件復(fù)制一份添加到工程就可以了。2、啟動(dòng)文件調(diào)用了SystemInit()將系統(tǒng)時(shí)鐘SYSCLK配置為72MHz。3、接著進(jìn)入到main函數(shù),第一步先調(diào)用了在LED燈例程中編寫的LED_GPIO_Config(),配置LED用到的I/O。4、再使用LED1(ON)宏,把LED設(shè)置為點(diǎn)亮狀態(tài)。5、配置按鍵用到的I/O口Key_GPIO_Config函數(shù)。6、按鍵檢測函數(shù),按鍵時(shí)調(diào)用GPIO_WriteBit函數(shù),實(shí)現(xiàn)燈反轉(zhuǎn)。實(shí)現(xiàn)LED反轉(zhuǎn),main()函數(shù)1、關(guān)于Led燈的代碼,把前設(shè)計(jì)按鍵函數(shù)頭文件bsp_key.h#ifndef__KEY_H//條件編譯#define__KEY_H#include"stm32f10x.h"#defineKEY_ON 0//按鍵按下標(biāo)志#defineKEY_OFF 1//無按鍵標(biāo)志voidKey_GPIO_Config(void);uint8_tKey_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin);#endif設(shè)計(jì)按鍵函數(shù)頭文件bsp_key.h#ifndef__KE設(shè)計(jì)按鍵函數(shù)Key_GPIO_Config()#include"bsp_key.h"voidKey_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;/*開啟按鍵端口GPIOE(PE5)的時(shí)鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOE,&GPIO_InitStructure);}跟LED的GPIO初始化函數(shù)LED_GPIO_Config()類似。可用符號|同時(shí)配置多個(gè):GPIO_Pin_5|GPIO_Pin_6;設(shè)計(jì)按鍵函數(shù)Key_GPIO_Config()#includ按鍵檢測函數(shù)Key_Scan()/**輸入:GPIOx、GPIO_Pin:待讀取的端口、引腳*輸出:KEY_OFF(沒按下按鍵)、KEY_ON(按下按鍵)*/u8Key_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin){/*檢測是否有按鍵按下*/if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON){Delay(10000);//延時(shí)消抖

if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON)

{while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON);returnKEY_ON;}//等待按鍵釋放elsereturnKEY_OFF;elsereturnKEY_OFF;}}按鍵檢測函數(shù)Key_Scan()/**輸入:GPI檢測是否有按鍵按下庫函數(shù)GPIO_ReadInputDataBit(端口號,引腳號);返回引腳數(shù)據(jù),0為低電平,KEY_ON,可能有按鍵按下,調(diào)用延時(shí)函數(shù)消抖;否則返回1為高電平,KEY_OFF,表示按鍵沒有被按下。延時(shí)之后再次讀取該引腳數(shù)據(jù),若依然為低電平,表明確實(shí)有按鍵被按下了;否則返回KEY_OFF,表示沒按鍵。while循環(huán)調(diào)用GPIO_ReadInputDataBit(),等待按鍵釋放,條件變?yōu)榧偻顺鲅h(huán),返回表示按鍵被按下的標(biāo)志KEY_ON。同理,通過輸入不同的實(shí)參,來檢測其它按鍵的引腳。這就是庫的魅力!檢測是否有按鍵按下庫函數(shù)GPIO_ReadInputDat作業(yè):課下任務(wù)1、進(jìn)一步熟悉GPIO,掌握GPIO設(shè)計(jì)。2、掌握GPIO鍵盤實(shí)驗(yàn),實(shí)驗(yàn)報(bào)告。作業(yè):課下任務(wù)1、進(jìn)一步熟悉GPIO,掌握GPIO設(shè)計(jì)。9.2GPIO外部中斷EXTI設(shè)計(jì)EXTI(Externalinterrupt):通過GPIO檢測輸入脈沖,引起中斷事件,打斷原來的代碼執(zhí)行流程,進(jìn)入到中斷服務(wù)函數(shù),處理完后,再返回到中斷之前的代碼中執(zhí)行。STM32的所有GPIO都可以用作外部中斷源,可把按鍵輪詢檢測改為由中斷來處理,大大提高軟件執(zhí)行的效率。Cortex內(nèi)核具有強(qiáng)大的異常響應(yīng)系統(tǒng),能夠打斷當(dāng)前代碼執(zhí)行流程的事件分為異常exception和中斷interrupt,用一個(gè)異常向量表管理起來,編號為0~15的稱為內(nèi)核異常,而16以上的則稱為外部中斷。STM32向量表,優(yōu)先級從-3至6的中斷向量稱為系統(tǒng)異常,優(yōu)先級為負(fù)的不能設(shè)置優(yōu)先級,如復(fù)位Reset、不可屏蔽中斷NMI、硬錯(cuò)誤Hardfault。從優(yōu)先級7開始的稱為外部中斷,優(yōu)先級可自行設(shè)置。9.2GPIO外部中斷EXTI設(shè)計(jì)EXTI(ExternSTM32中斷向量表STM32中斷向量表STM32中斷向量表-詳見參考手冊STM32中斷向量表-詳見參考手冊GPIO外部中斷EXTI中斷控制器NVIC屬于Cortex內(nèi)核的器件,能配置16種中斷向量,超過16個(gè)中斷向量時(shí),必然有2個(gè)以上的中斷向量是使用相同的中斷種類。注意:相同種類的中斷不能嵌套。GPIO與EXTI的連接方式:PAx~PGx端口的中斷事件都連接到了EXTIx,可以分時(shí)復(fù)用。可以配置為下降沿中斷,上升沿中斷和上升下降沿中斷這三種模式。EXTI最普通的應(yīng)用就是接上一個(gè)按鍵,設(shè)置為下降沿觸發(fā),用中斷來檢測按鍵。GPIO外部中斷EXTI中斷控制器NVIC屬于Cortex內(nèi)外部中斷0與NVIC的關(guān)系外部中斷0與NVIC的關(guān)系EXTI寄存器EXTI寄存器結(jié)構(gòu):typedefstruct{vu32IMR;vu32EMR;vu32RTSR;vu32FTSR;vu32SWIER;vu32PR;}EXTI_TypeDef;EXTI寄存器EXTI寄存器結(jié)構(gòu):EXTI庫函數(shù)EXTI庫函數(shù)NVIC寄存器NVIC寄存器NVIC庫函數(shù)NVIC庫函數(shù)NVIC配置misc庫中NVIC_Init()函數(shù)對NVIC初始化,用到NVIC_InitTypeDef結(jié)構(gòu)體,其中四個(gè)成員:NVIC_IRQChannel參數(shù)來選擇將要配置的中斷向量;NVIC_IRQChannelCmd參數(shù)來進(jìn)行使能(ENABLE)或關(guān)閉(DISABLE)該中斷;NVIC_IRQChannelPreemptionPriority成員要配置中斷向量的搶占優(yōu)先級;NVIC_IRQChannelSubPriority需要配置中斷向量的響應(yīng)優(yōu)先級。NVIC只可配置16種中斷向量的優(yōu)先級:編號越小,優(yōu)先級別越高;搶占優(yōu)先級:是指打斷其它中斷,會出現(xiàn)嵌套中斷;響應(yīng)優(yōu)先級:先處理響應(yīng)優(yōu)先級高的中斷;NVIC配置misc庫中NVIC_Init()函數(shù)對NVI中斷檢測按鍵實(shí)驗(yàn)硬件連接:PE5–key1、PE6–key2,key1按下時(shí),進(jìn)入線中斷處理函數(shù),LED1狀態(tài)取反。

配置工程環(huán)境:除使用GPIO和RCC片上外設(shè);還要使用exti片上外設(shè),stm32f10x_exti.c包含了支持exti配置和操作的函數(shù);misc.c文件則包含了NVIC的配置函數(shù);本實(shí)驗(yàn)中還會在stm32f10x_it.c中編寫中斷服務(wù)函數(shù)。中斷檢測按鍵實(shí)驗(yàn)硬件連接:PE5–key1、PE6–Main函數(shù)配置好LED用到的I/O后,調(diào)用LED1()點(diǎn)亮一盞LED燈;配置中斷,等待中斷發(fā)生。intmain(void){/*configtheled*/LED_GPIO_Config();LED1(ON);/*extilineconfig*/EXTI_PE5_Config();/*waitinterrupt*/while(1){}}Main函數(shù)配置好LED用到的I/O后,調(diào)用LED1()點(diǎn)亮配置外部中斷exti.cEXTI_PE5_Config()函數(shù),配置PE5為線中斷口,并設(shè)置中斷優(yōu)先級。主要步驟:1.使能EXTIx線的時(shí)鐘和第二功能AFIO時(shí)鐘2.配置EXTIx線的中斷優(yōu)先級3.配置EXTI中斷線I/O4.選定要配置為EXTI的I/O口線和I/O口的工作模式5.EXTI中斷線工作模式配置配置外部中斷exti.cEXTI_PE5_Config()函EXTI_PE5_Config()函數(shù)8.voidEXTI_PE5_Config(void)9.{10.GPIO_InitTypeDefGPIO_InitStructure;11.EXTI_InitTypeDefEXTI_InitStructure;13.

/*configtheextiline(PE5)clockandAFIOclock*/14.RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);16./*configtheNVIC(PE5)*/17.NVIC_Configuration();//NVIC初始化配置19./*EXTIlinegpioconfig(PE5)*/20.GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;21.GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//上拉輸入EXTI_PE5_Config()函數(shù)8.voidEXTEXTI_PE5_Config()函數(shù)_續(xù)22.GPIO_Init(GPIOE,&GPIO_InitStructure);24./*EXTIline(PE5)modeconfig*/25.GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource5);//PE5設(shè)置為EXTI輸入線26.EXTI_InitStructure.EXTI_Line=EXTI_Line5;27.EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;28.EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿觸發(fā)中斷

29.EXTI_InitStructure.EXTI_LineCmd=ENABLE;30.EXTI_Init(&EXTI_InitStructure);31.}EXTI_PE5_Config()函數(shù)_續(xù)22.GPIO_GPIO端口的復(fù)用功能AFIOAFIO(alternate-functionI/O),GPIO除了用作普通的輸入輸出(主功能),還可以作為片上外設(shè)的復(fù)用輸入輸出,如串口,ADC,這些就是復(fù)用功能。GPIO還有重映射功能:重映射功能是指把原來屬于A引腳的默認(rèn)復(fù)用功能,轉(zhuǎn)移到了B引腳進(jìn)行使用(當(dāng)然B引腳具有這個(gè)重映射功能)。當(dāng)把GPIO用作EXTI外部中斷或使用重映射功能的時(shí)候,必須開啟AFIO時(shí)鐘。代碼的第14行,開啟了AFIO的時(shí)鐘。GPIO端口的復(fù)用功能AFIOAFIO(alternateNVIC初始化配置EXTI_PE5_Config()調(diào)用了NVIC_Configuration()函數(shù)來配置NVIC控制器。8.staticvoidNVIC_Configuration(void)9.{10.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論