本帖最后由 csz9981 于 2019-4-10 11:00 编辑 按键KEY1作为外部中断,分别测试上升沿和下降沿,发现触发方式和程序设置的方式 对不上? 学习了中断后,想用PROTEUS8.8仿真,结果仿真的时候,LED灯能正常闪烁,按键也能控制LED_G反转,问题是 程序设置的触发方式是: EXTI_Trigger_Rising = 0x08, //上升沿触发 EXTI_Trigger_Falling = 0x0C, //下降沿触发 EXTI_Trigger_Rising_Falling = 0x10 //上升、下降沿都触发 仿真出来的触发方式是: EXTI_Trigger_Rising = 0x08, //上升、下降沿都触发 EXTI_Trigger_Falling = 0x0C, //下降沿触发 EXTI_Trigger_Rising_Falling = 0x10 //上升沿触发 程序和仿真工程如下 : |
要学习的话,用硬仿真吧。搞个Nucleo板子,或者买个简易ST-Link+STM32最小系统,最便宜35块钱给你搞一套。
评分
查看全部评分
按键KEY1作为外部中断,分别测试上升沿和下降沿,发现触发方式和程序设置的方式 对不上?
void EXTI_Key_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct; //初始化结构体变量
EXTI_InitTypeDef EXTI_InitStruct; //初始化结构体变量
//配置中断优先级
EXTI_NVIC_Config();
//初始化 GPIO-KEY1
GPIO_InitStruct.GPIO_Pin = KEY1_INT_GPIO_PIN; //GPIO_Pin_0
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK, ENABLE);//开时钟,RCC_APB2Periph_GPIOA
GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStruct); //初始化PA0
//初始化 EXTI
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE); //AFIO 开时钟 RCC_APB2Periph_AFIO
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //选择输入线PA0 AFIO->EXTICR1
EXTI_InitStruct.EXTI_Line = EXTI_Line0; //选择输入线0
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;//上升,下降沿,都触发
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct); //把实参输入给初始化函数,通过初始化函数把实参传递给相应的寄存器。。
}
评分
查看全部评分
参考ST官方手册EXTI寄存器设置,某一位设置上升沿中断,应该是EXTI_RTSR的该位置1,比如要设置D7位上升沿中断,应该是EXTI_RTSR |=0X08,比如要设置D7位下降沿中断,应该是EXTI_FTSR |=0X08,而非EXTI_FTSR =0X0C。(EXTI_FTSR =0X0C 是置D7、D6位下降沿中断了)
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分