*****独立看门狗总结实验

1、看门狗定时计算

看门狗的喂狗时间(也就是看门狗溢 出时间)的计算方式为:
Tout=((4×2^prer) ×rlr) /32
其中 Tout 为看门狗溢出时间(单位为 ms)。
prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7。
rlr 为看门狗的重装载值(IWDG_RLR 的值)。
cubmax就主要是配置这两个值。
在这里插入图片描述
在这里插入图片描述

2、制造一个 Hard-Fault

产生 hard fault 方法:
对不可访问的内存地址进行写操作
uint32_t *addr = (uint32_t *)0x20100000;
*addr = 0x12;

3、实验现象一(采用原子f429阿波罗)

不初始化看门狗,也不喂狗

led灯常亮,程序跑死在Hard-Fault错误处。

int main(void)
{
uint32_t *addr = (uint32_t *)0x20100000;

HAL_Init();                    	 	//初始化HAL库   
Stm32_Clock_Init(360,25,2,8);   	//设置时钟,180Mhz
delay_init(180);                	//初始化延时函数
uart_init(115200);              	//初始化USART
LED_Init();                     	//初始化LED 
KEY_Init();                     	//初始化按键
delay_ms(100);                  	//延时100ms再初始化看门狗,LED0的变化"可见"
IWDG_Init(IWDG_PRESCALER_64,2500);  	//分频数为64,重载值为500,溢出时间为1s	
LED0=!LED0;
while(1)
{

// if(KEY_Scan(0)==WKUP_PRES) //如果WK_UP按下,喂狗
{
IWDG_Feed(); //喂狗
prinf()//可以加个打印
}
*addr = 0x12;
delay_ms(10);
}
}
在这里插入图片描述

始化看门狗,及喂狗

隔了5s,常亮的LED灯闪烁了一下,程序复位,跳出了while循环,执行了一次 LED0=!LED0;
思考:自己的tongxindu工装,定时6s,如果超时了,设置一个看门狗复位一下,将速度变到5500rpm
工装程序配置好后,不喂狗也进行了复位,晚上有说法是:
MX_IWDG_Init();
__HAL_IWDG_START(&hiwdg);
在这里插入图片描述
注意事项:
1、网上有说:只能在主函数中喂狗,也不能在中断中喂狗。项目中的也是在main中的while中不停的喂狗(不然就会导致软件复位)。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值