单片机学习小组
直播中

李军

7年用户 1180经验值
私信 关注

如何去实现设置IWDG一秒让STM32复位一次的设计呢

如何去实现设置IWDG一秒让STM32复位一次的设计呢?如何对其进行仿真呢?

回帖(1)

孙榕

2022-1-17 09:51:20
(5)Proteus 8.9上的STM32仿真系列(HAL)—独立看门狗IWDG

**大坑提示:**后续做了窗口看门狗WWDG的仿真,无论喂不喂狗都会Reset,在板子上烧了程序正常,大家可以跳过这个坑,毕竟proteus仿真个别地方还是有点问题的。之前8.6的uart2无输出,tim3好像也有问题,8.9我还没试,大家如果遇到类似的问题可以跳过,有条件的这部分可以在实物上做实验。
**实验设计:**设置IWDG 一秒让STM32复位一次,但是按键PA0每按一次就重置这个时间,芯片就不会复位。是否复位观察PA1上接的LED,复位时的电平变化会导致LED闪烁一次。
一、Proteus配置
1.如图放置元件,芯片仍为STM32 F103R6TX。

二、CUBEMAX IDE配置
1.老样子开启RCC配置时钟。
2.配置PA0输入,PA1输出

3.开启IWDG,如图配置参数
复位时间=(Prescaler x Reload)/LSI频率
此处是(32 x 1250)/40k=1秒

4.生成代码后如下在main里插入

int main(void)
{
  /* USER CODE BEGIN 1 */


  /* USER CODE END 1 */
  


  /* MCU Configuration--------------------------------------------------------*/


  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();


  /* USER CODE BEGIN Init */


  /* USER CODE END Init */


  /* Configure the system clock */
  SystemClock_Config();


  /* USER CODE BEGIN SysInit */


  /* USER CODE END SysInit */


  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_IWDG_Init();
  /* USER CODE BEGIN 2 */
  //点亮PA1的LED,每次复位的时候会灭一下
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
  /* USER CODE END 2 */


  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
          HAL_Delay(5);//不延时按按钮多了容易报错卡住
          //检测按钮是否按下,按下了就重新填充计时
          if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)==GPIO_PIN_SET)
                  HAL_IWDG_Refresh(&hiwdg);
    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

三、仿真
1.不按按钮,应该是一秒左右复位一次
2.连续点击按钮,不断刷新看门狗
应该是1秒左右复位一次,但仿真是1-4秒才复位一次,虽然LSI不是很准,但这也太飘了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分