這是32基礎的按鍵中斷程序
全部資料下載地址:
實驗6 按鍵中斷.rar
(287.45 KB, 下載次數: 51)
2017-8-7 23:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
- /******************** 尚學科技 **************************
- * 實驗平臺:開拓者STM32開發板
- * 庫版本 :ST3.5.0
- * 作者 :尚學科技團隊
- * 本程序只供學習使用,未經作者許可,不得用于其它任何用途
- *版權所有,盜版必究。
- **********************************************************************************/
- #include "exti.h"
- #include "LED.h"
- #include "delay.h"
-
- /*
- * 函數名:NVIC_Configuration
- * 描述 :配置嵌套向量中斷控制器NVIC
- * 輸入 :無
- * 輸出 :無
- * 調用 :內部調用
- */
- static void NVIC_Configuration(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- /*設置NVIC中斷分組2:2位搶占優先級,2位響應優先級*/
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- /*使能按鍵所在的外部中斷通道*/
- NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
- /*設置搶占優先級,搶占優先級設為2*/
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
- /*設置子優先級,子優先級設為1*/
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
- /*使能外部中斷通*/
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- /*根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器*/
- NVIC_Init(&NVIC_InitStructure);
-
-
- /*使能按鍵所在的外部中斷通道*/
- NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
- /*設置搶占優先級,搶占優先級設為2*/
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
- /*設置子優先級,子優先級設為1*/
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
- /*使能外部中斷通*/
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- /*根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器*/
- NVIC_Init(&NVIC_InitStructure);
-
- /*使能按鍵所在的外部中斷通道*/
- NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
- /*設置搶占優先級,搶占優先級設為2*/
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
- /*設置子優先級,子優先級設為2*/
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;
- /*使能外部中斷通*/
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- /*根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器*/
- NVIC_Init(&NVIC_InitStructure);
- }
- /*
- * 函數名:EXTI_Config
- * 描述 :配置PA0,PA13,PA15為線中斷口,并設置中斷優先級
- * 輸入 :無
- * 輸出 :無
- * 調用 :外部調用
- */
- void EXTI_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
-
- /*開啟外設時鐘*/
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);
- /*初始化 GPIOE3,GPIOE4 設置為上拉輸入*/
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- /* 初始化 GPIOA.0 設置為下拉輸入*/
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- /*GPIOE4 中斷線配置*/
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
-
- /*GPIOE4 中斷初始化配置*/
- EXTI_InitStructure.EXTI_Line=EXTI_Line4;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- /*根據EXTI_InitStruct中指定的參數初始化外設EXTI寄存*/
- EXTI_Init(&EXTI_InitStructure);
-
-
- /*GPIOE3 中斷線配置*/
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);
-
- /*GPIOE3 中斷初始化配置*/
- 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_InitStruct中指定的參數初始化外設EXTI寄存*/
- EXTI_Init(&EXTI_InitStructure);
-
- /*GPIOA.0 中斷線配置*/
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
-
- /*GPIOA.0 中斷初始化配置*/
- EXTI_InitStructure.EXTI_Line=EXTI_Line0;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- /*根據EXTI_InitStruct中指定的參數初始化外設EXTI寄存器*/
- EXTI_Init(&EXTI_InitStructure);
-
- /*配置中斷控制器NVIC*/
- NVIC_Configuration();
-
- }
復制代碼
|