csz9981 发表于 2019-4-10 10:22:43

按键KEY1作为外部中断,分别测试上升沿和下降沿,发现触...

本帖最后由 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                        //上升沿触发程序和仿真工程如下 :

主大家帮忙找找原因。

toofree 发表于 2019-5-13 09:58:28

代码没有问题,是PROTEUS的问题。
要学习的话,用硬仿真吧。搞个Nucleo板子,或者买个简易ST-Link+STM32最小系统,最便宜35块钱给你搞一套。

wbnorth 发表于 2019-4-10 10:45:50

表达问题应该清晰明了,我是没看懂,帮顶。

csz9981 发表于 2019-4-10 11:00:55

本帖最后由 csz9981 于 2019-4-10 11:02 编辑

wbnorth 发表于 2019-4-10 10:45
表达问题应该清晰明了,我是没看懂,帮顶。
按键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);      //把实参输入给初始化函数,通过初始化函数把实参传递给相应的寄存器。。
}

yklstudent-1794 发表于 2019-5-13 09:34:30

也许仿真软件有BUG,呵呵

wenyangzeng 发表于 2019-5-13 10:01:43

本帖最后由 wenyangzeng 于 2019-5-13 15:53 编辑

      参考ST官方手册EXTI寄存器设置,某一位设置上升沿中断,应该是EXTI_RTSR的该位置1,比如要设置D7位上升沿中断,应该是EXTI_RTSR |=0X08,比如要设置D7位下降沿中断,应该是EXTI_FTSR |=0X08,而非EXTI_FTSR =0X0C。(EXTI_FTSR =0X0C 是置D7、D6位下降沿中断了)


select326 发表于 2019-5-13 10:27:53

现在开发板很便宜了,买个板子吧

xmstudio 发表于 2019-5-16 08:12:33

仿真就是仿真,以前用里面的MSP430仿真就发现很多东西不能用。STM32的核心板挺便宜的,为什么不买一个核心板试试呢?
页: [1]
查看完整版本: 按键KEY1作为外部中断,分别测试上升沿和下降沿,发现触...