历史上的今天

今天是:2024年11月12日(星期二)

2019年11月12日 | STM32F1小白系列之四、独立看门狗(IWDG)

发布者:温文儒雅 来源: eefocus关键字:STM32F1  独立看门狗  IWDG 手机看文章 扫描二维码
随时随地手机看文章

一、看门狗原理


1、单片机中有一个【寄存器(计数器)】专门用来倒计数,这个计数器倒计数是独立于程序之外的,不受程序影响的。(程序是井,计数器是河,井水不犯河水,你跑你的程序,我记我的数,互不影响。)


2、但是: 

这个【计数器】会有一个初值,这个值会逐次递减,终有一刻会自减到0,当计数自减到0的时候,【系统】就会强制重启,程序会从头开始运行。 

而当计数器每次倒计数到0之前,如果往计数器里面重新写入一次数值,他就永远不会倒计数到0,这时候系统也就不会重启了。


3、所以: 

程序员写程序的时候,如果开启了看门狗,会在程序中实现这样一个功能——专门设定固定的时间循环往复的往【计数器】中写入一个数值(喂狗)。


当程序正常运行的时候,每隔一段时间,【计数器】会被重新写入数值,那么它永远不会倒计时到0, 

而当程序跑飞或者系统卡死,程序不能按照预想的要求来执行,也就不能在设定的时间去喂狗,那么计数器肯定会有一个时刻倒计数到0,系统就会重启,程序就会从头开始跑,又恢复到初始运行状态。


4、所以: 

看门狗的作用就是——不用人为的检查程序是否正常运行,系统是否正常运行,需不需要重启系统,如果程序跑飞或者系统卡死,则自动重新启动系统,而不要人为的主动去重新启动系统。


二、看门狗相关寄存器


1、 键值寄存器 IWDG_KR

2、 预分频寄存器 IWDG_PR

3、 重装载寄存器 IWDG_RLR

4、 状态寄存器 IWDG_SR


三、配置看门狗步骤


1、使能寄存器可写入(即:关闭写保护)

    向【键值寄存器(IWDG_KR)】写入【0xAAAA】即可使【预分频寄存器】和【重装载寄存器】变得可以写入数据。


2、配置预分频值

    数据位[2:0]。

    预分频因子:4/8/16/32/64/128/256


3、配置重装载值

    数据位[11:0].


4、重新装载一次计数值(喂狗一次)


5、启动看门狗


四、看门狗程序


1、使用库函数


1)相关库函数


1 关闭写保护 IWDG_WriteAccessCmd();

2 配置预分频值 IWDG_SetPrescaler();

3 配置重装载值 IWDG_SetReload();

4 重新装载计数器 IWDG_ReloadCounter();

5 使能看门狗(启动看门狗) IWDG_Enable();


2)程序


/*

    函数功能:初始化独立看门狗

    函数名:init_iwdg

    返回值:void

    参数:  pre_scaler_value   预分频值

           reload_value       重装载数值

 */

void init_iwdg(uint8_t pre_scaler_value, uint32_t reload_value)

{

    IWDG_WriteAccessCmd(0x5555);//关闭写保护:IWDG->KR = 0x5555;


    IWDG_SetPrescaler(pre_scaler_value);//分频因子为4,参数由main函数传参传进来,预分频值为64,(4==100),   IWDG->PR = 4, 即:IWDG->PR的bit[2]bit[1]bit[0]分别为100


    IWDG_SetReload(reload_value);//配置重装载值,参数由main函数传参传进来,3秒,公式:T(ms) == [(4 * 2^pre_Scaler) * reload] / 40;


    IWDG_ReloadCounter();//第一次喂狗


    IWDG_Enable();//使能看门狗

}


//喂狗API

void feed_iwdg(void)

{

    IWDG_ReloadCounter();//喂狗,使STM32重新加载【IWDG_RLR中的值】到【看门狗计数器里面】。

}


2、直接配置寄存器


/*

    函数功能:初始化独立看门狗

    函数名:init_iwdg

    返回值:void

    参数:  pre_scaler_value   预分频值

           reload_value       重装载数值

 */

void init_iwdg(uint8_t pre_scaler_value, uint32_t reload_value)

{

    /*配置寄存器*/

    IWDG->KR = 0x5555;  //关闭写保护,可以向IWDG_PR和IWDG_RLR寄存器中写入数据。

    IWDG->PR = pre_scaler_value;        //配置预分频因子,4 == 0100,表示与分频因子为64

    IWDG->RLR = reload_value;               //配置重装载值,公式:T(ms) == [(4 * 2^pre_Scaler) * reload] / 40;


    /*初始化喂狗一次*/

    IWDG->KR = 0xAAAA;  //第一次喂狗。


    /*启动看门狗*/

    IWDG->KR = 0xCCCC;  

}


//喂狗API

void feed_iwdg(void)

{

    IWDG->KR = 0xAAAA;//喂狗,使STM32重新加载【IWDG_RLR中的值】到【看门狗计数器里面】。

}


3、main函数


因为寄存器版本和库函数版本只是初始化配置函数不同,不影响main函数,所以main函数是一样的。 

main函数中主要实现的功能就是:


while循环检测是否有按键按下,若有,则喂狗

