野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 28352|回复: 10

求助:从火哥流水灯程序基础上扩展到外部中断实验问题

[复制链接]
发表于 2014-1-16 00:30:07 | 显示全部楼层 |阅读模式
本帖最后由 hkhkdyx 于 2014-1-16 10:22 编辑

今天遇到一个不是问题的问题,觉得很诡异,不知道问题出哪里了。小弟最近初学STM32,跟着火哥视频修行,从最开始流水灯实验做实验,配合source insight编辑。应为用source insight,不想每个文件都新建工程,于是就在火哥的流水灯程序上面进行学习和扩展。当我学6、EXIT-按键实验时,只需在流水灯实验上面加上 QQ截图20140116002142.png 这个文件。然后配置下 QQ截图20140116002309.png 就OK,编译的时候也是没有错误和警告。但是下载都板子上按KEY1就是没反应。难道是我软件配置有问题?很不科学啊!但用火哥的原版程序百试不爽,不知为什么,我又没修改代码怎么会出现这种情况,求解啊,小弟初来咋到,各位大虾多多指导~
我把问题程序附上,附件超过1M上传不了,我把它放在网盘里了,麻烦各位了http://yunpan.cn/QzBz7uzHMDSmH

问题已经解决,谢谢各位大虾热心帮助! 原因是在stm32f10x_it.c里没有加上中断服务函数。


回复

使用道具 举报

发表于 2014-1-16 00:37:05 | 显示全部楼层
需要增加中断函数的哦,好像没加吧?
回复 支持 反对

使用道具 举报

发表于 2014-1-16 00:38:33 | 显示全部楼层
看别人的代码,拿来锻炼一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-16 00:39:25 | 显示全部楼层
丁玉 发表于 2014-1-16 00:37
需要增加中断函数的哦,好像没加吧?

您能说得稍微详细点吗?中断函数我直接复制粘贴过来的啊
回复 支持 反对

使用道具 举报

发表于 2014-1-16 00:42:02 | 显示全部楼层
hkhkdyx 发表于 2014-1-16 00:39
您能说得稍微详细点吗?中断函数我直接复制粘贴过来的啊

User\stm32f10x_it.c  没看到 有 EXTI 的中断函数啊
回复 支持 反对

使用道具 举报

发表于 2014-1-16 08:28:04 | 显示全部楼层
在stm32f10x_it.c里加上这个:
#include "bsp_led.h"
void EXTI0_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line0) != RESET) //确认中断
        {
                // LED1 反转               
                LED1_TOGGLE;
                EXTI_ClearITPendingBit(EXTI_Line0); //关中断
        }  
}
中断函数写在stm32f10x_it.c里。你在配置了EXTI0_IRQn的中断,对应建立一个名为 EXTI0_IRQHandler的函数,这个是一一对应的,函数名在启动文件里定义了(第86行)。触发中断时调用这个函数。

建议火哥以后的例程,在像bsp_exti.c这些例程的文件里写上实际中断处理函数,并在stm32f10x_it.c中的对应中断函数中调用这个实际中断处理函数,并作注释,这样初学者比较不会漏了写中断。
例如在bsp_exti.c里加个:
//中断处理函数  在stm32f10x_it.c文件中的EXTI0_IRQHandler()函数中调用
void EXIT_Interrupt(void)
{
    LED1_TOGGLE;
}
在stm32f10x_it.c中:
void EXTI0_IRQHandler(void)
{
     if(EXTI_GetITStatus(EXTI_Line0) != RESET)
     {
        EXIT_Interrupt(); //这里调用实际处理函数  其他语句都是框架来的
        EXTI_ClearITPendingBit(EXTI_Line0);
     }  
}
我觉得这样写可以让初学者一目了然,而且不会漏了,您觉得呢~
回复 支持 反对

使用道具 举报

发表于 2014-1-16 09:47:26 | 显示全部楼层
yinhao 发表于 2014-1-16 08:28
在stm32f10x_it.c里加上这个:
#include "bsp_led.h"
void EXTI0_IRQHandler(void)

我觉得不写好点,这样最然让学习者会遇到问题,但是遇到问题之后会记忆更清楚,吃一堑长一智吗,这样学习者就会知道自己应该做什么了!个人意见,哈哈
回复 支持 反对

使用道具 举报

发表于 2014-1-16 09:49:20 | 显示全部楼层
ahuzjh01 发表于 2014-1-16 09:47
我觉得不写好点,这样最然让学习者会遇到问题,但是遇到问题之后会记忆更清楚,吃一堑长一智吗,这样学习 ...

确实,吃亏了,才学得更深入
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-16 10:15:29 | 显示全部楼层
yinhao 发表于 2014-1-16 08:28
在stm32f10x_it.c里加上这个:
#include "bsp_led.h"
void EXTI0_IRQHandler(void)

强烈支持,非常感谢哥们 解答太详细了!!原来是中断服务函数没有添加进来。话说在stm32f10x_it.c中串口,定时器,电源等几个中断模版库已经为我们提供了,但外部中断为什么库没给我们提供模块呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-16 10:17:24 | 显示全部楼层
丁玉 发表于 2014-1-16 09:49
确实,吃亏了,才学得更深入

是啊   记忆非常深刻了!这个和51和430一样,在用中断的时候还有定义外部中断服务函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-16 10:17:44 | 显示全部楼层
丁玉 发表于 2014-1-16 09:49
确实,吃亏了,才学得更深入

是啊   记忆非常深刻了!这个和51和430一样,在用中断的时候还有定义外部中断服务函数
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 13:44 , Processed in 0.061447 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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