目录
功能说明:芯片复位时,翻转一次LED亮灭状态,之后进入死循环进行喂狗。
一、STM32CubeMX下的图形化配置
本文以STM32F103ZET6为例。
1、配置调试下载接口、时钟源接口
2、配置看门狗外设
如图配置看门狗,定时为1秒。
- 时钟源 :40KHz(在下文时钟树中可以获取到该信息)
- 预分频系数 :16
- 递减为零后的重载数值 :2499
- 看门狗实际定时:
3、配置GPIO
为了展示有无看门狗的现象,这里额外增加一颗LED的控制。
- 高电平 = 熄灭LED
- 低电平 = 点亮LED
4、配置时钟树
4、工程基本设置
5、生成代码工程
二、Keil下的代码编辑
1、编辑main.c文件
main()中,在死循环外边添加LED翻转函数,在死循环内添加喂狗函数。
/**
* @brief The application entry point.
* @retval int
*/
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 */
HAL_Delay(900); // 延时900ms
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // 翻转LED
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_IWDG_Refresh(&hiwdg); // 喂狗
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
三、烧录运行,观察试验现象
- 取消HAL_IWDG_Refresh(&hiwdg);的注释,能够在1秒内及时喂狗,芯片不复位,LED只翻转一次。
- 打开HAL_IWDG_Refresh(&hiwdg);的注释,无法在1秒内及时喂狗,芯片常复位,LED不间断翻转。