历史上的今天
返回首页

历史上的今天

今天是:2025年01月09日(星期四)

正在发生

2019年01月09日 | STM32学习笔记一一窗口看门狗

2019-01-09 来源:eefocus

1.窗口看门狗( WWDG):通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。


2.窗口看门狗工作示意图:


这里写图片描述


T[6:0]就是 WWDG_CR 的低七位, W[6:0]即是 WWDG->CFR 的低七位。T[6:0] 


就是窗口看门狗的计数器,而 W[6:0]则是窗口看门狗的上窗口,下窗口值是固定的( 0X40)。当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。上窗口值( W[6:0]) 是由用户自己设定的,根据实际要求来设计窗口值,但是一定要确保窗口值大于 0X40,否则窗口就不存在了。


3.相关寄存器


a.控制寄存器( WWDG_CR):各位描述如下图


这里写图片描述


WWDG_CR 只有低八位有效, T[6:0]用来存储看门狗的计数器值,随时更新,每个窗口看门狗计数周期( 4096×2^ WDGTB)减 1。当该计数器的值从 0X40 变为 0X3F 的时候,将产生看门狗复位。


WDGA 位则是看门狗的激活位,该位由软件置 1,以启动看门狗,并且一定要注意的是该位一旦设置,就只能在硬件复位后才能清零了。


b.配置寄存器( WWDG_CFR)L


这里写图片描述

EWI 是提前唤醒中断,也就是在快要产生复位的前一段时间(T[6:0]=0X40) 来提醒我们,需要进行喂狗了,否则将复位!


c.状态寄存器( WWDG_SR)


该寄存器用来记录当前是否有提前唤醒的标志。该寄存器仅有位 0 有效,其他都是保留位。当计数器值达到 40h 时,此位由硬件置 1。它必须通过软件写 0 来清除。对此位写 1 无效。 即使中断未被使能, 在计数器的值达到 0X40的时候, 此位也会被置 1。


4.WWDG库函数配置步骤:


1)使能 WWDG 时钟:WWDG 不同于 IWDG, IWDG 有自己独立的 40Khz 时钟,而 WWDG使用的是 PCLK1 的时钟,需要先使能时钟。


操作: 

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


2)设置窗口值和分频数


设置窗口值的函数:void WWDG_SetWindowValue(uint8_t WindowValue);//入口参数为窗口值


设置分频数的函数是:void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);//入口参数是分频值


3)开启 WWDG 中断并分组


开启 WWDG 中断的函数为:WWDG_EnableIT(); //开启窗口看门狗中断


中断优先级配置,使用 NVIC_Init()函数。


4) 设置计数器初始值并使能看门狗


void WWDG_Enable(uint8_t Counter);//该函数既设置了计数器初始值,同时使能了窗口看门狗。


5) 编写中断服务函数


在最后,编写窗口看门狗的中断服务函数,通过该函数来喂狗,喂狗要快,否则当窗口看门狗计数器值减到 0X3F 的时候,就会引起软复位了。在中断服务函数里面也要将状态寄存器的 EWIF 位清空。


5.库函数实现


/*窗口看门狗初始化*/

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

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


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


    WWDG_SetWindowValue(wr);//设置窗口值


    WWDG_Enable(tr);     //使能看门狗 ,设置 counter.                  


    WWDG_ClearFlag();


    WWDG_NVIC_Init();//初始化窗口看门狗 NVIC


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

//重设置WWDG计数器的值

void WWDG_Set_Counter(u8 cnt)

{

    WWDG_Enable(cnt);    

}

//窗口看门狗中断服务程序

void WWDG_NVIC_Init()

{

    NVIC_InitTypeDef NVIC_InitStructure;

    NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;    //WWDG中断

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;   //抢占2,子优先级3,组2  

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;   //抢占2,子优先级3,组2 

    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; 

    NVIC_Init(&NVIC_InitStructure);//NVIC初始化

}


void WWDG_IRQHandler(void)

    {

    // Update WWDG counter

    WWDG_SetCounter(0x7F);    //当禁掉此句后,窗口看门狗将产生复位

    // Clear EWI flag */

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

    // Toggle GPIO_Led pin 7 */

    LED1=!LED1;

    }


注:具体的函数实现参见库函数文件:stm32f10x_iwdg.c


参考:


《原子库函数教程》



推荐阅读

史海拾趣