程序如下:


 int main(void)

 {      

    delay_init();            //延时函数初始化    

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);      //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

    LED_Init();          //初始化与LED连接的硬件接口

    KEY_Init();          //按键初始化     

    delay_ms(500);       //延时


    init_iwdg(4,1875);   //初始化看门狗

    LED0=0;              //点亮LED0

    while(1)

    {

        if (KEY_Scan(1))//循环检测,当按下任何一个按键就喂狗一次

        {

            feed_iwdg();

        }

        delay_ms(10);

    };   

}


五、备注


本程序基本是完全照抄正点原子的程序,因为是看了一遍原子哥的程序,然后关掉自己重新写的,所以一些语句可能不同,但是思路完全一样,所以想要原版程序的童鞋可以直接去正点原子论坛找找原版。

关键字:STM32F1  独立看门狗  IWDG 引用地址:STM32F1小白系列之四、独立看门狗(IWDG)

上一篇:stm32正点原子学习笔记(29)独立看门狗实验
下一篇:STM32F0x2 IWDG(独立看门狗)

推荐阅读

订目标 今年营收挑战 1 兆元 这一天,刘德音仍然低调,取消了前董事长张忠谋在任时,每年必有的运动会后记者会。 但站在司令台上,他清晰明快地宣布台积电下一个成长目标:「台积电今年营收将突破台币 1 兆元,创下历史纪录;但创新高还不够,以美元计算营收仅个位数成长,希望大家努力,未来几年让营收、获利接近 10% 的成长目标。 」。 意思是,...
车东西11月11日消息,据外媒Futurecar报道,宾夕法尼亚州立大学的研究人员发现了一种10分钟即可充满电动车电池的新技术,与传统的快充技术相比,新的方案可大幅缩短用户的充电时间。研究人员发现将电池加热10分钟,然后迅速使其冷却,电池中就会充满电量,驱动车辆行驶300-500公里。但加热电池存在一定风险,是被业内禁止的,所以该方案短期内不能量产。一...
小米集团副总裁、手机部总裁曾学忠在今天下午发表长文科普复眼分布式相机。 曾学忠称复眼这一词取自生物界,很多生物拥有复眼,相比人眼可以看的更远距离,更广视角,更丰富的颜色,更快的感知速度,人类对于复眼的研究中也衍生出了很多新的科技,带动了镜头和仿生学的长足发展。 ...
  11月11日,内蒙古自治区人民政府印发《自治区“十四五”应对气候变化规划》,其中提到氢能相关:   推动新能源加快发展。实施“新能源倍增工程”,建设包头市、乌兰察布市、鄂尔多斯市、巴彦淖尔市、阿拉善盟等千万千瓦级新能源基地,推广新能源与生态、农业、供热、氢能、储能等多元融合发展模式,通过区内高比例消纳和区外高比例外送,推进自治...

史海拾趣

问答坊 | AI 解惑

超声波测距原理,测试可靠!

本帖最后由 paulhyde 于 2014-9-15 02:59 编辑 该原理已经调试成功,能可靠工作,测量范围可达5CM~3M    …

查看全部问答∨

采用C8051F206单片机和MAX3232通信芯片进行多路数据采集和通信的设计问题

单片机用C8051F206并使用单片机内带的12位转换器;对每一路信号通过取样电阻取样,获得电压信号,然后将每一路信号分别连接到C8051F206的一个模拟信号输入引脚;通信芯片用MAX3232;与PC机的RS232串口进行通信。 作为新手不知如何下手,请知情人士 ...…

查看全部问答∨

问 :tornado2.0 bsp到2.2的移植

哪个老大做过?这个移植需要注意的地方? 我自己按照文档改了下,不能使。…

查看全部问答∨

请问排阻用什么封装?

画pcb要用排阻的封装,还没去买排阻,想问问有什么封装形式,谢谢!…

查看全部问答∨

承接电子设计(单片机)项目

承接电子设计(单片机)项目 (一)、PCB LAYOUT(2层 or 4层) 老牛承接专业抄板、画板,质优价廉,可每天查看画板进度,有问题及时沟通。 可加我QQ看画过的样板,因为老牛是个人接活,所以价钱肯定比抄板公司低,希望各位同行有活之余多多照顾。 ...…

查看全部问答∨

active sync 和开发板连不上

大家好,我用的sbc2410开发板同电脑的连接,刚开始还可以,第二天就不行了:开发板上显示已连接,但电脑上却显示说无法连接。移动设备里也没有东西. 请问哪位前辈知道指点一二。谢谢。…

查看全部问答∨

Symbian正式进军中国市场,联手其正式合作伙伴Symbio中国研发中心招聘开发测试工程师!

Symbian正式进军中国市场啦!!! Symbian中国研发中心硬件设施已经建成,由于负责人均为英国总公司人员,现委托其正式合作伙伴Symbio中国研发中心协助招募开发测试工程师。 工作地点:北京中关村 Junior& Senior Tester 主要职责是编写code ...…

查看全部问答∨

串口调试助手与网络ping包 AVR硬件版 19264LCD显示

    串口调试助手与网络ping包电路, 它具有串口与网口数传测试功能:串口调试助手与仿DOS环境下的网络ping包数传(包含UDP),是可测试所有项目的数传电路,名字叫做通用型数传电路。它将为新项目的各种数传提供可靠、方便与快捷的 ...…

查看全部问答∨

LTC1068

有用过LTC1068滤波芯片的吗?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved