本文引用地址:http://m.butianyuan.cn/article/201611/322884.htmvoidNVIC_Configuration(void)//配置嵌套向量中斷控制器
{
NVIC_InitTypeDefNVIC_InitStructure;//定義初始化NVIC的結(jié)構(gòu)體變量
#ifdefVECT_TAB_RAM
//配置向量表基址
NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);//分配中斷向量表
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
#endif
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//設置中斷優(yōu)先級
//設置優(yōu)先級分組:先占優(yōu)先級和從優(yōu)先級輸入?yún)?shù)設定優(yōu)先級分組位長度本例中NVIC_PriorityGroup_1:先占優(yōu)先級1為,從優(yōu)先級3位
//詳見《STM32函數(shù)說明》P165
//優(yōu)先級分組只能設定一次
//EXTI5-9共用一個中斷源,EXTI10-15共用一個中斷源
//詳見詳見《STM32函數(shù)說明》P166
NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQChannel;//中斷通道指定IRQ通道這里指定外部中斷線9-5中斷因為使用的是EXTI6
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//設定指定IRQ通道的先占優(yōu)先級
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//設定指定IRQ通道的從優(yōu)先級
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//設定指定IRQ通道中斷使能DISABLE失能
NVIC_Init(&NVIC_InitStructure);//根據(jù)結(jié)構(gòu)體中指定的參數(shù)初始化NVIC中斷
}
#ifdefDEBUG
voidassert_failed(u8*file,u32line)
{
while(1)
{
}
}
#endif
stm32f10x_it.c文件中的中斷服務函數(shù)如下:
voidEXTI9_5_IRQHandler(void)//外線路5-9的中斷處理程序
{
if(EXTI_GetITStatus(EXTI_Line6)!=RESET)//檢測制定的EXTI6線路觸發(fā)請求是否發(fā)生。
//該函數(shù)檢查指定的EXTI線路出發(fā)請求是否發(fā)生
{
//其實就是對PB8取反
GPIO_WriteBit(GPIOB,GPIO_Pin_8,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_8))));
//該函數(shù)可以對指定的端口位進行操作指定端口和位,然后指定操作。第三個參數(shù)指定待寫入的值
//該參數(shù)必須取枚舉類型BitAction的其中一個值,可以是Bit_RESET:清除數(shù)據(jù)端口位和Bit_SET:設置數(shù)據(jù)端口位
//GPIO_ReadOutputDataBit()函數(shù)讀取指定的IO端口管腳的輸出,參數(shù)指定端口和位
//EXTI_ClearFlag(EXTI_Line6);//清除中斷標志位(必須)我在網(wǎng)上看到要求必須,但是在本例中并沒有這句
EXTI_ClearITPendingBit(EXTI_Line6);//清除EXTI線路掛起位
}
}
評論