完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
窗口看门狗
1. 窗口看门狗简介 窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障;除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位,在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值被刷新,也将产生一个MCU复位。因此递减计数器需要在一个有限的时间窗口中被刷新,其主要特性有: 可编程的自由运行递减计算器 条件复位:当递减计数器的值小于0x40,则产生复位;当递减计数器在窗口外被重新装载,则产生复位 如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可用于重新装载计数器以避免WWDG复位 看门狗框图 窗口看门狗时序图 上图中,T[6:0]就是窗口看门狗的计数器,W[6:0]是窗口看门狗的上窗口、下窗口是固定值(0x40) WWDG计数器的频率为:PCLK1/(4096 * 计数器预分频值),由于PCLK1时钟频率过高因此除以4096 WWDG超时时间:(4096 * 计数器预分频值)*(T[5:0]+1)/PCLK1,此处T[5:0]+1即为T[6:0]-0x3F 2. 硬件设计 使用USART1来打印调试信息,PC0用来指示程序是否复位 3. 软件设计 3.1 STM32CubeMX设置 RCC设置外接HSE,时钟设置为72M;WWDG的时钟挂载在APB1上 PC0设置为GPIO推挽输出模式、上拉、高速、默认输出电平为高电平 USART1选择为异步通讯方式,波特率设置为115200Bits/s,传输数据长度为8Bit,无奇偶校验,1位停止位 激活WWDG,计数器预分频值设为8,窗口寄存器设为W[6:0] = 0x5A,递减计数器刷新值设置为T[6:0] = 0x7F;根据公式算出超时时间为 (4096 * 8)*(127-63)/ 36MHz = 53.8ms;使能EWI中断,在NVIC设置中开启窗口看门狗中断 输入工程名,选择工程路径(不要有中文),选择MDK-ARM V5;勾选Generated periphera initialization as a pair of ‘.c/.h’ files per IP ;点击GENERATE CODE,生成工程代码 3.2 MDK-ARM编程 在wwdg.c文件中可以看到窗口看门狗的初始化函数 void MX_WWDG_Init(void){ hwwdg.Instance = WWDG; hwwdg.Init.Prescaler = WWDG_PRESCALER_8; hwwdg.Init.Window = 0x5a; hwwdg.Init.Counter = 0x7f; hwwdg.Init.EWIMode = WWDG_EWI_ENABLE; if (HAL_WWDG_Init(&hwwdg) != HAL_OK){ Error_Handler(); } } 找到弱符号早期唤醒中断函数原型,并在wwdg.c中自定义该回调函数 __weak void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg) void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg){ HAL_WWDG_Refresh(hwwdg); //在早期唤醒中断函数中喂狗 } 在main函数中编写代码,早期唤醒中断函数中喂狗成功,则while循环里每1s打印一次 int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); MX_WWDG_Init(); /* USER CODE BEGIN 2 */ printf(“rn***** AndyXi WWDG test program *****rn”); HAL_Delay(10); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET); /* USER CODE END 2 */ while (1){ printf(“rnHello WWDG.。。rn”); HAL_Delay(10); } } 4. 下载验证 早期唤醒中断函数中喂狗成功,则程序不会被复位,while循环里每1s打印一次信息,LED1常亮 如果注释掉早期唤醒中断函数中的喂狗函数,则程序会一直被复位,LED1闪烁。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1632 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1559 浏览 1 评论
985 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1605 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
653浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
523浏览 3评论
540浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
510浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 16:08 , Processed in 0.610297 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号