OpenEdv-开源电子网

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

新手请教一个关于按键的问题

[复制链接]

12

主题

143

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2691
金钱
2691
注册时间
2017-9-8
在线时间
468 小时
发表于 2017-10-14 12:13:54 | 显示全部楼层 |阅读模式
10金钱
新手有个关于按键的问题请教一下,程序如下:
[mw_shl_code=applescript,true]int main(void)
{
SysTick_Config(SystemCoreClock / 1000);         //1MS
void GetPowerKey(void)
{  
  if(PWK)
  {         u16  KeyCount=0;
                 u32 keyTime=0;
                 delay_ms(30);
                 keyTime=g_RunTime;
                if(PWK)
                 {       
                         KeyCount=3000;         
                        while(PWK&&KeyCount)
                        { KeyCount--;
                          delay_ms(1);
                        }
                        if((g_RunTime-keyTime)>2000)
                        {                                   
         printf("ÕyÔú1Ø»ú......\r\n");                                 
                                 PlayMusic(2,guanjizhong);       
                                 delay_ms(1000);
                                 
                                 if(PWK==0)
                                 {
                                         delay_ms(100);
                                         MPWROFF(1);       
                                 }                  //1رÕμçÔ′

                        }
                }
          }
   }
}[/mw_shl_code]

其中,g_RunTime的定义
[mw_shl_code=applescript,true]void SysTick_Handler(void)
{
        if(g_RunTime<0xfffffffe)
    g_RunTime++;
  else
    g_RunTime=0;

}[/mw_shl_code]

在仿真中,执行到if((g_RunTime-keyTime)>2000)就执行不了,或者程序跑飞,不知道什么原因,请各位指教

最佳答案

查看完整内容[请看2#楼]

查到了,一直在响应USART3的串口中断,但是以前用同样的程序没出现过问题,不知道是不是硬件上的问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

143

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2691
金钱
2691
注册时间
2017-9-8
在线时间
468 小时
 楼主| 发表于 2017-10-14 12:13:55 | 显示全部楼层
正点原子 发表于 2017-10-15 00:19
仿真跟踪,进入中断服务函数了么?

查到了,一直在响应USART3的串口中断,但是以前用同样的程序没出现过问题,不知道是不是硬件上的问题
回复

使用道具 举报

12

主题

143

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2691
金钱
2691
注册时间
2017-9-8
在线时间
468 小时
 楼主| 发表于 2017-10-14 12:59:56 | 显示全部楼层
MPWROFF(1); //关闭电源
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2017-10-14 14:53:36 | 显示全部楼层
逐步注释掉if((g_RunTime-keyTime)>2000)函数里的内容,看是哪里有问题
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

2

主题

73

帖子

0

精华

高级会员

Rank: 4

积分
659
金钱
659
注册时间
2017-5-19
在线时间
146 小时
发表于 2017-10-14 16:09:42 | 显示全部楼层
好像有中断的程序,硬件仿真会跑飞掉,待求证。
这个问题可能跟中断配置有关,你的程序一直跑中断去了,仿真不了,可以程序和中断中加打印显示信息......
回复

使用道具 举报

12

主题

143

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2691
金钱
2691
注册时间
2017-9-8
在线时间
468 小时
 楼主| 发表于 2017-10-14 16:20:39 | 显示全部楼层
龙之谷 发表于 2017-10-14 14:53
逐步注释掉if((g_RunTime-keyTime)>2000)函数里的内容,看是哪里有问题

基本都注释完了,结果还是一样的,不知原因就跑飞了
进不去if((g_RunTime-keyTime)>2000)的原因找到了,是两者之差小于2000,但前面的循环都超过3秒了,是不是PWK的问题,这是个输入端口,软件设置浮空,硬件下拉
回复

使用道具 举报

12

主题

143

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2691
金钱
2691
注册时间
2017-9-8
在线时间
468 小时
 楼主| 发表于 2017-10-14 16:21:32 | 显示全部楼层
liuliupiaoxue 发表于 2017-10-14 16:09
好像有中断的程序,硬件仿真会跑飞掉,待求证。
这个问题可能跟中断配置有关,你的程序一直跑中断去了,仿 ...

我这里除了SysTick_Handler(void)中断,没有别的了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-10-15 00:19:29 | 显示全部楼层
仿真跟踪,进入中断服务函数了么?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 10:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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