新手上路
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2019-9-29
- 在线时间
- 6 小时
|
1金钱
void IWDG_CounterFreezeInStopMode(void)
{
FLASH_OBProgramInitTypeDef OptionsBytesStruct;
//改写option时,芯片首先会自动擦写掉flash里所有option值,然后再写入。
//所以要先把当前值读出来,改变某一位后,再写进去
HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);
//需要判断一下是否配置过,因为每次配置完都会导致重启,不能每次上电都无条件配置一次
if ((OptionsBytesStruct.USERConfig & FLASH_OPTR_IWDG_STOP) != 0)
{
OptionsBytesStruct.OptionType = OPTIONBYTE_USER;
OptionsBytesStruct.USERType = OB_USER_IWDG_STOP;
//STOP模式下停止看门狗计数,使用硬件看门狗(芯片上电后会自动开启看门狗)
OptionsBytesStruct.USERConfig &= (~(FLASH_OPTR_IWDG_STOP));//置0
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);
HAL_FLASH_OB_Unlock();
if (HAL_FLASHEx_OBProgram(&OptionsBytesStruct) != HAL_OK)
{
//配置失败则重启
NVIC_SystemReset();
}
HAL_FLASH_OB_Launch(); //加载flash配置,这里会导致重启
// HAL_FLASH_OB_Lock();
// HAL_FLASH_Lock();
}
芯片是stm32L476RET6,程序是这样,这里是处理在进入stop模式后冻结IWDG,防止复位,最后使用READ_BIT(FLASH->OPTR, FLASH_OPTR_IWDG_STOP);语句读出来的标志位也是为0,


我现在出现的问题是在进入stop模式之后,芯片还是会被看门狗给复位,如果把看门狗初始化给注释掉,就可以正常等来RTC时钟的唤醒,因此看门狗到底还有哪里需要处理啊啊啊???照理说标志位置0就可以正常冻结了,,,但是看门狗就是关不掉。
有没有人遇到这个问题的,困扰了我几天了,求大神解答。
|
|