独立看门狗简介
IWDG结构框图
(1)独立看门狗时钟
独立看门狗的时钟由独立的 RC 振荡器 LSI 提供, 即使主时钟发生故障它仍然有效,非常独立。 LSI 的频率一般在 30~60KHZ 之间,根据温度和工作场合会有一定的漂移,我们一般取 40KHZ,所以独立看门狗的定时时间并一定非常精确,只适用于对时间精度要求比较低的场合。
(2)计数器时钟
实际的计数频率为:
(3)计数器
(4)重装载寄存器
重装载寄存器是一个 12 位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定着独立看门狗的溢出时间。
(5)键寄存器
寄存器说明:
(6)状态寄存器:
如何使用IWDG
RCC复位描述
STM32F10xxx支持三种复位形式,分别为系统复位、上电复位和备份区域复位。
1 系统复位
2 电源复位
3 备份域复位
*************************************************************************************************************************
如果独立看门狗 IWDG 产生复位,我们可以从RCC复位和时钟控制寄存器中获取复位原因:
以下是各种复位标志位:
代码分析
标准库中,关于 IWDG 总共就只有以下几个函数,都是配置或读取寄存器,非常简单,就不看源码了:
/** @defgroup IWDG_Exported_Functions
* @{
*/
void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);
void IWDG_SetReload(uint16_t Reload);
void IWDG_ReloadCounter(void);
void IWDG_Enable(void);
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);
常用的独立看门狗配置 和喂狗操作:
/*
* 设置 IWDG 的超时时间
* Tout = prv/40 * rlv (s)
* prv可以是[4,8,16,32,64,128,256]
* prv:预分频器值,取值如下:
* @arg IWDG_Prescaler_4: IWDG prescaler set to 4
* @arg IWDG_Prescaler_8: IWDG prescaler set to 8
* @arg IWDG_Prescaler_16: IWDG prescaler set to 16
* @arg IWDG_Prescaler_32: IWDG prescaler set to 32
* @arg IWDG_Prescaler_64: IWDG prescaler set to 64
* @arg IWDG_Prescaler_128: IWDG prescaler set to 128
* @arg IWDG_Prescaler_256: IWDG prescaler set to 256
*
* rlv:预分频器值,取值范围为:0-0XFFF
* 函数调用举例:
* IWDG_Config(IWDG_Prescaler_64 ,625); // IWDG 1s 超时溢出
*/
void IWDG_Config(uint8_t prv ,uint16_t rlv)
{
// 使能 预分频寄存器PR和重装载寄存器RLR可写
IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );
// 设置预分频器值
IWDG_SetPrescaler( prv );
// 设置重装载寄存器值
IWDG_SetReload( rlv );
// 把重装载寄存器的值放到计数器中
IWDG_ReloadCounter();
// 使能 IWDG
IWDG_Enable();
}
// 喂狗
void IWDG_Feed(void)
{
// 把重装载寄存器的值放到计数器中,喂狗,防止IWDG复位
// 当计数器的值减到0的时候会产生系统复位
IWDG_ReloadCounter();
}
然后在主函数中进行测试,如果 看门狗复位,那么就能够检测到相应的复位标志。
main.c
int main(void)
{
// 配置LED GPIO,并关闭LED
LED_GPIO_Config();
Delay(0X8FFFFF);
/*------------------------------------------------------------*/
/* 检查是否为独立看门狗复位 */
if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)
{
/* 独立看门狗复位 */
/* 亮红灯 */
LED_RED;
/* 清除标志 */
RCC_ClearFlag();
/*如果一直不喂狗,会一直复位,加上前面的延时,会看到红灯闪烁
在1s 时间内喂狗的话,则会持续亮绿灯*/
}
else
{
/*不是独立看门狗复位(可能为上电复位或者手动按键复位之类的) */
/* 亮蓝灯 */
LED_BLUE;
}
/*--------------------------------------------------------------*/
// 配置按键GPIO
Key_GPIO_Config();
// IWDG 1s 超时溢出
IWDG_Config(IWDG_Prescaler_64 ,625);
//while部分是我们在项目中具体需要写的代码,这部分的程序可以用独立看门狗来监控
//如果我们知道这部分代码的执行时间,比如是500ms,那么我们可以设置独立看门狗的
//溢出时间是600ms,比500ms多一点,如果要被监控的程序没有跑飞正常执行的话,那么
//执行完毕之后就会执行喂狗的程序,如果程序跑飞了那程序就会超时,到达不了喂狗
//的程序,此时就会产生系统复位。但是也不排除程序跑飞了又跑回来了,刚好喂狗了,
//歪打正着。所以要想更精确的监控程序,可以使用窗口看门狗,窗口看门狗规定必须在
//规定的窗口时间内喂狗。
while(1)
{
// 这里添加需要被监控的代码,如果有就去掉按键模拟喂狗,把按键扫描程序去掉
//--------------------------------------------------------------------------
if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON )
{
// 喂狗,如果不喂狗,系统则会复位,LED1则会灭一次,如果在1s
// 时间内准时喂狗的话,则绿会常亮
IWDG_Feed();
//喂狗后亮绿灯
LED_GREEN;
}
}
//---------------------------------------------------------------------------
}
上一篇:stm32专题三十三:RTC实时时钟
下一篇:stm32专题三十五:DAC
推荐阅读
史海拾趣
伊士曼柯达公司由发明家乔治·伊士曼于1880年创立,最初名为伊斯曼干版公司。伊士曼的初衷是提供一种更便捷、更经济的摄影方式,以满足大众对摄影的日益增长的需求。他通过不断的研发和创新,成功推出了易于使用的胶卷和相机,使摄影技术得以普及。这一创新不仅改变了摄影行业的格局,也为伊士曼柯达公司的后续发展奠定了坚实的基础。
除了钢琴制造,星海公司还积极拓展多元化业务。公司下设多个分厂和子公司,涉及西管乐器、民族乐器、打击乐器、电声乐器和乐器配件等多个领域。此外,星海公司还积极打造音乐教育板块,成立钢琴培训学校,为音乐爱好者提供优质的教育资源。通过多元化发展,星海公司逐渐形成了完整的产业链和强大的品牌影响力。
进入1950年代,E-T-A公司开始关注固态远程电源控制器(SSRPCs)的研发。这一创新技术为电气系统提供了更加可靠和高效的电源管理方案。公司投入大量资源进行研发,成功推出了多款固态远程电源控制器产品,这些产品在市场上获得了广泛认可,并为公司带来了可观的收益。
为了进一步扩大市场份额和提高竞争力,AVAGO公司开始积极寻求并购机会。通过一系列精心策划的并购交易,公司成功整合了多家在半导体行业具有影响力的企业,从而获得了更多的技术资源和市场份额。这些并购不仅增强了AVAGO公司的综合实力,还为其在全球范围内的业务拓展奠定了坚实基础。
ECLIPSE公司深知,要想在竞争激烈的电子行业中保持领先地位,必须不断创新和满足用户需求。因此,公司投入大量资源用于Eclipse的研发和更新,不断推出新版本和新功能。同时,ECLIPSE公司也非常重视社区建设,通过举办开发者大会、提供在线支持等方式,积极与全球开发者互动和交流。这些努力不仅增强了Eclipse的用户黏性,也为其带来了更多的创新思路和商业机会。
经常在运行过程中有这个错误. MSP430: Trouble Reading Memory Block at 0x23fc on Page 0 of Length 0x2: Could not determine device state 如果发生,在程序第一句就会发生 MSP430: Failed Software Reset: Could not read Enhanced ...… 查看全部问答∨ |
|
提问+大家在使用MSP430的时候试着动态的去切换MCLK的时钟源? 本帖最后由 wstt 于 2014-3-1 01:14 编辑 比如将MCLK的时钟源从DCO切到外部晶振,或者其他的时钟源。… 查看全部问答∨ |
|
面试就像推销,“商品”就是自己。我求职的最深体会是:讲诚信。面试前要做充分准备,临场回答一定要知之为知之,不知为不知。这个年代,诚实并没有过时。 记得找工作前,师兄师姐们向我传授经验:面试时要表现得圆滑老练些,不知道的千 ...… 查看全部问答∨ |