【STM32】(5) 独立看门狗实验

一、实验目的

考虑到指示当前状态和喂狗等操作,我们需要2个I0口,一个用来输入喂狗信号,另外一个用来指示程序是否重启。喂狗我们采用板上的KEY_UP键来操作,而程序重启,则是通过DSO来指示的。

二、代码及分析

#define __HAL_IWDG_START(__HANDLE__)                WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_ENABLE)
IWDG_HandleTypeDef iwdg_handler;

int main(void)
{
   	
    Cache_Enable();                 //打开L1-Cache
    HAL_Init();				        //初始化HAL库
    Stm32_Clock_Init(432,25,2,9);   //设置时钟,216Mhz 
    delay_init(216);                //延时初始化
	uart_init(115200);		        //串口初始化
    LED_Init();                     //初始化LED
    KEY_Init();                  	//按键初始化
	delay_ms(100);
	iwdg_handler.Instance = IWDG;
	iwdg_handler.Init.Prescaler = IWDG_PRESCALER_64;
	iwdg_handler.Init.Reload = 500; 
	iwdg_handler.Init.Window =IWDG_WINDOW_DISABLE ;//关闭窗口功能
	HAL_IWDG_Init(&iwdg_handler);
	
	LED0(0);
    while(1)
    {
		
        if(KEY_Scan(0)==WKUP_PRES)  	//如果WK_UP按下,喂狗
        {
            HAL_IWDG_Refresh(&iwdg_handler);    			//喂狗
        }
        delay_ms(10);      
	}  
}
	

(1) 初始化看门狗:预分频系数,重装载值。
HAL_IWDG_ Init( ) ,该函数在操作PR和RLR寄存器之前会取消写保护。


(2) 启动看门狗 :#define __HAL_IWDG_START(__HANDLE__)           WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_ENABLE)
     在while循环喂狗:HALIWDG Refresh( )

复位之后LED0灭,延时0.1s后LED0亮,若超出看门后溢出时间1s,因没有喂狗,产生复位,LED0灭。即没有喂狗的情况下,LED0 1s闪烁1次。若按下KYUP进行喂狗,LED0则常亮。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值