发 帖  
张飞软硬开源:基于MST32的BLDC直流无刷电机驱动器,👉戳此立抢👈
[问答] STM32F103ZE按下按键中断函数不执行
240 STM32 中断
分享


照着正点原子的例程抄的代码,按下按键的时候,中断函数不执行,不能触发中断。我上传了工程,求大神指点
0
2019-5-15 11:26:51   评论 分享淘帖 邀请回答
17个回答
移植过来的地方要好好检查一下,尤其是端口的初始化
2019-5-15 11:46:12 评论

举报

我的按键在PE4 PF4 上面,我查看没有这样的低级错误,这二天这个问题查了好长时间的
2019-5-15 12:13:56 评论

举报

移植至少要知道每一个API的功能。。。
2019-5-15 12:34:28 评论

举报

能具体说下需要哪个函数吗?我看正点原子的例程就是这么写的,
2019-5-15 12:45:37 评论

举报

中断首先需要各个时钟开启,GPIO功能使能,中断开启,优先级开启.实在找不到,先调试好的代码,查看寄存器,再调试移植有问题的,对比寄存器,看出差异,反过来找函数,就容易了..
2019-5-15 13:02:33 评论

举报

cknz 发表于 2019-5-15 20:03
中断首先需要各个时钟开启,GPIO功能使能,中断开启,优先级开启.实在找不到,先调试好的代码,查看寄存器,再调试移植有问题的,对比寄存器,看出差异,反过来找函数,就容易了..

谢谢,按照这个思路我再查查
2019-5-15 13:18:17 评论

举报

void EXT0_IRQHandler(void)
{

  if(EXTI_GetITStatus(EXTI_Line0) != RESET)
  {
     EXTI_ClearITPendingBit(EXTI_Line0);
               
  }


}
2019-5-15 13:30:19 评论

举报

ctwewer 发表于 2019-5-15 20:31
void EXT0_IRQHandler(void)
{

void EXTI4_IRQHandler(void)
{
        delay_ms(10);//消抖

        EXTI_ClearITPendingBit(EXTI_Line4);  //清除LINE4上的中断标志位  
}

我在这里面打断点,无法触发按键没任何响应。。。
2019-5-15 13:44:43 评论

举报

shugan2011 发表于 2019-5-15 20:45
void EXTI4_IRQHandler(void)
{
        delay_ms(10);//消抖

牛逼。。。中断里面硬件延时10ms。。。膜拜!!!
2019-5-15 14:02:19 评论

举报

while(1)里边就一个延时函数吗?
想进入中断的话我觉得while里边起码要有个判断按键按下的函数吧,要记得加上消抖。
2019-5-15 14:25:40 评论

举报

中断中延时10ms,这个不应该。但是你说的不进中断,那可能另有问题。
void EXTI4_IRQHandler(void)
{
        delay_ms(10);//消抖

        EXTI_ClearITPendingBit(EXTI_Line4);  //清除LINE4上的中断标志位  
}

经过查看你的程序,你的外部中断使能在哪里?
EXTI_InitStructure.EXTI_LineCmd = ENABLE;

加上使能试试,见下图。
2019-5-15 14:38:54 评论

举报

这个确实没有。但是,正点原子的例子是可以执行的。
后来我比较了下,我发下一个RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
有这句,中断就能执行,没有的话,原子的例子也不能中断。很奇怪,串口和中断有什么关系?
2019-5-15 14:50:57 评论

举报

按键这不执行简单得就两个问题:
1、中断未打开;
2、中断开错了;

如果深入你会发现还有一个问题会造成无按键中断产生:
就是中断的映射位与其他中断映射位冲突。
2019-5-15 15:05:18 评论

举报

peternie 发表于 2019-5-15 22:06
按键这不执行简单得就两个问题:
1、中断未打开;
2、中断开错了;

分析了下,还是对硬件不了解,估计对硬件了解就能避免这类问题。。。
2019-5-15 15:13:01 评论

举报

shugan2011 发表于 2019-5-15 21:52
这个确实没有。但是,正点原子的例子是可以执行的。
后来我比较了下,我发下一个RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
有这句,中断就能执行,没有的话,原子的例子也不能中断。很奇怪,串口和中断有什么关系?

试试这个程序,如果还是不能中断,那说明你的上拉没拉上去,或者管脚坏了。换一个管脚试试。

你不用管原子的是什么样的,可以跑跑官方固件库的样例程序。
2019-5-15 15:31:52 评论

举报

zhouxk 发表于 2019-5-15 22:32
试试这个程序,如果还是不能中断,那说明你的上拉没拉上去,或者管脚坏了。换一个管脚试试。

你不用管原子的是什么样的,可以跑跑官方固件库的样例程序。

非常感谢,你的方法解决了这个问题。谢谢
2019-5-15 15:37:27 评论

举报

本帖最后由 toofree 于 2018-4-3 22:05 编辑

解决了就好,以后可以看看官方的固件库样例程序。各种外设,各种用法,能解决你90%的疑问。
英蓓特的Em-STM3210E开发板,与ST官方的开发板STM3210E-EVAL基本兼容,stm32f10x_stdperiph_lib固件库都可以用。经我对比,LCD显示稍有点不一样,SPI Flash空间大小不一样,其余应该是一样的。
2019-5-15 15:43:25 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

我要提问
课程
    关闭

    站长推荐 上一条 /8 下一条

    快速回复 返回顶部 返回列表