您的位置:首页 > 其它

STM8|STM32 看门狗使用

2016-08-22 15:46 204 查看
源:STM8|STM32 看门狗使用

STM8和STM32都配备了独立看门狗,其作用之大不言而喻。以下为STM8及STM32的独立看门狗使用例:

对于STM32单片机:

#define SYS_IWDG_OPEN        IWDG->KR=0xCCCC;
#define SYS_IWDG_FEED        IWDG->KR=0xAAAA;

void SystemIWDG_Config(uint32 OverTime)
{
RCC->CSR|=RCC_CSR_LSION;
while((RCC->CSR&RCC_CSR_LSIRDY)==0);
IWDG->KR=0x5555;            //使能模块访问
while(IWDG->SR&IWDG_SR_PVU);
IWDG->PR=0x0006;            //256分频 40000/256=156HZ T=6.4ms
while(IWDG->SR&IWDG_SR_RVU);
IWDG->RLR=(OverTime*10)>>6;        //溢出时间
IWDG->KR=0xAAAA;            //装载IWDG->RLR
}


对于STM8单片机:

#define SYS_IWDG_OPEN        IWDG_KR=0xCC;
#define SYS_IWDG_FEED        IWDG_KR=0xAA;

<pre class="cpp" name="code">void SystemIWDG_Config(void)
{
CLK_ICKCR|=S3;
while((CLK_ICKCR&S4)==0);
//STM8单片机需先执行0xCC指令,即先打开IWDG模块,否则IWDG工作不正常
IWDG_KR=0xCC;                //启动看门狗
IWDG_KR=0x55;                //使能模块访问
IWDG_RLR=0xFF;                //溢出时间
IWDG_PR=0x06;                //256分频 38000/256=148HZ T=6.7ms
IWDG_KR=0xAA;                                        //装载IWDG->RLR
}


使用:先在主程序中打开看门狗,在主循环或任务中喂狗,但千万别在中断中喂狗。

void main()
{
......
SYS_IWDG_OPEN
......
while(1){
......
SYS_IWDG_FEED
------
}
}


操作系统OS中喂狗一般安排在最高优先级任务中,并且保证此线程不断循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: