也是一個半生不熟的東西,進行了簡單的中斷處理。
軟件環(huán)境:MDK470a
硬件環(huán)境:STM32F4-Discovery。按鍵B1連接在F4芯片的PA0引腳。當按鍵按下時,引腳電平被拉底。
功能描述:按壓按鍵B1時,觸發(fā)外部中斷。進入中斷處理函數(shù)后,通過串口發(fā)送消息。
實現(xiàn)步驟:
1、打開PA時鐘,設(shè)置PA0引腳為輸入。
void EXTI_GPIO_Congig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_PinSource0;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_100MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
2、打開系統(tǒng)配置控制器(System configuration controller)時鐘。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
關(guān)于系統(tǒng)控制寄存器(SYSCFG)的功能,是F4系列新增的。功能如下:
The system configuration controller is mainly used to remap the memory accessible in the code area, select the Ethernet PHY interface and manage the external interrupt line
connection to the GPIOs.
SYSCFG主要用于映射訪問CODE區(qū)域的內(nèi)存、選擇以太網(wǎng)的什么接口,管理外部中斷線到GPIO的連接。
設(shè)置外部中斷,還要設(shè)置SYSCFG的外部中斷配置寄存器。
3、配置外部中斷EXTI的工作方式.
映射到PA0,即線0,使用中斷模式下降沿觸發(fā)。
設(shè)置EXTI寄存器的工作方式交給了庫函數(shù)。
void EXTI_Config(void)
{
EXTI_GPIO_Congig();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStructure);
}
4、編寫中斷處理函數(shù),實現(xiàn)向串口打印信息。
固定的函數(shù)名:void EXTI0_IRQHandler(void)。
進入中斷處理函數(shù)后,首先檢查是否為線0的中斷。如果是,則清除這個中斷標志。之后就可以發(fā)送消息了。
消息發(fā)送完成之后,清除在處理外部中斷期間到來的外部中斷。使用EXTI_ClearITPendingBit()完成
void EXTI0_IRQHandler(void)
{
if(SET == EXTI_GetITStatus(EXTI_Line0))
{
EXTI_ClearFlag(EXTI_Line0);
printf("i am in exti irqhandlerrn");
printf("and the extiflag is clearedrn");
EXTI_ClearITPendingBit(EXTI_Line0);
}
}