历史上的今天
返回首页

历史上的今天

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

正在发生

2020年09月23日 | STM8s窗口看门狗

2020-09-23 来源:eefocus

看看窗口看门狗的框图

从图里看出产生复位信号有2个方式:

1 WDGCR寄存器的T6 由1变0,也就是从此寄存器的值从0x40变成0x3F会产生复位信号;

2 当寄存器WDGCR的值大于WDGWR的时候写WDGCR寄存器会产生复位信号;


解释:

WDGCR的最高位WDGA是开启看门狗的(WDGA=1开启),当然如果开启了硬件看门狗这个位就没用了。硬件看门狗在OPTION BYTES里设置。


WDGCR的低六位是计数用的从图里可以得出这个计数器的时钟是fCPU时钟分频得来的。这个分频值固定是12288,根据这个可以计算看门狗的延时时间。


WDGWR是窗口寄存器,最高位保留,低六位保存的是窗口值,从图里的逻辑图发现comparator=1 when T6:0>W6:0,意思是当WDGCR计数值大于WDGCR

且此时Write WDGCR(这个意思是软件刷新计数器的值)就会产生一个复位信号复位stm8s。当然我们不想这个事情发送。所以在写程序的时候不能在计时器的值

大于窗口寄存器设定值的时候刷新计数器的值。所以在设定这个窗口寄存器数值的时候只能设定在0x7f~0xC0之间。

 

程序:

知道窗口电子狗怎么工作那么编程就好说了,三件事:

1 设定窗口寄存器值,开启看门狗(WDGA=1),这是初始化看门狗

2 判断看门狗计数值是否小于窗口值,是就喂狗


代码如下:

  用stm8s的官方库。

  WWDG_Init(0x7f, 0x50);  //初始化

  CounterValue = (u8)WWDG->CR & 0x7F;
  if(CounterValue < WINDOW){
    WWDG_SetCounter(COUNTERINIT); //喂狗
  }


解释一下WWDG_Init这个函数体的内容是:

void WWDG_Init(uint8_t Counter, uint8_t WindowValue)
{
/* Check the parameters */
  assert_param(IS_WWDG_WINDOWLIMITVALUE_OK(WindowValue));

  WWDG->WR = WWDG_WR_RESET_VALUE;
  WWDG->CR = (uint8_t)((uint8_t)(WWDG_CR_WDGA | WWDG_CR_T6) | (uint8_t)Counter);
  WWDG->WR = (uint8_t)((uint8_t)(~WWDG_CR_WDGA) & (uint8_t)(WWDG_CR_T6 | WindowValue));
}

WWDG_SetCounter的源码是:

 

void WWDG_SetCounter(uint8_t Counter)
{

  /* Check the parameters */
  assert_param(IS_WWDG_COUNTERVALUE_OK(Counter));

  /* Write to T[6:0] bits to configure the counter value, no need to do
  a read-modify-write; writing a 0 to WDGA bit does nothing */
  WWDG->CR = (uint8_t)(Counter & (uint8_t)BIT_MASK);

}

assert_param是参数检查,其他没啥好说的。搞清楚寄存器作用就行了。其他问题暂时想不起来。哦,对了延时时间看下图:

这里说得比较清楚如果stm8用的是内部HSI 16M晶振切fCPU的分频也是0那么窗口看门狗的时钟频率就是fCPU/12288,那么一个计时周期就是12288/fCPU就是0.768ms

如果设定的窗口值是0x50,那么从0x7F数下来一算就知道了。0.768*(0x7f-0x50)。要注意这里fCPU不一定是16m(CPUDIV分频系数可以改变),如果要搞清楚stm8的时钟频率看下面这个图。这里就不做详细讨论了,以后在说。


推荐阅读

史海拾趣

Engineered Components Co公司的发展小趣事

为了确保产品质量和客户满意度,ECC建立了完善的质量管理体系。他们从原材料采购到生产、检测、包装等各个环节都制定了严格的质量标准。ECC还引入了先进的质量检测设备和方法,确保每一件产品都符合高标准的质量要求。此外,ECC还定期对员工进行质量培训,提高员工的质量意识和操作技能。这些措施使得ECC的产品在市场上赢得了良好的口碑和信誉。

DB Lectro Inc公司的发展小趣事

随着公司业务的不断拓展和市场竞争的加剧,DB Lectro Inc意识到知识产权保护的重要性。公司加强了知识产权的申请和保护工作,成功申请了一系列技术专利。同时,公司还积极参与知识产权维权行动,维护了自身的合法权益和公平竞争的市场环境。

Dow-Key Microwave Corporation公司的发展小趣事

1945年,第二次世界大战结束后不久,Dow-Key Microwave Corporation在美国成立。公司创始人凭借对射频和微波技术的深刻理解和市场需求的敏锐洞察,决定专注于射频微波开关的制造。在初创阶段,公司面临资金短缺、技术挑战和市场接受度不高等问题。然而,创始人及其团队凭借不懈的努力和创新的精神,逐渐克服了这些困难,为公司的发展奠定了坚实的基础。

