高中生
最后登录1970-1-1
在线时间 小时
注册时间2016-11-16
|
1火花
我照着霸道板第18讲视频(EXTI第二节GPIO外部中断代码讲解)编写的外部中断实验例程,来操作正点原子的F103ZET6,烧写进去过后,得到的现象和视频里演示不一样。问题是这样的:
我采用的是板上KEY2(对应为GPIOE.2)中断控制LED灯(对应GPIOB.5)的翻转,初始化EXTI代码里配置的是上升沿触发,按理来说根据视频里讲的得到的现象应该是按下一次按键,LED灯翻转一次。
可是实际的现象却是:
代码烧写进去,没去按按键,灯一直在闪烁,是那种很快的闪烁,或者是按下一次按键灯不灭,或者顿一会才灭掉,又或者是按下按键手不松灯灭,松开按键灯又亮,配置成下降沿触发也是如此。而配置成上升沿和下降沿都触发的方式,LED未见闪烁,这是否是因为按键检测未消抖所造成的呢?还是其他什么原因
以下是部分代码:
中断优先级配置函数:
static void EXTI_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//配置中断优先级分组为分组1
NVIC_InitStruct.NVIC_IRQChannel = EXTI4_IRQn;//配置中断源
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;//配置主优先级,也叫抢占优先级,优先级数字越小,优先级越高
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;//配置子优先级
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//使能,开总中断
NVIC_Init(&NVIC_InitStruct);
}
中断事件配置函数
void EXTI_Key_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
EXTI_InitTypeDef EXTI_InitStruct;
//配置中断优先级
EXTI_NVIC_Config();
//开启按键GPIOE.2口的时钟
RCC_APB2PeriphClockCmd(KEY0_GPIO_INT_CLK,ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//配置成浮空输入
GPIO_InitStruct.GPIO_Pin = KEY0_INT_GPIO_PIN;
GPIO_Init(KEY0_INT_GPIO_PORT,&GPIO_InitStruct);
//初始化EXTI
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
EXTI_InitStruct.EXTI_Line = EXTI_Line4;
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct);
}
中断服务函数
void EXTI4_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line4) != RESET)
{
LED_R_TOGGLE;
}
//清除中断标志位
EXTI_ClearITPendingBit(EXTI_Line4);
}
|
最佳答案
查看完整内容
1-我们的板子配置成上升沿和下降沿都可以,具体是现象不一样,区别我在视频有讲
2-我们的按键带硬件消抖,如果你的板子没有硬件消抖,那么需要在软件上多次检测来实现软件消抖。
|