OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5768|回复: 15

再次被跑马灯虐到。请教!

[复制链接]

3

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-3-9
在线时间
16 小时
发表于 2016-4-13 10:55:24 | 显示全部楼层 |阅读模式
问题描述:        按动key_0按键,跑马灯亮,再按一次。跑马灯灭。
解题思路;        每一次按key_0键。触发中断。中断要做的事就是变量+1.
                        然后主函数中判断变量的奇偶性。选择停止还是继续。

我觉得自己的思路没有问题啊。老师也说很简单。但是对菜鸟来说真的会出问题。
前边不是刚学过串口吗?那里边好像有个buffer在中断中出现过,也在主函数中出现过。抄抄那个应该没问题。可是。。。。。。。


出现问题;写了半天一直出现问题。buffer[]一直显示为声明什么的。提示错误。弄半天忘复制.h了。总之是编译过了。                已经快疯了。
                然后又来调试。发现中断后处理的数据返回的不对。进不到if里。退而求其次按一次按键LED1转变一次状态。结果还是不行。

这是中断
void EXTI4_IRQHandler(void)
{ int t=0;
        delay_ms(10);       
        if(KEY0==0)         
        {                t++;                 
                b[1]=t;
        }                 
         EXTI_ClearITPendingBit(EXTI_Line4);
}



这是主函数
n=0;
        while(1)
        {
                if(n==0)
                {LED1=!LED1;
                        n=b[1];
                       
                }
                if(n==1)
                {LED1=!LED1;
                        n=b[1];
                       
                }
                if(n==2)
                {LED1=!LED1;
                        n=b[1];
                       
                }
        }



为什么要这样写。因为stlink调试不会用。不知道中断怎样进中断看值。
然后单步执行发现按键后连第二个if都进不去。。。
如果这个都执行不了的话。那跑马灯更执行不了了,因为没办法判断返回来的值。





一个人学代码好难啊。没人讨论。求教。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
347
金钱
347
注册时间
2015-11-28
在线时间
69 小时
发表于 2016-4-13 11:05:13 | 显示全部楼层
我就只看了一眼,别的没帮你看,中断里边你的T的问题是有的,你吧前边加一个static,静态局变量,要不每次t的值都是初始为0
回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11475
金钱
11475
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-4-13 11:05:30 | 显示全部楼层

问题描述很清楚,不答会伤人心的。


回复 支持 反对

使用道具 举报

11

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
347
金钱
347
注册时间
2015-11-28
在线时间
69 小时
发表于 2016-4-13 11:05:49 | 显示全部楼层
你写的好像啥也不是啊再往下看
回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11475
金钱
11475
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-4-13 11:06:18 | 显示全部楼层
本帖最后由 xuande 于 2016-4-13 11:11 编辑

首先,t应当定义为全局变量,
但贴出来的程序看不到这一点。

回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11475
金钱
11475
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-4-13 11:09:24 | 显示全部楼层
本帖最后由 xuande 于 2016-4-13 11:12 编辑

最关键的是,
按键即使只按一下,波形也有巨多毛刺,不会是很漂亮的方波。

程序中虽然加了10ms延时,但延时之后还会有毛刺,
按一下,可能已经进了n次中断了!
有处理吗?






回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11475
金钱
11475
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-4-13 11:11:09 | 显示全部楼层

设断点方法:
在语句上右键、设断点。
注意避开不可执行的语句。


回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-3-9
在线时间
16 小时
 楼主| 发表于 2016-4-13 11:15:10 来自手机 | 显示全部楼层
jpf487424 发表于 2016-4-13 11:05
我就只看了一眼,别的没帮你看,中断里边你的T的问题是有的,你吧前边加一个static,静态局变量,要不每次t ...

对的。每次中断过来都是0。忘记了,没写过多少行代码。错误比较多。谢谢您。
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-3-9
在线时间
16 小时
 楼主| 发表于 2016-4-13 11:50:21 来自手机 | 显示全部楼层
xuande 发表于 2016-4-13 11:06
首先,t应当定义为全局变量,
但贴出来的程序看不到这一点。

t是局部变量。我把值放b数组里了。
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-3-9
在线时间
16 小时
 楼主| 发表于 2016-4-13 11:51:23 来自手机 | 显示全部楼层
jpf487424 发表于 2016-4-13 11:05
你写的好像啥也不是啊再往下看

主函数只把重要的贴了。前边的定义。初始化没贴
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-3-9
在线时间
16 小时
 楼主| 发表于 2016-4-13 12:39:58 来自手机 | 显示全部楼层
xuande 发表于 2016-4-13 11:11
设断点方法:
在语句上右键、设断点。
注意避开不可执行的语句。

不是左键吗?想一步一步跟踪看下去。比如走到判断之前按一下键。怎么走到中断里边去看
回复 支持 反对

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-4-13 15:05:39 | 显示全部楼层
b[1]  不是全局变量吗?直接b[1]++不就得了    判断奇偶性可以%2求余   还有不知道你硬件什么样 没有防抖的话作软件防抖
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-3-9
在线时间
16 小时
 楼主| 发表于 2016-4-13 15:34:46 来自手机 | 显示全部楼层
jpf487424 发表于 2016-4-13 11:05
我就只看了一眼,别的没帮你看,中断里边你的T的问题是有的,你吧前边加一个static,静态局变量,要不每次t ...

问题已经解决了。static这里真的错了。
主程序里是自己逻辑不清楚。
手动跑了一遍知道哪里错了。谢谢各位!


没想到这么多人回复哈。虽然是小问题。
但是一个人想真的会疯掉。新手。上学的时候就没写过多少代码。


stlink调试器还是不太会用。如果原子哥能出个视频,领着调试几个程序。完全走一边就更好了。再次谢谢大家。
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-3-9
在线时间
16 小时
 楼主| 发表于 2016-4-13 15:49:13 来自手机 | 显示全部楼层
止天 发表于 2016-4-13 15:05
b[1]  不是全局变量吗?直接b[1]++不就得了    判断奇偶性可以%2求余   还有不知道你硬件什么样 没有防抖的 ...

是的。之前全局变量和extern没弄明白。搞了好久。以为是其他地方的错。就把b1付给另一个变量了。( ω )脑洞太大了。
谢谢回复。问题已经解决了。希望以后不吝赐教
回复 支持 反对

使用道具 举报

30

主题

282

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2015-8-24
在线时间
241 小时
发表于 2016-4-13 16:29:41 | 显示全部楼层
把跑马灯和串口两个例程移植一下呀!
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-3-9
在线时间
16 小时
 楼主| 发表于 2016-4-13 20:23:52 来自手机 | 显示全部楼层
沉默焚烧 发表于 2016-4-13 16:29
把跑马灯和串口两个例程移植一下呀!

对,思路一样。就是移植也出问题啦。不过解决了。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 21:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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