ST意法半导体
直播中

刘满贵

7年用户 1450经验值
私信 关注
[问答]

RCC_FLAG_PINRST配置在RCC_FLAG_SFTRST之后是什么原因?

如果使用复位引脚运行它,则可以使用“__HAL_RCC_GET_FLAG()”函数
您可以看到设置了“RCC_FLAG_PINRST”。
然而,当使用“HAL_NVIC_SystemReset()”执行时,“RCC_FLAG_SFTRST”和“RCC_FLAG_PINRST”被设置。
我的期望是只应设置“RCC_FLAG_SFTRST”。
是什么原因?
而“__HAL_RCC_GET_FLAG(RCC_FLAG_LPWRRST)”根本不起作用。
//我的代码
无效主要()
{
如果(真== __HAL_PWR_GET_FLAG(PWR_FLAG_WUF2))
{
   __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF2);
   debug("唤醒引脚 2rn");
}
如果(真== __HAL_PWR_GET_FLAG(PWR_FLAG_SB))
{
   __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
   debug("待机rn");
}
如果(真== __HAL_PWR_GET_FLAG(PWR_FLAG_WUF))
{
   __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF);
   debug("所有唤醒引脚rn");
}
如果(真== __HAL_RCC_GET_FLAG(RCC_FLAG_PWRRST))
   debug("上电复位rn");
如果(真== __HAL_RCC_GET_FLAG(RCC_FLAG_PINRST))
   调试(“密码重置rn”);
如果(真== __HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST))
   debug("软件重置rn");
如果(真== __HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST))
   debug("看门狗复位rn");
如果(真== __HAL_RCC_GET_FLAG(RCC_FLAG_LPWRRST))
   调试(“低功耗复位rn”);
__HAL_RCC_CLEAR_RESET_FLAGS();
而(1)
{
  如果(GPIO_PIN_RESET == HAL_GPIO_ReadPin(BTN1_GPIO_Port,BTN1_Pin))
  {
   HAL_NVIC_SystemReset();
  }
  如果(GPIO_PIN_RESET == HAL_GPIO_ReadPin(BTN2_GPIO_Port,BTN2_Pin))
  {
   HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2_HIGH);
   HAL_RTCEx_SetWakeUptimer_IT(&hrtc, 9, RTC_WAKEUPCLOCK_CK_SPRE_16BITS);
   __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF2|PWR_FLAG_SB);
   HAL_PWR_EnterSTANDBYMode();
  }
}
}









回帖(1)

叶冬琳

2023-1-4 10:26:43
这就是它的工作原理。PINRSTF 在大多数类型的复位时设置。检查所有标志并匹配给定重置类型的预期模式。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分