历史上的今天
返回首页

历史上的今天

今天是:2024年09月22日(星期日)

正在发生

2018年09月22日 | 【STM32电机矢量控制】记录12——IWDG看门狗

2018-09-22 来源:eefocus

看门狗概念:

     在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都会陷入死循环。程序的正常运行被打断,由单片机控制的系统无法继续正常工作,会造成整个系统陷入停滞状态,发生不可预料的后果。看门狗就是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启的电路。看门狗命令在程序的中断中拥有最高的优先级。

IWDG简介:

      官方说法:

      STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。 IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。

       通俗说法:

    独立看门狗号称宠物狗,窗口看门狗号称警犬。独立看门狗用通俗一点的话来解释就是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 的时候,系统就会产生一个复位信号,即 IWDG_RESET。如果在计数没减到 0 之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍能工作。

       独立看门狗一般用来检测和解决由程序引起的故障,比如一个程序正常运行的时间是50ms,在运行完这个段程序之后紧接着进行喂狗,我们设置独立看门狗的定时溢出时间为60ms,比我们需要监控的程序 50ms 多一点,如果超过 60ms 还没有喂狗,那就说明我们监控的程序出故障了,跑飞了,那么就会产生系统复位,让程序重新运行。

IWDG主要特性:

  • 自由运行递减计数器。

  • 时钟由独立RC振荡器提供(可在待机和停止模式下运行)。

  • 当递减计数器值达到0x000时产生复位(如果看门狗已激活)。

IWDG功能描述:

       在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。 无论何时,只要在键寄存器IWDG_KR中写入0xAAAA, IWDG_RLR中的值就会被重新加载到计数器,从而避免产生看门狗复位 。

独立看门狗框图:

【STM32电机FOC】记录12——IWDG看门狗

①独立看门狗时钟 

  独立看门狗的时钟由独立的 RC振荡器 LSI提供,即使主时钟发生故障它仍然有效,非常独立。LSI的频率一般在 30~60KHZ之间,根据温度和工作场合会有一定的漂移,我们一般取 40KHZ,所以独立看门狗的定时时间并一定非常精确,只适用于对时间精度要求比较低的场合。

②计数器时钟

  递减计数器的时钟由 LSI经过一个 8位的预分频器得到,我们可以操作预分频器寄存器 IWDG_PR 来设置分频因子,分频因子可以是:[4,8,16,32,64,128,256,256],计数器时钟CK_CNT= 40/ 4*2^PRV,一个计数器时钟计数器就减一。

③计数器

  独立看门狗的计数器是一个 12 位的递减计数器,最大值为 0XFFF,当计数器减到 0时,会产生一个复位信号:IWDG_RESET,让程序重新启动运行,如果在计数器减到 0 之前刷新了计数器的值的话,就不会产生复位信号,重新刷新计数器值的这个动作我们俗称喂狗。

④重装载寄存器

  重装载寄存器是一个 12 位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定着独立看门狗的溢出时间。超时时间 Tout = (4*2^prv) / 40 * rlv (s) ,prv是预分频器寄存器的值,rlv是重装载寄存器的值。

 

⑤键值寄存器

  键值寄存器 IWDG_KR 可以说是独立看门狗的一个控制寄存器,主要有三种控制方式,往这个寄存器写入下面三个不同的值有不同的效果。

通过写往键寄存器写 0XCCC 来启动看门狗是属于软件启动的方式,一旦独立看门狗启动,它就关不掉,只有复位才能关掉。

⑥状态寄存器

  状态寄存器 SR只有位 0:PVU和位 1:RVU有效,这两位只能由硬件操作,软件操作不了。RVU:看门狗计数器重装载值更新,硬件置 1 表示重装载值的更新正在进行中,更新完毕之后由硬件清 0。PVU: 看门狗预分频值更新,硬件置’1’指示预分频值的更新正在进行中,当更新完成后,由硬件清 0。所以只有当 RVU/PVU等于 0 的时候才可以更新重装载寄存器/预分频寄存器。

