STM32
登录
直播中
小萃米
11年用户
801经验值
私信
关注
[问答]
如何对MCU看门狗IWDG的喂狗时间进行配置
开启该帖子的消息推送
IWDG
WWDG
如何对MCU看门狗IWDG的喂狗时间进行配置?
如何对MCU看门狗WWDG的喂狗时间进行配置?
回帖
(1)
孙婷
2021-9-17 17:54:44
对于MCU看门狗IIWDG WWDG喂狗时间的配置参考可以参考MCU的datasheet;
在每个MCU的datasheet中都有这样的表格:
6.3.25 Timer characteristics
F091的:
可以封装接口进行看门狗的配置,参数传入ms时长:
以091为例代码实现如下(看门狗是40KHz):
/**
* @brief config 内部独立看门狗。
* @param ms:看门狗时间长度
* @retval None
*/uint8_t n_iwdg_config(uint32_t ms)
{
uint8_t ret = HAL_OK;
hiwdg.Instance = IWDG;
if(ms 》 0 && ms 《 500)
{
hiwdg.Init.Prescaler = IWDG_PRESCALER_4;
hiwdg.Init.Window = ms * 10;
hiwdg.Init.Reload = ms * 10;
}
else if(ms 》= 500 && ms 《820){
hiwdg.Init.Prescaler = IWDG_PRESCALER_8;
hiwdg.Init.Window = ms * 5;
hiwdg.Init.Reload = ms * 5;
}
else if(ms 》= 820 && ms 《 1639){
hiwdg.Init.Prescaler = IWDG_PRESCALER_16;
hiwdg.Init.Window = ms * 10 /4;
hiwdg.Init.Reload = ms * 10 /4;
}
else if(ms 》= 1639 && ms 《 3277){
hiwdg.Init.Prescaler = IWDG_PRESCALER_32;
hiwdg.Init.Window = ms * 10 /8;
hiwdg.Init.Reload = ms * 10 /8;
}
else if(ms 》= 3277 && ms 《 6554){
hiwdg.Init.Prescaler = IWDG_PRESCALER_64;
hiwdg.Init.Window = ms * 10 /16;
hiwdg.Init.Reload = ms * 10 /16;
}
else if(ms 》= 6554 && ms 《 13108){
hiwdg.Init.Prescaler = IWDG_PRESCALER_128;
hiwdg.Init.Window = ms * 10 /32;
hiwdg.Init.Reload = ms * 10 /32;
}
else if(ms 》= 13108 && ms 《26215){
hiwdg.Init.Prescaler = IWDG_PRESCALER_256;
hiwdg.Init.Window = ms * 10 /64;
hiwdg.Init.Reload = ms * 10 /64;
}
ret = HAL_IWDG_Init(&hiwdg);
return ret;
}
/**
* @brief refresh 内部独立看门狗。
* @retval None
*/void n_iwdg_refresh(void)
{
HAL_IWDG_Refresh(&hiwdg);
//假如没配置看门狗,这里就不能调用,调用的话会产生hardfault.}
对于MCU看门狗IIWDG WWDG喂狗时间的配置参考可以参考MCU的datasheet;
在每个MCU的datasheet中都有这样的表格:
6.3.25 Timer characteristics
F091的:
可以封装接口进行看门狗的配置,参数传入ms时长:
以091为例代码实现如下(看门狗是40KHz):
/**
* @brief config 内部独立看门狗。
* @param ms:看门狗时间长度
* @retval None
*/uint8_t n_iwdg_config(uint32_t ms)
{
uint8_t ret = HAL_OK;
hiwdg.Instance = IWDG;
if(ms 》 0 && ms 《 500)
{
hiwdg.Init.Prescaler = IWDG_PRESCALER_4;
hiwdg.Init.Window = ms * 10;
hiwdg.Init.Reload = ms * 10;
}
else if(ms 》= 500 && ms 《820){
hiwdg.Init.Prescaler = IWDG_PRESCALER_8;
hiwdg.Init.Window = ms * 5;
hiwdg.Init.Reload = ms * 5;
}
else if(ms 》= 820 && ms 《 1639){
hiwdg.Init.Prescaler = IWDG_PRESCALER_16;
hiwdg.Init.Window = ms * 10 /4;
hiwdg.Init.Reload = ms * 10 /4;
}
else if(ms 》= 1639 && ms 《 3277){
hiwdg.Init.Prescaler = IWDG_PRESCALER_32;
hiwdg.Init.Window = ms * 10 /8;
hiwdg.Init.Reload = ms * 10 /8;
}
else if(ms 》= 3277 && ms 《 6554){
hiwdg.Init.Prescaler = IWDG_PRESCALER_64;
hiwdg.Init.Window = ms * 10 /16;
hiwdg.Init.Reload = ms * 10 /16;
}
else if(ms 》= 6554 && ms 《 13108){
hiwdg.Init.Prescaler = IWDG_PRESCALER_128;
hiwdg.Init.Window = ms * 10 /32;
hiwdg.Init.Reload = ms * 10 /32;
}
else if(ms 》= 13108 && ms 《26215){
hiwdg.Init.Prescaler = IWDG_PRESCALER_256;
hiwdg.Init.Window = ms * 10 /64;
hiwdg.Init.Reload = ms * 10 /64;
}
ret = HAL_IWDG_Init(&hiwdg);
return ret;
}
/**
* @brief refresh 内部独立看门狗。
* @retval None
*/void n_iwdg_refresh(void)
{
HAL_IWDG_Refresh(&hiwdg);
//假如没配置看门狗,这里就不能调用,调用的话会产生hardfault.}
举报
更多回帖
rotate(-90deg);
回复
相关问答
IWDG
WWDG
如何对独立
看门狗
(
IWDG
)
进行
配置
2021-08-11
1208
如何对独立
看门狗
和窗口
看门狗
进行
配置
2021-09-22
1550
独立
看门狗
的
喂狗
周期范围是多大呢
2021-08-13
2793
如何对独立
看门狗
IWDG
的代码
进行
配置
2021-09-14
1377
IWDG
独立
看门狗
有何作用
2021-09-24
882
如何去
配置
独立
看门狗
IWDG
呢
2021-08-27
1749
怎样去计算STM32独立
看门狗
的
喂狗
时间
2021-08-09
1493
一文弄懂STM32的独立
看门狗
IWDG
2021-08-20
1581
独立
看门狗
IWDG
的结构是如何构成的
2021-09-22
1045
独立
看门狗
(
IWDG
)的定义与实验详解
2021-08-27
1567
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分