Alan Industries Inc公司的发展小趣事

为了进一步提升竞争力,Alan Industries Inc.积极寻求与其他企业的战略合作。公司与多家知名供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和成本控制。同时,公司还通过并购和投资等方式,整合了产业链上下游资源,形成了完整的产业生态圈。这些战略举措使得公司在市场竞争中更具优势,实现了快速发展。

Caltron Devices Ltd公司的发展小趣事

为了进一步提升公司的竞争力和影响力,Caltron Devices Ltd公司积极实施国际化战略。公司加强与国外同行的交流与合作,引进先进的技术和管理经验,不断提升自身的创新能力。同时,Caltron还积极参加国际电子展会和论坛,展示公司的最新产品和技术成果,成功打开了全球市场的大门。

Electronic Sensor + Resistor GmbH公司的发展小趣事

Electronic Sensor + Resistor GmbH(简称ESR公司)的创立源于两位电子工程师的远见卓识。他们发现市场上对于高精度电子传感器和定制电阻器的需求日益增长,但现有产品往往无法满足特定应用的性能要求。于是,ESR公司应运而生,专注于研发和生产高性能的电子传感器和电阻器。

在创业初期,ESR公司面临着资金、技术和市场的三重挑战。但凭借其卓越的研发实力和坚持不懈的市场推广,公司逐渐在市场上树立起高品质、高可靠性的品牌形象。通过与多家知名企业的合作,ESR公司的产品逐渐获得了市场的认可。

问答坊 | AI 解惑

CF卡内容丢失, 需重新格式化后才能使用

部分几台机子出现CF卡内容被冲掉的现象, 格式化后重新分区又可以使用, 个别出现CF损坏。 可自己怎么实验就是没法模拟重现这个想象,真没头绪 CF卡使用的PXA255的自带CF控制器,Kinston 1G CF卡,OS是4.2。 大家有没有碰到过这个现象? 谢谢 …

查看全部问答>

谁有USB摄像头源代码?

个位大侠: 我是刚自学usb驱动程序,求一个usb摄像头驱动程序源码(要Linux或无操作系统)做参考! 有意者请发一份给我!不慎感激!!! 我的e_mail:tulouzhizhu@163.com…

查看全部问答>

钢筋保护层测定仪直径的检测原理?

学校的毕业设计,现在已经明白保护层的测量原理了,可是钢筋直径的时候却麻烦重重,怎么样才能得到未知直径呢?请高手不吝赐教。。。…

查看全部问答>

跪求高手解答关于gprs模块问题(在现场等高手解答)

我用的是 武汉创维特arm9s3c2410开发板 上面带的gprs模块型号为 BENQ M23 我用此模块与电脑窗口相连 一直连不通 超级终端的设置依次是:115200   8   无  1  硬件 试过其他波特率 也试过硬流控 & ...…

查看全部问答>

LQ057Q3DC12点阵液晶开发

点阵液晶开发,采用液晶:LQ057Q3DC12 。控制器采用DPK-QVTC02 。不知道怎么连清屏就搞不了,不知道需要初始化吗…

查看全部问答>

安防英才网——中国安防行业最具影响力的求职、招聘网站

关于我们 安防英才网(http://www.afjob88.com)作为一览英才网招聘网站成员,是一家从事成品监控、楼宇对讲、一卡通、防盗报警、门禁、停车场系统、智能化弱电工程、消防等企业提供人力资源服务的专业性人才网站。自创办以来,凭借专业的团队、 ...…

查看全部问答>

找不到stm32f4xx_conf.h

刚搞了一块 stm32f4 discovery, 打开它的一个工程文件, 所有的头文件声明都集中在 stm32f4xx_conf.h中声明,可是找遍所有的文件,都没看到在哪里include \"stm32f4xx_conf.h\", 这是怎么回事啊? 如果不用这个配置头文件,我自己在主程序中把要用 ...…

查看全部问答>

帮帮忙啊,为什么不能用开关实现正反转,谢谢

#include \"io430.h\" #include \"io430g2553.h\" void Rturn() {     P1DIR=BIT0+BIT2;     P2DIR=BIT0+BIT1;    //使  P1.0 P1.2 P2.0 P2.2为输出端//          &n ...…

查看全部问答>

两块32间的can通讯

一般来说,对通讯而言,都是基于某种通讯协议的,小弟我现在要做两块板子32间的can通讯,也没啥通讯协议的,想问一下,这些id,数据,或者帧格式等该怎么确定??…

查看全部问答>

fpga不做时序约束会不会出现时序违规

请教各位,如果我没有做任何的时序约束,编译通过了,是不是意味着我的寄存器没有出现时序违规,即都满足setup和hold时间,还是他即使出现了时序问题,也不会提示报错。谢谢了~~…

查看全部问答>