IWDG库函数:

【STM32电机FOC】记录12——IWDG看门狗

独立看门狗的配置使用:

【STM32电机FOC】记录12——IWDG看门狗

/* 独立看门狗使用LSI作为时钟。

 *        LSI 的频率一般在 30~60KHZ 之间,根据温度和工作场合会有一定的漂移,我

 *        们一般取 40KHZ,所以独立看门狗的定时时间并一定非常精确,只适用于对时间精度

 *        要求比较低的场合。

 *

 * rlv:重装载寄存器的值,取值范围为:0-0XFFF

 * 函数调用举例:

 * IWDG_Config(IWDG_Prescaler_64 ,625);  // IWDG 1s 超时溢出 

 *                        (64/40)*625 = 1s

 */


void IWDG_Config(uint8_t prv ,uint16_t rlv)

{      

    IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );// 使能 预分频寄存器PR和重装载寄存器RLR可写

    IWDG_SetPrescaler( prv );// 设置预分频器值

    IWDG_SetReload( rlv ); // 设置重装载寄存器值

    IWDG_ReloadCounter();// 把重装载寄存器的值放到计数器中

    IWDG_Enable();    // 使能 IWDG

}


void IWDG_Feed(void)

{

    // 把重装载寄存器的值放到计数器中,喂狗,防止IWDG复位

    // 当计数器的值减到0的时候会产生系统复位

    IWDG_ReloadCounter();

}




主要完成任务:

1、对霍尔元件的原理进行了解

2、对其初始化配置、TIM时钟配置进行了解

推荐阅读

史海拾趣

EPCOS/TDK公司的发展小趣事

自上世纪60年代起,TDK就开始在中国布局。首先,在台湾建立合资公司,随后在香港设立销售网络及生产线。进入80年代后,TDK正式踏足中国大陆,在华东及华南多个地区建立生产基地,并逐渐将业务扩展至全国。TDK在中国的发展不仅推动了当地电子工业的进步,也为公司自身赢得了广阔的市场空间。目前,TDK在中国的员工人数近6万人,占TDK全球员工总数的近55%。

ZTE高新兴(Gosuncn)公司的发展小趣事

自上世纪60年代起,TDK就开始在中国布局。首先,在台湾建立合资公司,随后在香港设立销售网络及生产线。进入80年代后,TDK正式踏足中国大陆,在华东及华南多个地区建立生产基地,并逐渐将业务扩展至全国。TDK在中国的发展不仅推动了当地电子工业的进步,也为公司自身赢得了广阔的市场空间。目前,TDK在中国的员工人数近6万人,占TDK全球员工总数的近55%。

蓝箭(BLUE ROCKET)公司的发展小趣事

蓝箭电子始终重视创新能力,不断加大研发投入,推动产品的升级换代。公司还积极拓展国际市场,寻求更多的合作机会。未来,蓝箭电子将继续秉承创新、质量、服务的理念,为电子行业的发展贡献更多力量。

这些故事仅是对蓝箭电子在电子行业发展中一些重要节点的概括,具体的发展过程和细节可能还需要进一步了解公司的历史资料和市场动态。希望这些信息能够满足您的需求。

常忆科技(CHINGIS)公司的发展小趣事

展望未来,常忆科技将继续坚持创新驱动的发展战略。公司将不断加大在研发和创新方面的投入,推动产品技术的持续升级和迭代。同时,常忆科技还将积极拓展新的应用领域和市场空间,以满足更多客户的需求。

为了实现可持续发展,常忆科技还将注重环境保护和社会责任。公司将致力于推广绿色环保的生产方式和产品应用,为社会的可持续发展做出贡献。在未来的发展中,常忆科技有望凭借其卓越的技术实力和创新精神,继续在电子行业中书写新的辉煌篇章。

