新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32學習筆記——外部中斷EXTI

        STM32學習筆記——外部中斷EXTI

        作者: 時間:2016-11-28 來源:網絡 收藏

        //配置按鈕中斷線觸發方式設置中斷配置結構體成員

        EXTI_InitStructure.EXTI_Line=EXTI_Line6;//選擇外部中斷線EXTI_Line0~EXTI_Line18共19根線

        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//設置為中斷請求,可以為EXTI_Mode_Interrupt中斷請求或者

        //EXTI_Mode_Event事件請求

        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//觸發方式下降沿觸發還可以為EXTI_Trigger_Rising上升沿觸發或者

        //EXTI_Trigger_Rising_Falling上升沿下降沿觸發

        EXTI_InitStructure.EXTI_LineCmd=ENABLE;//中斷線使能ENABLE使能,DISABLE失能

        EXTI_Init(&EXTI_InitStructure);//根據參數結構體初始化EXTI中斷

        EXTI_GenerateSWInterrupt(EXTI_Line6);//產生一個軟件中斷EXTI_Line6中斷允許

        //到此中斷配置完成,可以寫中斷處理函數。

        while(1)

        {

        }

        }

        voidRCC_Configuration(void)

        {

        //復位RCC外部設備寄存器到默認值

        RCC_DeInit();

        //打開外部高速晶振

        RCC_HSEConfig(RCC_HSE_ON);

        //等待外部高速時鐘準備好

        HSEStartUpStatus=RCC_WaitForHSEStartUp();

        //外部高速時鐘已經準別好

        if(HSEStartUpStatus==SUCCESS)

        {

        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

        FLASH_SetLatency(FLASH_Latency_2);

        //配置AHB(HCLK)時鐘=SYSCLK

        RCC_HCLKConfig(RCC_SYSCLK_Div1);

        //配置APB2(PCLK2)鐘=AHB時鐘

        RCC_PCLK2Config(RCC_HCLK_Div1);

        //配置APB1(PCLK1)鐘=AHB1/2時鐘

        RCC_PCLK1Config(RCC_HCLK_Div2);

        //配置ADC時鐘=PCLK21/4

        RCC_ADCCLKConfig(RCC_PCLK2_Div4);

        //配置PLL時鐘==外部高速晶體時鐘*98MHz*9MHz=72MHz

        RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

        //配置ADC時鐘=PCLK2/4

        RCC_ADCCLKConfig(RCC_PCLK2_Div4);

        //使能PLL時鐘

        RCC_PLLCmd(ENABLE);

        //等待PLL時鐘就緒

        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)

        {

        }

        //配置系統時鐘=PLL時鐘

        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

        //檢查PLL時鐘是否作為系統時鐘

        while(RCC_GetSYSCLKSource()!=0x08)

        {

        }

        }

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB

        |RCC_APB2Periph_AFIO,ENABLE);

        //使能GPIOA,GPIOB和AFIO的APB2

        }

        voidGPIO_Configuration(void)

        {

        GPIO_InitTypeDefGPIO_InitStructure;//定義配置GPIO的結構體

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//選中第8個腳

        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出

        GPIO_Init(GPIOB,&GPIO_InitStructure);//用配置好的結構體初始化GPIOBPB8用于驅動led

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//選中6腳

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//配置浮空輸入

        GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOBPB6腳連接外部中斷線6的中斷源

        //所有的端口都有外部中斷的能力,為了使用外部中斷線,端口必須配置為輸入模式

        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 长寿区| 长宁区| 武胜县| 达日县| 犍为县| 武川县| 蓝田县| 莲花县| 勐海县| 淳安县| 苍溪县| 镇原县| 肃南| 高阳县| 衡水市| 大同市| 隆林| 正安县| 贵阳市| 百色市| 庆云县| 云和县| 额尔古纳市| 东至县| 广灵县| 精河县| 淅川县| 东明县| 临漳县| 高唐县| 宁晋县| 洛阳市| 绥滨县| 磴口县| 峡江县| 自治县| 汽车| 庆阳市| 临洮县| 黔南| 西盟|