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

STM32F103ZE 按键中断不执行

[复制链接]
CC4 提问时间:2018-4-1 22:09 /
本帖最后由 select326 于 2018-4-3 21:53 编辑

照着正点原子的例程抄的代码,按下按键的时候,中断函数不执行,不能触发中断。我上传了工程,求大神指点
exti.zip (2.17 MB, 下载次数: 15)
收藏 评论23 发布时间:2018-4-1 22:09

举报

23个回答
七哥 回答时间:2018-4-2 23:16:37
中断中延时10ms,这个不应该。但是你说的不进中断,那可能另有问题。
void EXTI4_IRQHandler(void)
{
        delay_ms(10);//消抖

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

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

加上使能试试,见下图。
傲游截图20180402231547.jpg



评分

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

查看全部评分

七哥 回答时间:2018-4-3 22:02:08
本帖最后由 toofree 于 2018-4-3 22:05 编辑
select326 发表于 2018-4-3 21:52
非常感谢,你的方法解决了这个问题。谢谢

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

评分

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

查看全部评分

CC4 回答时间:2018-4-3 09:48:16
toofree 发表于 2018-4-2 23:16
中断中延时10ms,这个不应该。但是你说的不进中断,那可能另有问题。
void EXTI4_IRQHandler(void)
{

这个确实没有。但是,正点原子的例子是可以执行的。
后来我比较了下,我发下一个RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
有这句,中断就能执行,没有的话,原子的例子也不能中断。很奇怪,串口和中断有什么关系?
wenyangzeng 回答时间:2018-4-2 07:25:20
本帖最后由 wenyangzeng 于 2018-4-2 07:28 编辑

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
这里是初始化GPIOE而非GPIOA,这种低级错误不该犯的。

评分

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

查看全部评分

wudianjun2001 回答时间:2018-4-2 08:27:08
移植过来的地方要好好检查一下,尤其是端口的初始化

评分

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

查看全部评分

CC4 回答时间:2018-4-2 09:25:39
wenyangzeng 发表于 2018-4-2 07:25
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
这里是初始化GPIOE而非GPIOA,这种低级错误不该犯的 ...

我的按键在PE4 PF4 上面,我查看没有这样的低级错误,这二天这个问题查了好长时间的
CC4 回答时间:2018-4-2 09:26:00
wenyangzeng 发表于 2018-4-2 07:25
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
这里是初始化GPIOE而非GPIOA,这种低级错误不该犯的 ...

我的按键在PE4 PF4 上面,我查看没有这样的低级错误,这二天这个问题查了好长时间的
wenyangzeng 回答时间:2018-4-2 09:43:47
本帖最后由 wenyangzeng 于 2018-4-2 09:47 编辑
select326 发表于 2018-4-2 09:25
我的按键在PE4 PF4 上面,我查看没有这样的低级错误,这二天这个问题查了好长时间的 ...

没有中断返回函数
MrJiu 回答时间:2018-4-2 09:49:14
移植至少要知道每一个API的功能。。。

评分

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

查看全部评分

CC4 回答时间:2018-4-2 10:08:38
wenyangzeng 发表于 2018-4-2 09:43
没有中断返回函数

能具体说下需要哪个函数吗?我看正点原子的例程就是这么写的,
CC4 回答时间:2018-4-2 10:09:08
MrJiu 发表于 2018-4-2 09:49
移植至少要知道每一个API的功能。。。

我是新手,还请指点
butterflyspring 回答时间:2018-4-2 10:17:04
中断首先需要各个时钟开启,GPIO功能使能,中断开启,优先级开启.实在找不到,先调试好的代码,查看寄存器,再调试移植有问题的,对比寄存器,看出差异,反过来找函数,就容易了..

评分

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

查看全部评分

CC4 回答时间:2018-4-2 10:24:50
butterflyspring 发表于 2018-4-2 10:17
中断首先需要各个时钟开启,GPIO功能使能,中断开启,优先级开启.实在找不到,先调试好的代码,查看寄存器,再调 ...

谢谢,按照这个思路我再查查
wenyangzeng 回答时间:2018-4-2 10:52:06
select326 发表于 2018-4-2 10:09
我是新手,还请指点


void EXT0_IRQHandler(void)
{

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


}
CC4 回答时间:2018-4-2 11:26:32
wenyangzeng 发表于 2018-4-2 10:52
void EXT0_IRQHandler(void)
{


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

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

我在这里面打断点,无法触发按键没任何响应。。。
wenyangzeng 回答时间:2018-4-2 11:47:47
select326 发表于 2018-4-2 11:26
void EXTI4_IRQHandler(void)
{
        delay_ms(10);//消抖

EXTI_GenerateSWInterrupt(EXTI_Line4);
就可以判断EXTI4中断配置是否正确
MrJiu 回答时间:2018-4-2 11:56:38
select326 发表于 2018-4-2 11:26
void EXTI4_IRQHandler(void)
{
        delay_ms(10);//消抖

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