#include "pbdata.h"
void RCC_Configuration(void);
void GPIO_Configuration(void);
void EXTI_Configuration(void);
void NVIC_Configuration(void);
int main(void)
{
RCC_Configuration(); //系统时钟初始化
GPIO_Configuration();//端口初始化
EXTI_Configuration();
NVIC_Configuration();
while(1);
}
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//LED
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOB,&GPIO_InitStructure);
//KEY
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init(GPIOC,&GPIO_InitStructure);
}
void EXTI_Configuration(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_ClearITPendingBit(EXTI_Line1);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource1);
EXTI_InitStructure.EXTI_Line=EXTI_Line1;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
以上是主函数
void EXTI1_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line1)==SET)
{
EXTI_ClearITPendingBit(EXTI_Line1);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)==Bit_RESET)
if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)
{
//LED 熄灭
GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
else
{
//LED 发光
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
}
}
以上是中断函数,
程序目标是,pc1按键按下,输入中断信号,PB5输出信号点亮LED灯,但是调试半天就是不行,有大侠帮忙看看,程序问题在哪里,中断2使用PC2端口也一样,进不去中断,除非PC5口才行
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这句有问题吧,应该配置为EXTI1_IRQn。
另外看看你的按键按下去之后对应单片机引脚是不是低电平,并不是所有按键开关都是接地设计的。
此外当进入中断函数的时候说明按键已经按下了,不需要这一句了。
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)==Bit_RESET)
一周热门 更多>