stm32 HAL庫學習筆記6——獨立看門狗


TOC

環境

  • 開發板:stm32F407ZG EXPLORER
  • STM32CubeMX: Version 6.1.0

CubeMX設置

  • IWDG時鍾為32KHz
  • IWDG 設置

CubeMX 生成的代碼

  • main.c
    注意:hal庫中與原子標准庫demo中,關於分頻值有區別,原子標准庫中為4分頻,對應hal庫的分頻值為64
/**
  * @brief IWDG Initialization Function
  * @param None
  * @retval None
  */
static void MX_IWDG_Init(void)
{

  /* USER CODE BEGIN IWDG_Init 0 */

  /* USER CODE END IWDG_Init 0 */

  /* USER CODE BEGIN IWDG_Init 1 */

  /* USER CODE END IWDG_Init 1 */
  hiwdg.Instance = IWDG;
  hiwdg.Init.Prescaler = IWDG_PRESCALER_64;
  hiwdg.Init.Reload = 500;
  if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN IWDG_Init 2 */

  /* USER CODE END IWDG_Init 2 */

}

添加的代碼

  • 鍵值枚舉變量
/* USER CODE BEGIN PTD */
typedef enum {
    KEY_WAKEUP=0,
    KEY_0,
    KEY_1,
    KEY_2,
    KEY_NULL
}KEY_user_t;
/* USER CODE END PTD */
  • 以下代碼作用是當看門狗超時重啟時,DS0熄滅一次
  /* USER CODE BEGIN 2 */
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_RESET);
  /* USER CODE END 2 */
  • 以下代碼作用是,不停的按KEY_UP鍵 喂狗,這樣DS0就不會熄滅
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    if ( key_input == KEY_WAKEUP ) {
      HAL_IWDG_Refresh( &hiwdg );
      key_input = KEY_NULL;
    }
    /* USER CODE END WHILE */
  • 按鍵響應
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    HAL_Delay(20);
    switch (GPIO_Pin) {
        case GPIO_PIN_0:
            if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET) {
                //HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_8);
                key_input = KEY_WAKEUP;
                printf("wake up\r\n");
            }
            break;
        case GPIO_PIN_2:
......

另外: CubeMX 生成的代碼縮進為2個空格,所以為了同一可以將keil設置如下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM