历史上的今天
今天是:2024年12月19日(星期四)
2020年12月19日 | 神舟IV学习笔记(十二)IWDG独立看门狗
2020-12-19 来源:eefocus
看门狗这个词非常形象,如果你不定时给它骨头吃,它就会汪汪叫。STM32当中写入IWDG_KR寄存器值为0XAAAA,就相当喂骨头给狗吃。如果你超时没有喂狗,后果非常严重,狗就会要咬主人啦(也就是单片机复位)。
IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。
我们今天就实现这样一个功能,当按下KEY1键,执行喂狗程序。采用LED1指示复位情况。当配置看门狗后,LED1 将常亮,如果 KEY1按键按下,就喂狗,只要 KEY1不停的按,看门狗就一直不会产生复位。只要超过看门狗定时时间还没按,那么将会导致程序重启,而 LED1也会熄灭。

程序代码:
int main(void)
{
/* Setup STM32 system (clock, PLL and Flash configuration) */
SystemInit();
/* Add your application code here
*/
LED_Configuration();
KEY_Configuration();
/* Enable write access to IWDG_PR and IWDG_RLR registers */
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
/* IWDG counter clock: 40KHz(LSI) / 64 = 0.244 KHz */
IWDG_SetPrescaler(IWDG_Prescaler_64);
/* Set counter reload value to 625 */
IWDG_SetReload(625);//40KHZ/64*625=1S 溢出时间为 1s
/* Reload IWDG counter */
IWDG_ReloadCounter();
/* Enable IWDG (the LSI oscillator will be enabled by hardware) */
IWDG_Enable();
/* Infinite loop */
delay_ms(300); //让人看得到灭
LED1_ON();
while (1)
{
if(Read_key1())
/* Reload IWDG counter */
IWDG_ReloadCounter();
}
}
史海拾趣
|
布线中除环路最小化原则外,还有一个环路的变化最小化原则,这个原则对于减小DC-DC的地弹意义重大。 ADI对此有一篇文章专门对此进行了详细的说明。非常值得EE们参考。… 查看全部问答> |
|
编译内核时出错: scripts/kallsyms: /lib/tls/libc.so.6: version `GLIBC_2.4\' not found (required by scripts/kallsyms) make: *** [.tmp_kallsyms1.S] Error 1 请球高手解答!!谢谢… 查看全部问答> |
|
最近要把原来写过的IDE接口的硬盘读写程序改成SATA的,用到1F0~1F7和3F6~3F7这些I/O映射地址对硬盘控制芯片的寄存器进行寻址,现在我需要知道用SATA接口时,这些I/O地址应该是什么,只要知道对SATA操作的I/O端口地址就能解决所有问题了,请 ...… 查看全部问答> |
|
高级软件工程师 职责: 系统底层软件的开发; 参与系统需求分析和设计; 职位要求: 1.要求本科以上的计算机相关专业,有丰富开发经验; 2.三年以上的软件开发经验,良好的软件编程习惯; 3.具有两年以上的系统内核程序的开发经验,熟 ...… 查看全部问答> |
|
本人初学wince,请教大虾们一个问题。 本人使用的是S3c2440,wince5.0,800x600的LCD。 因为屏幕过大,wince的显示看起来已经较慢。 因为客户的要求,开发软件需要保持与pc机版本的界面一致。导致程序中需要在一个界面上绘制上百个控件,可以看 ...… 查看全部问答> |




