1 #include 'stm32f10x.h' // 相当于51单片机中的 #include 2 #include 'stm32f10x_gpio.h' 3 #include 'stm32f10x_exti.h' 4 #include 'misc.h' 5 /* 6 *K1 K2作为中断源控制红色LED灯,实现任意键按一下LED灯亮或者灭 7 */ 8 /*GPIO、NVIC、EXTI配置*/ 9 int peizhi() 10 { 11 12 /*GPIO配置*/ 13 // K1配置 PA0 14 GPIO_InitTypeDef a; 15 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); 16 a.GPIO_Speed=GPIO_Speed_50MHz; 17 a.GPIO_Pin=GPIO_Pin_5; 18 a.GPIO_Mode=GPIO_Mode_Out_PP; 19 GPIO_Init(GPIOB,&a); 20 21 22 /*NVIC嵌套向量中断控制器*/ 23 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); 24 NVIC_InitTypeDef b; 25 b.NVIC_IRQChannel = EXTI0_IRQn;//EXTI0_IRQn外部中断线0中断 26 b.NVIC_IRQChannelPreemptionPriority = 1;//0 1 2 3 4 27 b.NVIC_IRQChannelSubPriority = 1;//0 1 2 3 4 28 b.NVIC_IRQChannelCmd = ENABLE; 29 NVIC_Init(&b); 30 31 /*外部中断EXTI配置*/ 32 EXTI_InitTypeDef c; 33 c.EXTI_Line=EXTI_Line0;//外部路线0 和13 34 c.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式 35 c.EXTI_Trigger=EXTI_Trigger_Rising;//上升沿为中断请求 36 c.EXTI_LineCmd=ENABLE;//使能 37 EXTI_Init(&c);//指向结构体EXTI_InitTypeDef的指针a 38 39 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);//选择GPIO管脚用作外部中断线路 40 41 42 43 //K2配置 PC13 44 //以下K2的配置基于K1配置的,就是说K2很多配置和K1相同的,只是把不同的配置写下来 45 46 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE); 47 GPIO_Init(GPIOB,&a); 48 49 b.NVIC_IRQChannel = EXTI15_10_IRQn; 50 NVIC_Init(&b); 51 52 c.EXTI_Line = EXTI_Line13; 53 EXTI_Init(&c); 54 55 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource13); 56 57 } 58 59 60 /*主函数*/ 61 int main(void) 62 { 63 peizhi(); 64 65 } 66 67 /*中断服务函数*/ 68 void EXTI0_IRQHandler(void) 69 { 70 //确保是否产生EXTI line中断 71 if(EXTI_GetITStatus(EXTI_Line0)!=RESET) // 检查指定的EXTI线路触发请求发生与否 72 { 73 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==0)// 74 { 75 GPIO_SetBits(GPIOB,GPIO_Pin_5); 76 } 77 else 78 { 79 GPIO_ResetBits(GPIOB,GPIO_Pin_5); 80 } 81 EXTI_ClearITPendingBit(EXTI_Line0); 82 } 83 } 84 85 void EXTI15_10_IRQHandler(void) 86 { 87 //确保是否产生EXTI line中断 88 if(EXTI_GetITStatus(EXTI_Line13)!=RESET) // 检查指定的EXTI线路触发请求发生与否 89 { 90 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==0)// 91 { 92 GPIO_SetBits(GPIOB,GPIO_Pin_5); 93 } 94 else 95 { 96 GPIO_ResetBits(GPIOB,GPIO_Pin_5); 97 } 98 EXTI_ClearITPendingBit(EXTI_Line13); 99 } 100 }
上一篇:用STM32CudeMX 点亮红色LED灯(软件操作步骤为主)
下一篇:外部中断0(含知识点)
推荐阅读最新更新时间:2024-11-08 04:51
设计资源 培训 开发板 精华推荐
- [供电中心V4系列] 5V8A多口USB充电板
- ADR430A 2.048 Vout 超低噪声 XFET 电压基准的典型应用,具有灌电流和拉电流能力
- RT9055 300mA 双路 LDO 稳压器典型应用电路
- 使用 ON Semiconductor 的 LV5807MX 的参考设计
- RD-326,适用于 LCD 电视的 300W、24V DC 至 DC 单路输出电源的参考设计
- 使用 MaxLinear, Inc 的 SPX2951 的参考设计
- SPX5205 150mA 低噪声 LDO 稳压器的典型应用
- #第三届立创大赛#老人智能陪护抱枕
- 基于L5973D的具有4V/36V输入电压范围的2A直流降压型开关稳压器
- LT3970IMS 5V 同步降压转换器的典型应用