本帖最后由 onev 于 2017-5-23 13:17 编辑
用STM32F7和STM32F0做了这样一个实验:
伪代码:
- GPIO_Init();
- ReadFlash();//读flash得到status状态
- led1_on();//
- delay(3000);//延时久一点 3s
- if(status == 0)
- {
- led2_on();//led2开启 便于观察
- delay(10);//延时时间意思一下 便于看到灯的变化
- status = 1;
- WriteFlash();//将status写入flash
- SystemReset();//软件方式重启系统
- }
- else if(status == 1)
- {
- led3_on();//led3开启 便于观察
- delay(10);//延时时间意思一下 便于看到灯的变化
- status = 0;
- WriteFlash();//将status写入flash
- StandbyMode();//进入待机
- }
复制代码
待机唤醒唯一的不同之处是F7用的PC13,F0用的PA0。应该不会有什么影响。
问题描述:1.按一下按键,两个系统都按预期运行,首先灯1亮3s,然后灯2闪一下,然后3s后灯3闪一下全部熄灭进入待机。这是正常状态。
2.按下按键且按住不放,F7的系统如上现象正常。F0的系统会不停的唤醒系统。
为什么按着按键不放F0的系统就不停的唤醒呢?
待机模式的唤醒都是上升沿唤醒
没有电平触发的
而且 特地都先单独测试过唤醒没有问题再加的软件复位重启
我用的HAL库 不知道你指的缺少一条语句指的是什么?说话不能说一半呀。
{
/* 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)
{
}
}
多谢!
看的是官方HAL库例程,它清的是CSR的WUF位而非CR的CWUF位,
- /* Clear PWR wake up Flag */
- __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
复制代码- #define PWR_FLAG_WU PWR_CSR_WUF
复制代码看手册写的也是清WUF位,节后回去试试你的方法。
一周热门 更多>