creep 发表于 2015-6-4 21:29:25

阳阳NO1 发表于 2015-6-4 20:37
我没有这个开发板,我改改管脚,在我的板子上试下吧

如果还不行的话,去掉你其他的外设代码,只保留按键测试部分。和我的那个测试程序那样把运行信息打印出来或者用LED指示运行状态,休眠模式下调试可能不太准确。

阳阳NO1 发表于 2015-6-4 21:51:01

creep 发表于 2015-6-4 20:32
不知道你有没有这个STM32F303RE开发板,你测试下我写的这个按键进入和唤醒STOP的程序
【STM32F303开发】+ ...

按照你的程序将自己的程序修改了下,现在的情况是按下去有时进不去stop模式,但只要进到stop模式,唤醒还是很正常的。。。继续查找问题

creep 发表于 2015-6-4 21:55:31

阳阳NO1 发表于 2015-6-4 21:51
按照你的程序将自己的程序修改了下,现在的情况是按下去有时进不去stop模式,但只要进到stop模式,唤醒还 ...

那个测试程序在F303RE开发板上每次按键都能进入休眠模式每次也都能唤醒休眠模式。
如果一直找不到原因,你可以考虑下是不是其他的外设模块影响的或者硬件有些问题,因为实现这个功能不是很难做,原理和程序都很简单。

阳阳NO1 发表于 2015-6-4 22:13:43

creep 发表于 2015-6-4 21:55
那个测试程序在F303RE开发板上每次按键都能进入休眠模式每次也都能唤醒休眠模式。
如果一直找不到原因, ...

是啊,原理确实不难,我已将其它的程序都删除了,但还是一样的效果,很可惜的是我的板子上串口没印出来,暂时只能仿真,如果是仿真的话,每次都能进入stop模式,因为进入stop模式之后,j-link就断开了,哎,真实奇怪呢。。。

creep 发表于 2015-6-4 22:24:06

阳阳NO1 发表于 2015-6-4 22:13
是啊,原理确实不难,我已将其它的程序都删除了,但还是一样的效果,很可惜的是我的板子上串口没印出来, ...

如果能把jlink驱动升级到V4.90e版本以上,可以使用jlink的Jlink RTT client或者Jlink RTT logger 输出打印信息。
升级驱动前请确认jlink固件已经最新,否则可能会导致jlink没法使用。

阳阳NO1 发表于 2015-6-4 22:52:28

本帖最后由 阳阳NO1 于 2015-6-4 22:53 编辑

creep 发表于 2015-6-4 22:24
如果能把jlink驱动升级到V4.90e版本以上,可以使用jlink的Jlink RTT client或者Jlink RTT logger 输出打 ...
焊了个串口出来了,测试了下,还是IO口没配好,有时按下按键,然后将按键设置成EXTI模式,系统进入stop,立马又被中断唤醒。有时唤醒之后将IO口设置成普通输入输出,但里面就进入stop模式了




creep 发表于 2015-6-4 23:22:11

阳阳NO1 发表于 2015-6-4 22:52
焊了个串口出来了,测试了下,还是IO口没配好,有时按下按键,然后将按键设置成EXTI模式,系统进入stop, ...

我现在怀疑你的那个按键有问题了。是不是按键太灵敏了?千万别是硬件到底问题了。

阳阳NO1 发表于 2015-6-4 23:40:51

creep 发表于 2015-6-4 23:22
我现在怀疑你的那个按键有问题了。是不是按键太灵敏了?千万别是硬件到底问题了。 ...

我的硬件就一个上拉电阻,配置我上拉下拉都改过,无济于事,那我明天换个按键试试。
但是从道理上讲,是有可能啊,比如进入STOP之后,按下按键触发中断,然后在中断里面配置引脚为输入引脚,退出中断,在主程序里面去按键扫描,如果手按的时间长点,就会检测到这个按键按下,这不又是进入到stop模式了啊

creep 发表于 2015-6-5 09:07:28

阳阳NO1 发表于 2015-6-4 23:40
我的硬件就一个上拉电阻,配置我上拉下拉都改过,无济于事,那我明天换个按键试试。
但是从道理上讲,是 ...

我想了下你说的这个长按按键会导致唤醒后再次进入休眠模式的可能性确实是存在的,但是比较可惜的是我在这个开发板怎么也测试不到这种情况的发生,无论是长按还是短按程序都能正常工作。为了避免你i说的那个情况的发生可以修改下按键中断代码如下,加上按键的按下使能标志。你再测试下在你的板子上是否能正常工作。
void EXTI15_10_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line13) != RESET)
    {
      SYSCLKConfig_STOP();
      g_keyWorkMode = IO_MODE;
      KEY_CheckMode(IO_MODE);
        g_KeyRelease = DISABLE;
      printf("\n\r-----按键中断唤醒MCU--------\n\r\n\r");
      EXTI_ClearITPendingBit(EXTI_Line13);
    }
}

阳阳NO1 发表于 2015-6-5 09:53:21

creep 发表于 2015-6-5 09:07
我想了下你说的这个长按按键会导致唤醒后再次进入休眠模式的可能性确实是存在的,但是比较可惜的是我在这 ...

你的这种办法我昨晚上也想到了,我还做了实验,效果很差:


我甚至修改按键扫描,添加了松手检测,只有在手松开的时候,才去返回KEY_PRESS;
U8 Key_Scan(void)
{
    if(g_KeyRelease && (!KEY_USER_STA)) /*表示有按键按下*/
    {
      delay_ms(10);
      if(!KEY_USER_STA)
                {
                          while(!KEY_USER_STA);
                          g_KeyRelease = ENABLE;
                          returnKEY_PRESS;
                }
                                       
    }
        else if(KEY_USER_STA)               
             g_KeyRelease = ENABLE;
        return 0;
}
现象如下:


而且一出现这样的情况,按键就失去左右了,再也唤不醒芯片了。
说实话,我真的有点想不通了,将测试工程上传至附件,希望得到高人指点
file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\413351855\QQ\WinTemp\RichOle\}DN2_P0I$BQ97$Z7R05F}IL.png


页: 1 [2] 3
查看完整版本: stm32f030f4p6进入stop的问题