Gold Peak Group公司的发展小趣事
定期对控制电路进行检查和维护,确保接触器、继电器等元件的性能良好,触点无粘连或损坏。
Achronix Semiconductor Corporation公司的发展小趣事
定期对控制电路进行检查和维护,确保接触器、继电器等元件的性能良好,触点无粘连或损坏。
HANBIT Electronics公司的发展小趣事
对操作人员进行必要的培训,使其了解控制电路的工作原理、操作方法和安全注意事项。
Actel公司的发展小趣事
对操作人员进行必要的培训,使其了解控制电路的工作原理、操作方法和安全注意事项。
Conditioning Semiconductor Devices Corp公司的发展小趣事

随着全球环保意识的提高,半导体行业也面临着环保和可持续发展的挑战。CSDC积极响应这一趋势,将环保理念融入公司的生产和运营中。通过采用环保材料和工艺,减少生产过程中的污染排放,CSDC不仅降低了对环境的影响,还提升了企业的社会形象。同时,公司还积极参与环保公益活动,推动半导体行业的绿色发展。

这些故事展示了半导体设备公司可能经历的一些关键发展阶段和面临的挑战。虽然这些故事是虚构的,但它们基于半导体行业的现实背景和趋势进行构建,具有一定的参考价值。

FOTEK公司的发展小趣事

福禄克公司成立于1948年,初期专注于电气测试工具的研发与生产。创始人敏锐地察觉到,随着战后全球工业化的加速,对高质量电气测试工具的需求将急剧增长。公司投入大量资源于技术研发,成功推出了首款高精度数字万用表,这一创新产品迅速在市场上占据一席之地,为福禄克奠定了技术创新的基石。此后,福禄克不断推出新品,如热成像仪、绝缘电阻测试仪等,持续引领行业技术潮流。

问答坊 | AI 解惑

RealView MDK 3.24评估版已正式发布

软件大小:99.14M 下载地址:http://www.realview.com.cn/down-list.asp?id=584 注意:MDK中国版例程服务包请前往http://www.realview.com.cn/down-list.asp?id=585下载 RealView MDK 3.24更新说明 ================== 1. ...…

查看全部问答>

arm Linux中的IPv6协议怎么用起来?

两块板子,一块单片机板子,一块ARM9板子。单片机板子上没有操作系统,ARM9板子上加载了Linux操作系统。 一方面,在ARM9板子上,需要把单片机板子通过无线传送过来的IPv6包解析,并最终把包中应用层的数据传给PC机服务器;另一方面,ARM9板子要接 ...…

查看全部问答>

DDK6001安装不了,总是提示 Remove: EULA

DDK6001安装不了,总是提示 Remove: EULA,好像是说有有不需要的一个组件已经安装,必须把它先卸载了,但是按提示操作了无数次,还是装不了,是怎么回事呢,谢谢…

查看全部问答>

烧写NK.BIN出现的地址错误

用pb自定义了一个Microsoft DeviceEmulator_ARMV4系统,生成SDK,编译都通过,就是在烧写到ARM9板的时候出现错误,以下是串口消息 Now,Downloading [ADDRESS:400000H,TOTAL:0X01C711DF(29823455) bytes] RECEIVED FILE SIZE: 0x00100000Date CRC0 ...…

查看全部问答>

有关流接口驱动程序的问题

最近调试流接口驱动程序出了些问题,麻烦论坛里的牛牛们指教,问题描述如下: 三星2440平台,wince5.0,调试ADC的流接口驱动程序,我只为了测试所以很多功能都简化了,就是往寄存器里写一次,直接读回,用了virtualalloc和virtualcopy函数映射地址 ...…

查看全部问答>

FPGA板子哪家的板子比较好

本人想买FPGA板子,不知道哪家提供的板子和服务比较好,请大家帮忙说说啊!…

查看全部问答>

有两个恒流源的运放电路不太理解,希望请教一下大家

书上说左边的电路Io=Vin/R2,我能理解到根据负反馈,运放工作于虚短的状态,R2上的电压为Vin,根据KCL定理,Vin/R2=Io+Ir1(FET 源漏极电流),书里没有说为什么可以忽略这个源漏极电流,想请教一下大家。 另外右边的电路,是引入了正反馈,不能用虚 ...…

查看全部问答>

51单片机开发板 原理图 集合下载

51单片机开发板 原理图 集合下载 ,欢迎下载学习 [ 本帖最后由 y789 于 2012-5-14 15:33 编辑 ]…

查看全部问答>

谁做过超声波发射电路,用的是升压中周,有谁做过吗。。帮忙指点一下电路

不知道他的工作原理(中周不了解)按着焊好,又不行。。急死了…

查看全部问答>

调试28027出现问题

通过CCS5.4调试TMS320F28027出现warning #10247-D: creating output section \"csm_rsvd\" without a SECTIONS specification warning #10247-D: creating output section \"csmpasswds\" without a SECTIONS specification 怎么回事,求救…

查看全部问答>