第二部分 基础实验
本实验基于STM32CubeMX实现对STM32开发板的配置,实验效果将是开发板上的 LED 将保持闪烁(看门狗时间溢出,系统不断重置),当按键被按下时,看门狗计数器重装载值更新(即所谓的“喂狗”),系统将不会重置,LED 状态保持。当按键被松开时,看门狗计数器不断递减,若重装载值无更新,则系统再次发生重置。
1. 软件与硬件
1.1 硬件要求
(1)ALIENTEK ELITE STM32F103 开发板 (STM32F103ZET6 芯片)
(2)USB转TTL 模块
1.2 软件要求
(1)Java Runtime Environment (JRE) 1.8.0 版本
(2)STM32CubeMX 5.6.1 版本
(3)IAR Embedded Workbench 8.0
(4)串口调试工具
2. STM32CubeMX配置开发板
其他具体配置参考基于STM32CubeMX 实现串口通信控制 LED 和蜂鸣器,无需配置蜂鸣器,但需要开启 IWDG
3. 程序代码
3.1 usart.c
实现printf的重定向
/* USER CODE BEGIN 0 */ /*******************************************************************@brief Retargets the C library printf function to the USART.*@param None *@retval None******************************************************************/#include “stdio.h” #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int _io_putchar(int ch)#else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endif /* __GNUC__*/ PUTCHAR_PROTOTYPE{ HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF); return ch;}/* USER CODE END 0 */
3.2 main.c
(1)添加头文件
/* Private includes ----------------------------------------------------------*//* USER CODE BEGIN Includes */#include 《stdio.h》#include 《string.h》/* USER CODE END Includes */
(2)宏定义
/* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD */#define KEY0_PRESS HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4) == GPIO_PIN_RESET#define KEY1_PRESS HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3) == GPIO_PIN_RESET/* USER CODE END PD */
(3)程序主体
/* USER CODE BEGIN 2 */ printf(“nr***** No Feed Dog *****nr”); printf(“nr***** System Reset *****nr”); HAL_Delay(100); HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5); HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(KEY1_PRESS || KEY0_PRESS) { HAL_IWDG_Refresh(&hiwdg); printf(“nr***** Feed Dog *****nr”); } HAL_Delay(10); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */}
4. 程序分析
4.1 主要功能
(1)没有喂狗,LED闪烁
(2)完成喂狗,LED状态保持
4.2 主要函数
第二部分 基础实验
本实验基于STM32CubeMX实现对STM32开发板的配置,实验效果将是开发板上的 LED 将保持闪烁(看门狗时间溢出,系统不断重置),当按键被按下时,看门狗计数器重装载值更新(即所谓的“喂狗”),系统将不会重置,LED 状态保持。当按键被松开时,看门狗计数器不断递减,若重装载值无更新,则系统再次发生重置。
1. 软件与硬件
1.1 硬件要求
(1)ALIENTEK ELITE STM32F103 开发板 (STM32F103ZET6 芯片)
(2)USB转TTL 模块
1.2 软件要求
(1)Java Runtime Environment (JRE) 1.8.0 版本
(2)STM32CubeMX 5.6.1 版本
(3)IAR Embedded Workbench 8.0
(4)串口调试工具
2. STM32CubeMX配置开发板
其他具体配置参考基于STM32CubeMX 实现串口通信控制 LED 和蜂鸣器,无需配置蜂鸣器,但需要开启 IWDG
3. 程序代码
3.1 usart.c
实现printf的重定向
/* USER CODE BEGIN 0 */ /*******************************************************************@brief Retargets the C library printf function to the USART.*@param None *@retval None******************************************************************/#include “stdio.h” #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int _io_putchar(int ch)#else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endif /* __GNUC__*/ PUTCHAR_PROTOTYPE{ HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF); return ch;}/* USER CODE END 0 */
3.2 main.c
(1)添加头文件
/* Private includes ----------------------------------------------------------*//* USER CODE BEGIN Includes */#include 《stdio.h》#include 《string.h》/* USER CODE END Includes */
(2)宏定义
/* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD */#define KEY0_PRESS HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4) == GPIO_PIN_RESET#define KEY1_PRESS HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3) == GPIO_PIN_RESET/* USER CODE END PD */
(3)程序主体
/* USER CODE BEGIN 2 */ printf(“nr***** No Feed Dog *****nr”); printf(“nr***** System Reset *****nr”); HAL_Delay(100); HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5); HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(KEY1_PRESS || KEY0_PRESS) { HAL_IWDG_Refresh(&hiwdg); printf(“nr***** Feed Dog *****nr”); } HAL_Delay(10); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */}
4. 程序分析
4.1 主要功能
(1)没有喂狗,LED闪烁
(2)完成喂狗,LED状态保持
4.2 主要函数