(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 */
}
5.设置HEX导出,build all
三、仿真
1.不按按钮,应该是一秒左右复位一次
2.连续点击按钮,不断刷新看门狗
应该是1秒左右复位一次,但仿真是1-4秒才复位一次,虽然LSI不是很准,但这也太飘了。