技术笔记!
1. IWDG(Independent watchdog),即独立看门狗
本质:能产生系统复位信号的计算器。
特性:递减计算器;时钟有独立的RC振荡器提供(可在待机和停止模式下运行);看门狗被激活后,当递减计数器计数到0X000是产生复位。
喂狗:在计算器计数到0之前,重装载计数器的值,防止复位。
作用:
2. IWDG工作原理(熟悉)
3. IWDG框图(熟悉)
4. IWDG寄存器(熟悉)
4.1键寄存器(IWDG_KR)
用于喂狗,解除PR和PLR寄存器写访问保护,以及启动看门狗工作。
4.2 预分频器寄存器(IWDG_PR)
4.3 重装载寄存器(IWDG_RLR)
4.4 状态寄存器(IWDG_SR)
4.5 寄存器配置操作步骤(了解)
5 IWDG溢出时间计算(掌握)
6. IWDG配置步骤(掌握)
7. HAL库相关函数
8. 独立看门狗实验
iwdg.c
#include "iwdg.h"
IWDG_HandleTypeDef g_iwdg_handle;
/*IWDG初始化函数*/
void iwdg_init(uint8_t prep, uint16_t rlr)
{
g_iwdg_handle.Instance = IWDG;
g_iwdg_handle.Init.Prescaler = prep;
g_iwdg_handle.Init.Reload = rlr;
HAL_IWDG_Init(&g_iwdg_handle);
}
/* 喂狗函数 */
void iwdg_feed(void)
{
HAL_IWDG_Refresh(&g_iwdg_handle);
}
main.c
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
delay_init(72); /* 延时初始化 */
usart_init(115200); /* 串口初始化为115200 */
printf("你还没您还没喂狗,请及时喂狗!!!\r\n");
iwdg_init(IWDG_PRESCALER_32, 1250); /* 预分频系数为32,重装载值为1250,溢出时间约为1s */
while (1)
{
delay_ms(1000);
iwdg_feed();
printf("已经喂狗\r\n");
}
}
实验小结:
通过初始化独立看门狗句柄实现对看门狗的配置,以及通过喂狗函数定时喂狗。