新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stm32快速學習3——簡單按鍵中斷

        stm32快速學習3——簡單按鍵中斷

        作者: 時間:2016-11-17 來源:網絡 收藏
        2個按鍵中斷,控制2個LED

        Main文件

        本文引用地址:http://www.104case.com/article/201611/315442.htm

        #include"stm32f10x.h"

        voidRCC_Configuration(void);

        voidGPIO_Configuration(void);

        voidEXTI_Configuration(void);//外部中斷設置

        voidNVIC_Configuration(void);//中斷優先級別設置

        unsignedcharled_bit1=0;

        unsignedcharled_bit2=0;

        intmain(void)

        {

        RCC_Configuration();

        GPIO_Configuration();

        EXTI_Configuration();

        NVIC_Configuration();

        GPIO_SetBits(GPIOA,GPIO_Pin_0);

        GPIO_SetBits(GPIOA,GPIO_Pin_1);

        while(1);

        }

        voidRCC_Configuration(void)

        {

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_AFIO ,ENABLE);

        }

        voidGPIO_Configuration(void)

        {

        GPIO_InitTypeDefGPIO_InitStructure;

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;

        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

        GPIO_Init(GPIOA,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_8;

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

        GPIO_Init(GPIOD,&GPIO_InitStructure);

        }

        voidEXTI_Configuration(void)

        {

        EXTI_InitTypeDefEXTI_InitStructure;

        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource3);

        EXTI_InitStructure.EXTI_Line=EXTI_Line3;

        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;

        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;

        EXTI_InitStructure.EXTI_LineCmd=ENABLE;

        EXTI_Init(&EXTI_InitStructure);

        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource8);

        EXTI_InitStructure.EXTI_Line=EXTI_Line8;

        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;

        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;

        EXTI_InitStructure.EXTI_LineCmd=ENABLE;

        EXTI_Init(&EXTI_InitStructure);

        }

        voidNVIC_Configuration(void)

        {

        /*

        查看固件庫手冊,關于中斷部分NVIC_IRQChannel

        PA3、PA8分別設置

        EXTI3_IRQChannel外部中斷線3中斷

        EXTI9_5_IRQChannel外部中斷線9-5中斷

        關于中斷線,查看STM32 Reference Manual的9.2.5外部中斷/事件線路映像

        stm32使用了4個位來保存優先級別

        查固件庫

        Table273.先占優先級和從優先級值

        占先優先級->主

        副優先級->次

        號碼越小,等級越高

        判斷主的級別->一個高一個低->ok

        判斷主的級別->兩個都相同->判斷次的級別->一個高一個低->ok

        判斷主的級別->兩個都相同->判斷次的級別->兩個都相同->按照列表順序運行

        */

        NVIC_InitTypeDefNVIC_InitStructure;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//占先優先級、副優先級的資源分配

        NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;//指定中斷源

        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//占先優先級設定

        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//副優先級設定

        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

        NVIC_Init(&NVIC_InitStructure);

        NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn;

        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;

        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

        NVIC_Init(&NVIC_InitStructure);

        }

        stm32f10x_it.c中加入

        externunsignedcharled_bit1,led_bit2;

        voidEXTI9_5_IRQHandler(void)

        {

        if(EXTI_GetITStatus(EXTI_Line8)!=RESET)

        {

        //添加中斷處理程序

        if(led_bit1)

        {

        GPIO_SetBits(GPIOA,GPIO_Pin_1);

        led_bit1=0;

        }

        else

        {

        GPIO_ResetBits(GPIOA,GPIO_Pin_1);

        led_bit1=1;

        }

        EXTI_ClearFlag(EXTI_Line8);

        }

        }

        voidEXTI3_IRQHandler(void)

        {

        if(EXTI_GetITStatus(EXTI_Line3)!=RESET)

        {

        if(led_bit2)

        {

        GPIO_SetBits(GPIOA,GPIO_Pin_0);

        led_bit2=0;

        }

        else

        {

        GPIO_ResetBits(GPIOA,GPIO_Pin_0);

        led_bit2=1;

        }

        EXTI_ClearFlag(EXTI_Line3);

        }

        }



        關鍵詞: stm32按鍵中

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 澜沧| 日土县| 定日县| 远安县| 休宁县| 荣昌县| 宁晋县| 阿城市| 海丰县| 武功县| 肥乡县| 东乡县| 炎陵县| 西昌市| 宜宾县| 大城县| 双江| 甘泉县| 乐山市| 石泉县| 绥化市| 武安市| 新源县| 五寨县| 云林县| 上林县| 威海市| 孙吴县| 石屏县| 商洛市| 济南市| 阿城市| 蓝山县| 疏附县| 金坛市| 阜新| 四子王旗| 青川县| 万源市| 日喀则市| 家居|