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

1、看门狗定时计算

看门狗的喂狗时间(也就是看门狗溢 出时间)的计算方式为:
Tout=((4×2^prer) ×rlr) /32
其中 Tout 为看门狗溢出时间(单位为 ms)。
prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7。
rlr 为看门狗的重装载值(IWDG_RLR 的值)。
cubmax就主要是配置这两个值。
*****独立看门狗总结实验_第1张图片
*****独立看门狗总结实验_第2张图片

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);
}
}
*****独立看门狗总结实验_第3张图片

始化看门狗,及喂狗

隔了5s,常亮的LED灯闪烁了一下,程序复位,跳出了while循环,执行了一次 LED0=!LED0;
思考:自己的tongxindu工装,定时6s,如果超时了,设置一个看门狗复位一下,将速度变到5500rpm
工装程序配置好后,不喂狗也进行了复位,晚上有说法是:
MX_IWDG_Init();
__HAL_IWDG_START(&hiwdg);
*****独立看门狗总结实验_第4张图片

你可能感兴趣的:(单片机,总结zy总结,stm32)