STM32
直播中

而无返还

8年用户 1203经验值
擅长:光电显示
私信 关注
[问答]

你知道如何去使用独立看门狗(IWDG)吗?

如何去使用独立看门狗(IWDG)?

独立看门狗(IWDG)有哪些优点?

回帖(1)

朱梁贡

2021-7-27 12:31:48
  IWDG 由其自己的专用低速时钟 (LSI) 计时,因此即使主时钟出现故障也能保持活动状态。一旦 IWDG 启动,LSI 被强制 ON 且不能被禁用(LSI 也不能被禁用),并且计数器从 0xFFF 的复位值开始向下计数。当它达到计数值结束 (0x000) 时,将生成系统复位。IWDG 计数器应定期重新加载,以防止 MCU 复位。IWDG 在 VDD 电压域中实现,在 STOP 和 STANDBY 模式下仍然有效(IWDG 复位可以从 STANDBY 唤醒)。RCC_CSR 寄存器中的 IWDGRST 标志可用于通知何时发生 IWDG 复位。最小-最大超时值@32KHz (LSI):~125us / ~32。7s IWDG 超时可能因 LSI 频率分散而异。STM32F4xx 器件能够测量 LSI 频率(LSI 时钟在内部连接到 TIM5 CH4 输入捕获)。测量值可用于具有可接受精度的 IWDG 超时。
  ======================================================================================================================================================================================================================================================================== ================================================== ===== [。。] (#) 使用 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable) 函数启用对 IWDG_PR 和 IWDG_RLR 寄存器的写访问 (#) 使用 IWDG_SetPrescaler() 函数配置 IWDG 预分频器 (#) 使用 IWDG_SetReload() 配置 IWDG 计数器值功能。每次重新加载计数器时,该值将加载到 IWDG 计数器中,然后 IWDG 将从该值开始向下计数。(#) 使用 IWDG_Enable() 函数启动 IWDG,当 IWDG 在软件模式下使用时(无需使能 LSI,由硬件使能) (#) 然后应用程序必须定期重新加载 IWDG 计数器在正常操作期间,使用 IWDG_ReloadCounter() 函数防止 MCU 复位。@endverbatim **************************************************** ****************************** * @attention * * 《h2》《center》© COPYRIGHT 2015 STMicroelectronics《/center》《 /h2》 * * 根据 MCD-ST Liberty SW 许可协议 V2 获得许可(“许可”);* 除非符合许可,否则您不得使用此文件。* 您可以在以下位置获得许可证副本:* * * * 除非适用法律要求或书面同意,否则根据许可分发的软件 * 是按“原样”分发的,* 不提供任何类型的明示或暗示的保证或条件。* 请参阅许可证以了解管理权限的特定语言和 * 许可证下的限制。* ***************************************************** ***************************** *//* 包括 ---------------- -------------------------------------------------- */#include “stm32f4xx_iwdg.h” 配置函数 *@verbatim ============================================== ================================== ##### 预分频器和计数器配置函数##### = ================================================== ==========================@endverbatim * @{ *//** * @brief 启用或禁用对 IWDG_PR 和 IWDG_RLR 的写访问寄存器。* @param IWDG_WriteAccess:对 IWDG_PR 和 IWDG_RLR 寄存器的写访问的新状态。* 此参数可以是以下值之一: * @arg IWDG_WriteAccess_Enable:启用对 IWDG_PR 和 IWDG_RLR 寄存器的写访问 * @arg IWDG_WriteAccess_Disable:禁用对 IWDG_PR 和 IWDG_RLR 寄存器的写访问 * @retval None */void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess){ /* 检查参数 */ assert_param(IS_IWDG_WRITE_ACCESS(IWDG_WriteAccess)); IWDG-》KR = IWDG_WriteAccess;}/** * @brief 设置 IWDG 预分频器值。* @param IWDG_Prescaler:指定 IWDG 预分频器值。* 此参数可以是以下值之一: * @arg IWDG_Prescaler_4:IWDG 预分频器设置为 4 * @arg IWDG_Prescaler_8:IWDG 预分频器设置为 8 * @arg IWDG_Prescaler_16:IWDG 预分频器设置为 16 * @arg IWDG_Prescaler_32 设置为 IWDG 预分频器32 * @arg IWDG_Prescaler_64:IWDG 预分频器设置为 64 * @arg IWDG_Prescaler_128:IWDG 预分频器设置为 128 * @arg IWDG_Prescaler_256:IWDG 预分频器设置为 256 * @retval None */void IWDG_SetPrescaler(uint8_t IWDG_Prescaler){ /* 检查参数 */ assert_param(IS_IWDG_PRESCALER(IWDG_Prescaler)); IWDG-》PR = IWDG_Prescaler;}/** * @brief 设置 IWDG 重载值。* @param Reload: 指定 IWDG 重载值。* 此参数必须是介于 0 和 0x0FFF 之间的数字。* @retval None */void IWDG_SetReload(uint16_t Reload){ /* 检查参数 */ assert_param(IS_IWDG_RELOAD(Reload)); IWDG-》RLR = Reload;}/** * @brief 使用重载寄存器 * 中定义的值重载 IWDG 计数器(禁用对 IWDG_PR 和 IWDG_RLR 寄存器的写访问)。* @param None * @retval None */void IWDG_ReloadCounter(void){ IWDG-》KR = KR_KEY_RELOAD; }/** * @} *//** @defgroup IWDG_Group2 IWDG 激活函数 * @brief IWDG 激活函数 *@verbatim ======================== ================================================== ====== ##### IWDG 激活函数##### ============================== ================================================@endverbatim * @{ *//** * @brief 启用 IWDG(禁用对 IWDG_PR 和 IWDG_RLR 寄存器的写访问)。* @param None * @retval None */void IWDG_Enable(void){ IWDG-》KR = KR_KEY_ENABLE; }/** * @} *//** @defgroup IWDG_Group3 Flag 管理函数 * @brief Flag 管理函数 *@verbatim =========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== ================================================== ====== ##### 标志管理功能##### ============================== ================================================@endverbatim * @{ *//** * @brief 检查是否设置了指定的 IWDG 标志。* @param IWDG_FLAG:指定要检查的标志。* 此参数可以是以下值之一: * @arg IWDG_FLAG_PVU:正在进行的预分频器值更新 * @arg IWDG_FLAG_RVU:正在进行的重新加载值更新 * @retval IWDG_FLAG 的新状态(设置或重置)。*/FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG){ FlagStatus bitstatus = RESET; /* 检查参数 */ assert_param(IS_IWDG_FLAG(IWDG_FLAG)); if ((IWDG-》SR & IWDG_FLAG) != (uint32_t)RESET) { bitstatus = SET; } else { bitstatus = RESET; } /* 返回标志状态 */ return bitstatus;}/** * @} *//** * @} *//** * @} *//** * @} *//**** ******************** (C) 版权 STMicroelectronics *****文件结尾****/
举报

更多回帖

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