待机与软件重启求教

2019-12-27 18:59发布


本帖最后由 onev 于 2017-5-23 13:17 编辑


用STM32F7和STM32F0做了这样一个实验:
伪代码:
  1. GPIO_Init();
  2. ReadFlash();//读flash得到status状态
  3. led1_on();//
  4. delay(3000);//延时久一点 3s
  5. if(status == 0)
  6. {
  7.       led2_on();//led2开启 便于观察
  8.       delay(10);//延时时间意思一下 便于看到灯的变化
  9.       status = 1;
  10.       WriteFlash();//将status写入flash
  11.       SystemReset();//软件方式重启系统
  12. }
  13. else if(status == 1)
  14. {
  15.       led3_on();//led3开启 便于观察
  16.       delay(10);//延时时间意思一下 便于看到灯的变化
  17.       status = 0;
  18.       WriteFlash();//将status写入flash
  19.       StandbyMode();//进入待机
  20. }
复制代码
待机唤醒唯一的不同之处是F7用的PC13,F0用的PA0。应该不会有什么影响。
问题描述:1.按一下按键,两个系统都按预期运行,首先灯1亮3s,然后灯2闪一下,然后3s后灯3闪一下全部熄灭进入待机。这是正常状态。
                2.按下按键且按住不放,F7的系统如上现象正常。F0的系统会不停的唤醒系统。
为什么按着按键不放F0的系统就不停的唤醒呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
leafstamen
1楼-- · 2019-12-27 23:37
这就是电平触发和边沿触发的差别了吧
onev
2楼-- · 2019-12-28 00:42
本帖最后由 onev 于 2017-5-23 13:47 编辑
leafstamen 发表于 2017-5-23 13:39
这就是电平触发和边沿触发的差别了吧


待机模式的唤醒都是上升沿唤醒
没有电平触发的
而且 特地都先单独测试过唤醒没有问题再加的软件复位重启
1874
3楼-- · 2019-12-28 03:03
 精彩回答 2  元偷偷看……
onev
4楼-- · 2019-12-28 03:16
1874 发表于 2017-5-25 10:25
StandbyMode();//进入待机 这个函数里缺少了一条语句,我之前也出现这个问题

我用的HAL库 不知道你指的缺少一条语句指的是什么?说话不能说一半呀。
1874
5楼-- · 2019-12-28 07:07
void StandbyMode_Measure(void)
{
            /* Enable PWR APB1 Clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
       
  /* Enable WKUP pin 2 */
  PWR_WakeUpPinCmd(PWR_WakeUpPin_1,ENABLE);
       
  /* Clear Wakeup flag *///这个位不清的话,会一进入待机就会自动唤醒的
  PWR->CR |= PWR_CR_CWUF;
       
  /* Request to enter STANDBY mode (Wake Up flag is cleared in PWR_EnterSTANDBYMode function) */
  PWR_EnterSTANDBYMode();
  
  /* Infinite loop */
  while (1)
  {
  }
}
onev
6楼-- · 2019-12-28 09:01
1874 发表于 2017-5-27 17:39
void StandbyMode_Measure(void)
{
            /* Enable PWR APB1 Clock */

多谢!
看的是官方HAL库例程,它清的是CSR的WUF位而非CR的CWUF位,
  1. /* Clear PWR wake up Flag */
  2.   __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
复制代码
  1. #define PWR_FLAG_WU                         PWR_CSR_WUF
复制代码
看手册写的也是清WUF位,节后回去试试你的方法。

一周热门 更多>