STM32F429开发板:窗口看门狗实验


利用基本定时器TIM6,中断定时40ms喂狗,不产生复位

 

1、配置WWDG的属性


    开启 WWDG 时钟
    设置 WWDG 预分频器值
    设置 WWDG 窗口值(这里设置成80)
    启用 WWDG 并加载计数器值(这里设置成127)

/*
 *--------WWDG初始化--------
 * Prescaler:预分频器值,取值可以是
 *      WWDG_Prescaler_1: WWDG counter clock = (PCLK1/4096)/1   约10968Hz    91us
 *      WWDG_Prescaler_2: WWDG counter clock = (PCLK1/4096)/2   约5484Hz	182us
 *      WWDG_Prescaler_4: WWDG counter clock = (PCLK1/4096)/4   约2742Hz	364us
 *      WWDG_Prescaler_8: WWDG counter clock = (PCLK1/4096)/8   约1371Hz	728us
 *
 * Counter :递减计时器的值, 取值范围为: 0x7f~0x40。一般取最大值0x7f
 *
 * WindowValue :窗口值,取值范围为: 0x7f~0x40。最小值0x40到窗口值之间的时间内有喂狗,就不会产生复位。
 *
 *
 *			例: Counter = 127(0x7f)  (计数器最大值)
 *               WindowValue = 80(0x50)(用户定义的窗口上限值)  
 *               Prescaler =  WWDG_Prescaler_8(预分频器值)
 *
 *			728 us * (127-80) = 34216 us = 34.2ms < 刷新窗口,不产生复位 < 728 us * 64(内部下窗口的临界值,不变) = 46.6ms
 *			1、在34.2ms前喂狗,系统会复位。
 *          2、在46.6ms后无论怎样,系统都会复位。
 *			3、在34.2ms - 46.6ms之间,喂狗,刷新计数器值,重新开始计数,系统不会复位。
 */
void WWDG_Init(uint8_t Counter, uint8_t WindowValue, uint32_t Prescaler)
{
    /* 开启 WWDG 时钟 */ 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
    
    /* 设置 WWDG 预分频器值 */
    WWDG_SetPrescaler(Prescaler);
    /* 设置 WWDG 窗口值 */
    WWDG_SetWindowValue(WindowValue);
    /* 启用 WWDG 并加载计数器值 */
    WWDG_Enable(Counter);
}

2、喂狗操作


    启用 WWDG 并加载计数器值

/* 喂狗,防止WWDG复位 */ 
void WWDG_Feed(void)
{
    /* 启用 WWDG 并加载计数器值 */
    WWDG_SetCounter(UserCounter);    
}

3、配置TIM6的模式

    开启TIM6的时钟

    累计 TIM_Period个后产生一个更新或者中断。当定时器从0计数到399,即为400次,为一个定时周期
    定时器时钟源TIMxCLK = 2 * PCLK1  
                    PCLK1 = HCLK / 4 
                    => TIMxCLK=HCLK/2=SystemCoreClock/2=90MHz
    设定定时器频率为=TIMxCLK/(TIM_Prescaler+1)=10000Hz
    初始化定时器TIM6
    
    清除定时器更新中断标志位
    开启定时器更新中断

    使能定时器

    

void TIMx_Mode_Init(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    // 开启TIMx_CLK,x[6,7] 
    RCC_APB1PeriphClockCmd(BASIC_TIM6_CLK, ENABLE); 

    /* 累计 TIM_Period个后产生一个更新或者中断*/		
    //当定时器从0计数到4999,即为5000次,为一个定时周期
    TIM_TimeBaseStructure.TIM_Period = 400-1;       

    //定时器时钟源TIMxCLK = 2 * PCLK1  
    //				PCLK1 = HCLK / 4 
    //				=> TIMxCLK=HCLK/2=SystemCoreClock/2=90MHz
    // 设定定时器频率为=TIMxCLK/(TIM_Prescaler+1)=10000Hz
    TIM_TimeBaseStructure.TIM_Prescaler = 9000-1;	

    // 初始化定时器TIMx, x[2,3,4,5]
    TIM_TimeBaseInit(BASIC_TIM6, &TIM_TimeBaseStructure);


    // 清除定时器更新中断标志位
    TIM_ClearFlag(BASIC_TIM6, TIM_FLAG_Update);

    // 开启定时器更新中断
    TIM_ITConfig(BASIC_TIM6,TIM_IT_Update,ENABLE);

    // 使能定时器
    TIM_Cmd(BASIC_TIM6, ENABLE);	
}


4、配置TIM6的中断模式

    设置中断组为2
    设置中断来源TIM6_DAC_IRQn
    设置抢占优先级2
    设置子优先级2
    启用NVIC_IRQChannel中定义的IRQ通道

void TIMx_NVIC_Init(void)
{
    NVIC_InitTypeDef NVIC_InitStructure; 

    //设置中断组为2
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);		
	//设置中断来源TIM6_DAC_IRQn
    NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn; 	
    //设置抢占优先级2
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;	 
	//设置子优先级2
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;	
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

5、TIM6中断服务函数


    检查TIM中断是否发生
        LED电平反转
        喂狗
        清除TIMx的中断挂起位

void TIM6_DAC_IRQHandler(void)
{
	if(TIM_GetITStatus(BASIC_TIM6, TIM_IT_Update) != RESET ) 
	{	
		LEDR_TOGGLE;
        WWDG_Feed();
		TIM_ClearITPendingBit(BASIC_TIM6 , TIM_IT_Update);  		 
	}		 	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
普中STM32F429开发板是一款采用意法半导体STM32F429IGT6微控制器的开发板,适用于嵌入式系统开发和学习。该开发板具有丰富的外设和功能,适合初学者和专业开发者使用。 首先,STM32F429IGT6微控制器是基于ARM Cortex-M4内核的高性能微控制器,主频为180MHz,具有强大的计算能力和丰富的外设,如GPIO、USART、SPI、I2C、CAN等,可以满足各种应用的需求。 其次,普中STM32F429开发板提供了丰富的外部接口,包括USB、以太网、SD卡、液晶显示屏等,方便用户与外部设备进行通信和控制。开发板还配备了按键、LED灯和蜂鸣器等常用组件,方便用户进行实验和调试。 另外,普中STM32F429开发板支持多种开发软件和编程语言,如Keil MDK、IAR Embedded Workbench、STM32CubeIDE等。开发者可以根据自己的喜好和需求选择合适的开发环境,进行程序编写、调试和下载。 最后,普中STM32F429开发板具有良好的扩展性和稳定性,通过板载的JTAG/SWD调试接口,开发者可以连接外部模块和传感器,扩展更多的功能和应用。同时,开发板的优质设计和电源管理模块,保证了系统的稳定运行和高效能耗控制。 总的来说,普中STM32F429开发板具有强大的性能和丰富的外设,方便用户进行嵌入式系统开发和学习。无论是初学者还是专业开发者,都可以通过该开发板实现自己的创意和项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值