历史上的今天
返回首页

历史上的今天

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

2021年12月29日 | STM32F103看门狗功能实现

2021-12-29 来源:eefocus

  STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备( 独立看门狗 和 窗口看门狗 )可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。


  独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。


  IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。


  看门狗主要是用来对系统运行状态进行监控的,以免系统被干扰后代码跑飞了,导致系统混乱。看门狗的使用也比较简单,下面就分别来看一下独立看门狗和窗口看门狗的使用方法。


独立看门狗


//初始化独立看门狗

//prer:分频数:0~7(只有低 3 位有效!)

//分频因子=4*2^prer.但最大值只能是 256!

//rlr:重装载寄存器值:低 11 位有效.

//时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms).

void IWDG_Init(u8 prer,u16 rlr)

{

// 1、取消寄存器写保护 写0x5555

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

// 2、设置独立看门狗预分频系数

IWDG_SetPrescaler(prer);

// 3、设置独立看门狗重装载值

IWDG_SetReload(rlr);;

// 4、重载计数值喂狗 写0xAAAA

IWDG_ReloadCounter();

// 5、启动看门狗     写0xCCCC

IWDG_Enable();

}

void IWDG_Feed(void)

{

IWDG_ReloadCounter();

}


独立看门狗的初始化很简单,主要就是设置一下喂狗的时间。然后在程序运行过程中不停的喂狗。


int main(void)

{

    u8 key = 0;

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

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    LED_Init();

    KEY_Init();

    IWDG_Init(4, 625); //溢出时间为1s  (4*2^4)*625/40=1000ms


    LED0 = 1;

    LED1 = 1;

    delay_ms(500);

    LED0 = 0;

    LED1 = 0;


    while(1)

    {

        key = KEY_Sacn(1);

        if( key == WKUP_PRES)

        {

            IWDG_Feed();

        }

        delay_ms(10);

    }

}


这里通过一个按键来模拟喂狗,当按键按一次,就会喂狗一次。如果按键超过喂狗时间没有按下时,独立看门狗就会使系统复位。


窗口看门狗


u8 WWDG_CNT = 0x7f;

void WWDG_NVIC_Init(void)

{

    NVIC_InitTypeDef NVIC_InitStructure;

    NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

}


//初始化窗口看门狗

//tr :T[6:0],计数器值

//wr :W[6:0],窗口值

//fprer:分频系数(WDGTB),仅最低 2 位有效

//Fwwdg=PCLK1/(4096*2^fprer)

void WWDG_Init(u8 tr, u8 wr, u32 fprer)

{

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); //时钟使能

    WWDG_CNT = tr & WWDG_CNT;

    WWDG_SetPrescaler(fprer); //设置预分频值

    WWDG_SetWindowValue(wr); //设置窗口值 上窗口值  与喂狗间隔没关系

    WWDG_Enable(WWDG_CNT); //使能看门狗,设置计数值

    WWDG_ClearFlag(); //清除提前唤醒中断

    WWDG_NVIC_Init(); //设置中断优先级

    WWDG_EnableIT(); //开启窗口看门狗中断

}

void WWDG_Set_Counter(u8 cnt)

{

    WWDG_Enable(cnt); //使能看门狗,设置计数值

}

void WWDG_IRQHandler(void)

{

    WWDG_SetCounter(WWDG_CNT);        //喂狗

    WWDG_ClearFlag(); //清除提前唤醒中断

    LED0=!LED0;

}


由于窗口看门狗的喂狗时间很短,在程序运行过程中很难判断出什么时候该喂狗,所以这里喂狗使用中断来执行,在需要喂狗的时候,直接触发中断,在中断中进行喂狗,每喂一次狗,LED就取反一次。通过观察LED的闪烁就可看出中断函数的执行情况。


int main(void)

{

    u8 key = 0;

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

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    LED_Init();

    KEY_Init();

    //IWDG_Init(4, 625); //溢出时间为1s  (4*2^4)*625/40=1000ms


    LED0 = 1;

    LED1 = 1;

    delay_ms(500);

    LED0 = 0;

    LED1 = 0;

    //窗口看门狗喂狗间隔 只和 tr 低6位有关  wr 可以设置为0x40---0x7f 之间的任意值

    // 4096*2^3*64/36000000 = 58.25ms   (64为0x7f 低6位值)

    WWDG_Init(0x7f, 0x7f, WWDG_Prescaler_8); //计数器值7f,窗口寄存器5f,分频数为8

    // 4096*2^3*31/36000000 =28.22ms   (31为0x4f 低6位值)

    //WWDG_Init(0x5f, 0x5f, WWDG_Prescaler_8);

   // 4096*2^3*15/36000000 =13.65ms   (15为0x4f 低6位值)

    //WWDG_Init(0x4f, 0x5f, WWDG_Prescaler_8);

    // 4096*2^3*1/36000000 =910us  (1为0x41 低6位值)  窗口最小值为0x40 

    //WWDG_Init(0x41, 0x5f, WWDG_Prescaler_8);

    while(1)

    {       

    }

}


在主函数中通过设置不同的溢出时间来观察LED灯的闪烁频率。

推荐阅读

史海拾趣

Delta Electronics公司的发展小趣事

