你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32CubeMX系列|独立看门狗

[复制链接]
STMCU 发布时间:2020-9-21 13:11
独立看门狗

1. 独立看门狗简介

看门狗其实就是一个定时器,从功能上说它可以让微控制器在程序发生意外(程序进入死循环或跑飞)的时候,能重新回复到系统刚上电状态,以保障系统出问题的时候可以重启一次。说的复杂一点,看门狗就是能让程序出问题是能重新启动系统
STM32的独立看门狗(IWDG)由内部专门的40KHz低速时钟驱动,即使主时钟发生故障,它也仍然有效。注意IWDG的时钟是一个内部RC时钟,是一个在30~60KHz之间的一个可变化的时钟,只是我们在估算的时候以40KHz的频率来计算,看门狗对时间的要求不是很精确
独立看门口功能框图如下。实际上独立看门口狗是一个递减计数器,当计时器的值减到0时,IWDG会产生一个复位信号,系统复位重新启动。为避免产生看门狗复位,则需在计数器减到0之前重载计数器,即“喂狗”。当程序出错时没有刷新计数器,计数器递减到0,系统复位重新启动,避免程序继续错误运行



1_meitu_18.jpg


独立看门狗超时时间(40KHz的输入时钟LSI)


2_meitu_19.jpg


2. 硬件设计

使用USART1来打印调试信息,PC0用来指示程序是否复位

3_meitu_20.jpg


3. 软件设计3.1 STM32CubeMX设置
  • RCC设置外接HSE,时钟设置为72M;IWDG的时钟默认为LSI时钟
  • PC0设置为GPIO推挽输出模式、上拉、高速、默认输出电平为高电平
  • USART1选择为异步通讯方式,波特率设置为115200Bits/s,传输数据长度为8Bit,无奇偶校验,1位停止位
4_meitu_21.jpg


  • 激活IWDG,IWDG的时钟为40kHz,此时设置计数器时钟为32分频,则分频后的时钟频率为1.25KHz(时钟周期为1s/1250 = 0.8ms),递减基础器重载值(down-counter reload value)配置为1000,即800ms不刷新IWDG则系统复位

5_meitu_22.jpg

  • 输入工程名,选择工程路径(不要有中文),选择MDK-ARM V5;勾选Generated periphera initialization as a pair of ‘.c/.h’ files per IP ;点击GENERATE CODE,生成工程代码



3.2 MDK-ARM编程

  1. void MX_IWDG_Init(void){
  2.   hiwdg.Instance = IWDG;
  3.   hiwdg.Init.Prescaler = IWDG_PRESCALER_32;
  4.   hiwdg.Init.Reload = 1000;
  5.   if (HAL_IWDG_Init(&hiwdg) != HAL_OK){
  6.     Error_Handler();
  7.   }
  8. }
复制代码

  • 在main函数中编写代码,while循环里每500ms喂一次狗
  1. int main(void){
  2.   HAL_Init();
  3.   SystemClock_Config();
  4.   /* Initialize all configured peripherals */
  5.   MX_GPIO_Init();
  6.   MX_IWDG_Init();
  7.   MX_USART1_UART_Init();
  8.   /* USER CODE BEGIN 2 */
  9.   printf("\r\n***** AndyXi IWDG test program *****\r\n");
  10.   HAL_Delay(300);
  11.   HAL_GPIO_WritePin(GPIOC,LED1_Pin,GPIO_PIN_RESET);
  12.   /* USER CODE END 2 */
  13.   /* USER CODE BEGIN WHILE */
  14.   while (1){
  15.         printf("\r\nRefreshes the IWDG...!\r\n");
  16.         HAL_IWDG_Refresh(&hiwdg);
  17.         HAL_Delay(500);
  18.     /* USER CODE END WHILE */
  19.   }
  20. }
复制代码



4. 下载验证
  • while循环里每500ms喂一次狗,因此程序不会被复位,LED1常亮


6_meitu_23.jpg


  • 如果注释掉while循环里的喂狗动作,程序会一直被复位,LED1闪烁




7_meitu_24.jpg








收藏 1 评论1 发布时间:2020-9-21 13:11

举报

1个回答
caoenq 回答时间:2020-9-22 08:58:42
这个看门口没有使能就启动了?

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版