Hoffman Engineering公司的发展小趣事

在Harry Hoffman的领导下,Hoffman Engineering不断扩展其产品线。从最初的压力机安全保护装置,公司逐渐研发出蒲公英掘具、碟靶投掷器、厨房用电动搅拌器等一系列创新产品。这些产品不仅丰富了Hoffman Engineering的市场布局,也展现了公司在不同领域的技术实力。特别是Hoffman的机柜系列产品,如接线箱和电源插座,逐渐成为市场上的热门产品,为公司带来了稳定的收入来源。

AAEON公司的发展小趣事

在Harry Hoffman的领导下,Hoffman Engineering不断扩展其产品线。从最初的压力机安全保护装置,公司逐渐研发出蒲公英掘具、碟靶投掷器、厨房用电动搅拌器等一系列创新产品。这些产品不仅丰富了Hoffman Engineering的市场布局,也展现了公司在不同领域的技术实力。特别是Hoffman的机柜系列产品,如接线箱和电源插座,逐渐成为市场上的热门产品,为公司带来了稳定的收入来源。

问答坊 | AI 解惑

tms320vc5509的例程css3.3

tms320vc5509的例程css3.3 经过测试的…

查看全部问答>

钽电容封装及各种电阻电容封装说明

钽电容 长的话是+-0.2 ,宽是+-0.1 高 (MM) A 型的尺寸 3.2 X1.6 X1.6    俗称: A(3216) B 型的尺寸 3.5 X2.8 X1.9    俗称: B(3528) C 型的尺寸 6.0X 3.2X 2.6    俗称: C(6032) D 型的尺寸 7.3 X4.3 X2.9&nb ...…

查看全部问答>

eboot 下载 nk 出现错误

我用编译好的eboot 下载nk.bin ,老是出现Checksum failure on record , ABORT!!! ****** 不知道是什么原因? 是不是 cs8900a 不稳定造成的?我的平台S3C2440 + 64M NANDFLASH + 64M RAM wince5.0…

查看全部问答>

UNICODE_STRING问题。。。。

一段代码:        //创建设备名称         UNICODE_STRING devName;         RtlInitUnicodeString(&devName,L\"\\\\Device\\\\MyDDKDevice\");         ...…

查看全部问答>

终于可以踏上回家的行程,我兴奋啊!祝福兄弟姐妹们新年快乐!全家幸福!

终于可以踏上回家的行程,我兴奋啊!祝福兄弟姐妹们新年快乐!全家幸福!…

查看全部问答>

把kernel从vivi向u-boot移植的时候遇到问题了!

三星提供的kernel是for vivi 的,但俺想用u-boot来引导,结果移植上去之后,u-boot是跑起来了,但是引导kernel却出问题了 看了kernel的头部的二进制数据,发现kernel的格式竟然还和bootloader的类型有关,for vivi的kernel的头就是适合vivi,不 ...…

查看全部问答>

关于wince下MySqlParameter的一个问题

private void button1_Click(object sender, EventArgs e)         {             MySqlParameter[] paramter =            &nbs ...…

查看全部问答>

问个sdram的问题

对于sdram来说,当片选(CS#)为高时,数据线和地址线处于什么状态啊?好像不是高阻态。…

查看全部问答>

关于51单片机的地址设置

本人用的87c591,调试过程中存在这样的问题 (1)将变量地址设置到0x4000和0x4003,并且将一组数组设置到0x8000为起始地址,数组长度为245,如果设置为大模式,即xdata模式,将程序烧写进eeprom之后无法正常启动,其中寄存器的设置已经更改。 (2 ...…

查看全部问答>

Stellaris® MCU 的 Cortex 微控制器软件接口标准 (CMSIS):DSP 头文件

TI新出的资料 Stellaris® MCU 的 Cortex 微控制器软件接口标准 (CMSIS):DSP 头文件…

查看全部问答>