你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
csz9981 提问时间:2019-4-10 10:22 /
本帖最后由 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                        //上升沿触发
程序和仿真工程如下 :
18-EXTI.zip (5.82 MB, 下载次数: 24)
收藏 1 评论7 发布时间:2019-4-10 10:22

举报

7个回答
七哥 回答时间:2019-5-13 09:58:28
代码没有问题,是PROTEUS的问题。
要学习的话,用硬仿真吧。搞个Nucleo板子,或者买个简易ST-Link+STM32最小系统,最便宜35块钱给你搞一套。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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 回答时间:2019-5-13 09:34:30
也许仿真软件有BUG,呵呵

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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位下降沿中断了)

无标题.png

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

CC4 回答时间:2019-5-13 10:27:53
现在开发板很便宜了,买个板子吧

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

xmstudio 回答时间:2019-5-16 08:12:33
仿真就是仿真,以前用里面的MSP430仿真就发现很多东西不能用。STM32的核心板挺便宜的,为什么不买一个核心板试试呢?

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版