日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]也是一個半生不熟的東西,進行了簡單的中斷處理。軟件環(huán)境:MDK470a硬件環(huán)境:STM32F4-Discovery。按鍵B1連接在F4芯片的PA0引腳。當(dāng)按鍵按下時,引腳電平被拉底。功能描述:按壓按鍵B1時,觸發(fā)外部中斷。進入中斷處理

也是一個半生不熟的東西,進行了簡單的中斷處理。
軟件環(huán)境:MDK470a
硬件環(huán)境:STM32F4-Discovery。按鍵B1連接在F4芯片的PA0引腳。當(dāng)按鍵按下時,引腳電平被拉底。
功能描述:按壓按鍵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);
}
}


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