logo网站设计,公司网站怎么做关键词,宣传手册设计,大学生职业生涯规划ppt基本概念
看门狗解决的问题是什么#xff1f;
在系统跑飞#xff08;程序异常执行#xff09;的情况#xff0c;是系统复位#xff0c;程序重新执行。
独立看门狗适应用于需要看门狗作为一个在主程序之外能够完全独立工作#xff0c;并且对时间精度要求低的场合。
工…基本概念
看门狗解决的问题是什么
在系统跑飞程序异常执行的情况是系统复位程序重新执行。
独立看门狗适应用于需要看门狗作为一个在主程序之外能够完全独立工作并且对时间精度要求低的场合。
工作原理
在键值寄存器中写入0xCCCC开始启用独立看门狗此时计数器开始从其复位值递减当计数器值计数到0时会产生一个复位信号。 无论何时只要在键值寄存器中写入0xAAAA重装载寄存器的值就会重新加载到计数器从而避免计数器到0产生复位信号。如果程序异常就无法往键值寄存器中写入0xAAAA重装载寄存器的值无法加载到计数器中计数器会减到0从而产生一个系统复位信号。
独立看门狗寄存器
IWDG_KR键值寄存器0~15位有效IWDG_PR预分频寄存器0-2位有效 IWDG_RLR重装载寄存器0~11位有效IWDG_SR状态寄存器0~1位有效
独立看门狗超时时间
Tout 4*2prerrlr/32
Tout看门狗溢出时间单位为ms prer预分频值IWDG_PR rlr重装载值IWDG_RLR
独立看门狗操作步骤
初始化看门狗预分频系数重装载值
HAL_IWDG_Init();启用看门狗
HAL_IWDG_Start();喂狗
HAL_IWDG_Refresh();具体代码
初始化看门狗预分频系数重装载值
IWDG_HandleTypeDef iwdg_handler;
void iwdg_init(void)
{iwdg_handler.Instance IWDG;iwdg_handler.Init.Prescaler IWDG_PRESCALER_64; //设置预分频寄存器 IWDG_PRiwdg_handler.Init.Reload 500; //设置重装载寄存器IWDG_RLRHAL_IWDG_Init(iwdg_handler);HAL_IWDG_Start(iwdg_handler); //启用看门狗
}
Prescaler IWDG_PRESCALER_64;设置的是4*2^prer64Reload 500设置的是rlr注意IWDG_RLR重装载寄存器只有0~11位有效不能超过寄存器存储范围。
启用看门狗在第一步实现了喂狗在main函数实现了
int main(void)
{// u8 key;HAL_Init(); //初始化HAL库 Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhzdelay_init(180); //初始化延时函数uart_init(115200); //初始化USARTLED_Init(); //初始化LED KEY_Init(); //初始化按键delay_ms(100);iwdg_init();//HAL_IWDG_Start(iwdg_handler); //启用看门狗LED0 0;while(1){if(KEY_Scan(0)KEY0_PRES){HAL_IWDG_Refresh(iwdg_handler);//LED1 !LED1;delay_ms(10);}}
}