Delta Electronics在电源管理技术方面一直处于行业领先地位。公司不断投入研发资源,推动电源技术的创新和进步。其中,Delta开发的高效率开关式电源供应器,以其高效、稳定和可靠的性能,赢得了全球客户的广泛认可。此外,公司还积极推广绿色能源和节能技术,为客户提供环保、节能的电源解决方案。

General Electronic Devices公司的发展小趣事
负责产生控制信号,驱动开关元件按一定频率和占空比工作。
Esico-Triton公司的发展小趣事

近年来,Esico-Triton越来越重视企业的可持续发展和社会责任。公司开始着手研发更加环保的电子产品,减少有害物质的使用,推动循环经济的发展。此外,Esico-Triton还积极参与社会公益活动,支持教育事业和环境保护项目,以实际行动回馈社会。这些举措不仅提升了公司的品牌形象,也为电子行业的可持续发展树立了典范。

Dailywell Electronics Co Ltd公司的发展小趣事

随着业务的不断扩展和市场需求的增加,德利威电子在1998年实现了全系列防水开关的生产,并取得了RS33A开关专利。同年,公司还扩大了经营规模,搬入了自购的厂办大楼,并增加了资本额至一千五百万元。这些举措不仅提升了公司的生产能力和产品品质,也为公司未来的发展奠定了坚实的基础。

芯联(CHIPLINK)公司的发展小趣事

芯联集成非常重视企业文化建设,致力于打造一个高效、协作、创新的团队。公司倡导“以人为本”的管理理念,关注员工成长和发展,为员工提供良好的工作环境和福利待遇。同时,公司还建立了完善的激励机制和培训体系,激发员工的工作热情和创造力。这些努力使芯联集成在行业内树立了良好的口碑和形象,吸引了众多优秀人才加入公司。

方向电子公司的发展小趣事

芯联集成始终将技术创新作为公司发展的核心驱动力。公司不断加大研发投入,积极推动技术迭代,确保在行业内保持领先地位。同时,公司还注重知识产权保护,积极申请专利,为公司的技术成果提供了坚实的法律保障。这些努力使芯联集成在竞争中始终保持优势,赢得了市场的广泛认可。

问答坊 | AI 解惑

智能小车一些程序范例.rar

本帖最后由 paulhyde 于 2014-9-15 04:11 编辑 小车  …

查看全部问答>

教你一个好用的损招,让你有永远为你空闲的公共停车位

现在处处车满为患,如果没有专用停车位,很多朋友到了晚上都不敢开车出门,why?车位紧张!回来晚了就只能把爱车丢到马路边上了,多心疼!波兰设计师maciej siczek有个不错的占车位手段,在你最爱好的车位上制作一个大坑,谁还会冒险往坑里开呢?如 ...…

查看全部问答>

在Windows下Qt Creator编程环境使用QextSerialPort编写串口时遇到了问题,请大家多多帮忙!在线等。。。

问题:在Windows下Qt Creator编程环境使用QextSerialPort编写串口时遇到了问题,具体信息见下: release/serialtest.o:serialtest.cpp::-1: error: undefined reference to `QextSerialPort::QextSerialPort()\' release/serialtest.o:serialtest ...…

查看全部问答>

请教下关于USB设备驱动的安装问题

各位牛牛,我刚接触设备驱动开发不久,现在有一个问题请教下大家,请牛牛赐教! 我现在已经有了一个驱动程序的sys文件,自己编写了一个inf文件,当设备第一次插入电脑时,系统弹出安装向导,选择路径安装后提示安装成功。 但是此时如果换一个端口 ...…

查看全部问答>

关于t6963控制lcd显示图形程序

我现在在做关于t6963控制lcd显示图形程序,我本想只对一行像素点进行操作,然而其他行也产生了同样的操作效果,有哪位大哥知道怎样对t6963进行控制,是要写什么命令还是要接哪根控制线?…

查看全部问答>

platform.reg里面IF和ENDIF不对称,怎么办?

各位大侠,小弟我在WinCE5.0 Platform Builder里导入厂家的BSP后,定制了一个Internet Appliance的OS,结果sysgen后make run-time image的时候出现以下错误: FMERGE: Error - still inside an if statement: FMERGE: D:\\WINCE500\\PBWorkspaces ...…

查看全部问答>

stm32的启动文件选择

MDK,用的3.40的标准外设库。 ─ startup_stm3210f10x_ld.s,STM32小密度产品   ─ startup_stm3210f10x_md.s,STM32中密度产品   ─ startup_stm3210f10x_hd.s,STM32大密度产品   _xl,超大密度 _cl&nb ...…

查看全部问答>

2407load program求救,急!谢谢各位大侠

这个是我的cmd文件: MEMORY {   PAGE 0:         VECS            origin = 0000h,         length = 0040h     ...…

查看全部问答>

在watch windows口观察变量STEP的变化

我想在watch windows口观察变量STEP的变化,可是打开的watch windows口什么都没有 ,请问我该怎么办?谢谢…

查看全部问答>

(一)靓靓-收到的EEWORLD送的德仪EZ430-Chronos无线运动手表开发工具

收到系统短消息看到EEWORLD的“TI年度网友回馈”,给本人一个50美刀的额度奖励在 TI eStore选定奖品,由于觉得自己的贡献区区不足道,有点受之有愧,所以没有按照短消息给相关管理员。年后又受到短消息提醒,未及时回复,正准备开电脑时回复时恰巧 ...…

查看全部问答>