您的位置:首页 > 房产 > 建筑 > stm32中外部中断控制Led亮灭

stm32中外部中断控制Led亮灭

2025/1/3 3:49:41 来源:https://blog.csdn.net/CX3_3_0/article/details/139561281  浏览:    关键词:stm32中外部中断控制Led亮灭

说明:外部中断的方式通过按键来实现,stm32的配置为江科大stm32教程中的配置。

1.内容:

通过中断的方式,按下B15按键Led亮,按下B13按键Led灭。

2.硬件设计:

3.代码:

3.1中断底层

EXTI.c

#include "stm32f10x.h"  
#include "Led.h"void inter_Init(void)
{/*开启RCC时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);/*AFIOʱÖÓ*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/*配置GPIO*/GPIO_InitTypeDef GPIO_InitSturct;GPIO_InitSturct.GPIO_Mode=GPIO_Mode_IPD;GPIO_InitSturct.GPIO_Pin=GPIO_Pin_15|GPIO_Pin_13;GPIO_InitSturct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitSturct);/*配置EXTI*/GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource15);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource13);EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line15|EXTI_Line13;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_Init(&EXTI_InitStructure);/*配置NVIC*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitStructure);
}/*中断服务函数*/
void EXTI15_10_IRQHandler(void)
{if((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)==1)){LED1_ON();}if((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==1)){LED1_OFF();}EXTI_ClearITPendingBit(EXTI_Line15|EXTI_Line14);
}

EXTI.h

#ifndef __EXTI_H
#define __EXTI_Hvoid inter_Init(void);#endif

3.2 Led底层

Led.c

#include "stm32f10x.h"                 void LED_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStruct2;GPIO_InitStruct2.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStruct2.GPIO_Pin=GPIO_Pin_1;GPIO_InitStruct2.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct2);}void LED1_ON(void)
{GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}void LED1_OFF(void)
{GPIO_SetBits(GPIOA,GPIO_Pin_1);
}

Led.h

#ifndef __LED_H
#define __LED_Hvoid LED_Init(void);
void LED1_ON(void);
void LED1_OFF(void);#endif

3.3 main函数

#include "stm32f10x.h"                  // Device header
#include "EXTI.h"
#include "Led.h"int main(void)
{LED_Init();inter_Init();LED1_OFF();while (1){}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com