STM32 HAL庫之WDG示例代碼

獨立看門狗(IWDG)

在規定時間內按按鍵喂狗并將LED關閉,若產生看門狗復位則LED打開

初始化獨立看門狗,在main.c中的?MX_IWDG_Init();,也就是iwdg.c中的初始化代碼

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_32;hiwdg.Init.Reload = 3749;if (HAL_IWDG_Init(&hiwdg) != HAL_OK){Error_Handler();}/* USER CODE BEGIN IWDG_Init 2 *//* USER CODE END IWDG_Init 2 */}

檢查是否設置RCC標志,獲取看門狗是否復位標志,在?stm32f1xx_hal_rcc.h 文件中

/** @brief  Check RCC flag is set or not.* @param  __FLAG__ specifies the flag to check.*          This parameter can be one of the following values:*            @arg @ref RCC_FLAG_HSIRDY HSI oscillator clock ready.*            @arg @ref RCC_FLAG_HSERDY HSE oscillator clock ready.*            @arg @ref RCC_FLAG_PLLRDY Main PLL clock ready.@if STM32F105xx*            @arg @ref RCC_FLAG_PLL2RDY Main PLL2 clock ready.*            @arg @ref RCC_FLAG_PLLI2SRDY Main PLLI2S clock ready.@elsif STM32F107xx*            @arg @ref RCC_FLAG_PLL2RDY Main PLL2 clock ready.*            @arg @ref RCC_FLAG_PLLI2SRDY Main PLLI2S clock ready.@endif*            @arg @ref RCC_FLAG_LSERDY LSE oscillator clock ready.*            @arg @ref RCC_FLAG_LSIRDY LSI oscillator clock ready.*            @arg @ref RCC_FLAG_PINRST  Pin reset.*            @arg @ref RCC_FLAG_PORRST  POR/PDR reset.*            @arg @ref RCC_FLAG_SFTRST  Software reset.*            @arg @ref RCC_FLAG_IWDGRST Independent Watchdog reset.*            @arg @ref RCC_FLAG_WWDGRST Window Watchdog reset.*            @arg @ref RCC_FLAG_LPWRRST Low Power reset.* @retval The new state of __FLAG__ (TRUE or FALSE).*/
#define __HAL_RCC_GET_FLAG(__FLAG__) (((((__FLAG__) >> 5U) == CR_REG_INDEX)?   RCC->CR   : \((((__FLAG__) >> 5U) == BDCR_REG_INDEX)? RCC->BDCR : \RCC->CSR)) & (1U << ((__FLAG__) & RCC_FLAG_MASK)))

stm32f1xx_hal.h中,獲取系統時間戳

uint32_t HAL_GetTick(void);

喂狗函數在?stm32f1xx_hal_iwdg.h 中

/* I/O operation functions ****************************************************/
HAL_StatusTypeDef     HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg);

業務邏輯代碼,按鍵觸發中斷,中斷中喂狗,喂狗關閉LED燈,看門狗觸發復位打開LED燈

Kye_EXTI.c

#include "stm32f1xx_hal.h"extern IWDG_HandleTypeDef hiwdg;
static uint32_t lastInterruptTime = 0;
#define DEBOUNCE_DELAY 10 // 消抖時間(ms)
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if (GPIO_Pin == GPIO_PIN_4){uint32_t currentTime = HAL_GetTick();// 檢查是否在消抖時間內if ((currentTime - lastInterruptTime) >= DEBOUNCE_DELAY){if (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4) == GPIO_PIN_RESET){HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);HAL_IWDG_Refresh(&hiwdg);}lastInterruptTime = currentTime;}}
}

main.c

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2025 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "iwdg.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @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 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST)){// 如果是看門狗復位,則翻轉LEDHAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);// 清除復位標志__HAL_RCC_CLEAR_RESET_FLAGS();}while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.LSIState = RCC_LSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79506.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79506.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79506.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【第47節】windows程序的其他反調試手段下篇

目錄 一、利用Hardware Breakpoints Detection 二、PatchingDetection - CodeChecksumCalculation 補丁檢測&#xff0c;代碼檢驗和 三、block input 封鎖鍵盤、鼠標輸入 四、使用EnableWindow 禁用窗口 五、利用ThreadHideFromDebugger 六、使用Disabling Breakpoints 禁…

【筆記ing】AI大模型-03深度學習基礎理論

神經網絡&#xff1a;A neural network is a network or circuit of neurons,or in a modern sense,an artificial neural network,composed of artificial neurons or nodes.神經網絡是神經元的網絡或回路&#xff0c;或者在現在意義上來說&#xff0c;是一個由人工神經元或節…

基于Djiango實現中藥材數據分析與可視化系統

中藥材數據分析與可視化系統 項目截圖 登錄 注冊 首頁 藥材Top20 藥材價格 產地占比 歷史價格 新聞資訊 后臺管理 一、項目概述 中藥材數據分析與可視化系統是一個基于Django框架開發的專業Web應用&#xff0c;致力于對各類中藥材數據進行全面、系統的采集、分析和可視化展示…

【AI飛】AutoIT入門七(實戰):python操控autoit解決csf視頻批量轉換(有點難,AI都不會)

背景&#xff1a; 終極目標&#xff1a;通過python調用大模型&#xff0c;獲得結果&#xff0c;然后根據返回信息&#xff0c;控制AutoIT操作電腦軟件&#xff0c;執行具體工作。讓AI更具有執行力。 已完成部分&#xff1a; 關于python調用大模型的&#xff0c;可以參考之前的…

leetcode 188. Best Time to Buy and Sell Stock IV

目錄 題目描述 第一步&#xff0c;明確并理解dp數組及下標的含義 第二步&#xff0c;分析明確并理解遞推公式 1.求dp[i][j].holding 2.求dp[i][j].sold 第三步&#xff0c;理解dp數組如何初始化 第四步&#xff0c;理解遍歷順序 代碼 題目描述 這道題把第123題推廣為一…

【筆記】【C++】【基礎語法】作用域(scope)、持續時間(duration)和鏈接(linkage)

【筆記】【C】【基礎語法】作用域&#xff08;scope&#xff09;、持續時間&#xff08;duration&#xff09;和鏈接&#xff08;linkage&#xff09; 最近正在復習學習C&#xff08;查漏補缺ing&#xff09;。記錄一下學習所得。希望能將所學都整理成一系列的筆記和博客。優先…

Yarn的安裝及環境配置

### Yarn 安裝教程及環境配置步驟 #### 1. 檢查 Node.js 是否已安裝 在安裝 Yarn 前&#xff0c;需確認系統中已經安裝了 Node.js。可以通過以下命令驗證其是否存在并獲取版本號&#xff1a; bash node -v 如果未安裝&#xff0c;則需要先完成 Node.js 的安裝。 --- #### 2…

day2-小白學習JAVA---java第一個程序

java第一個程序 1、新建一個文件&#xff0c;以.java為結尾2、用編輯器打開后寫入代碼&#xff08;本人寫前端&#xff0c;所以用vscode&#xff0c;也可用其他&#xff09;3、編譯文件4、運行文件5、HelloWorld代碼解釋6、文檔注釋 1、新建一個文件&#xff0c;以.java為結尾 …

docker部署springboot(eureka server)項目

打jar包 使用maven&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>17</source><target>17&…

解讀《人工智能指數報告 2025》:洞察 AI 發展新態勢

美國斯坦福大學 “以人為本人工智能研究院”&#xff08;HAI&#xff09;近日發布的第八版《人工智能指數報告》&#xff08;AI Index Report 2025&#xff09;備受全球矚目。自 2017 年首次發布以來&#xff0c;該報告一直為政策制定者、研究人員、企業高管和公眾提供準確、嚴…

OpenGauss 數據庫介紹

OpenGauss 數據庫介紹 OpenGauss 是華為基于 PostgreSQL 開發的企業級開源關系型數據庫&#xff0c;現已成為開放原子開源基金會的項目。以下是 OpenGauss 的詳細介紹&#xff1a; 一 核心特性 1.1 架構設計亮點 特性說明優勢多核并行NUMA感知架構充分利用現代CPU多核性能行…

使用Trae CN分析項目架構

架構分析后的截圖 A區是打開的項目、B區是源碼區、C區是AI給出當前項目的架構分析結果。 如何用 Trae CN 快速學習 STM32 嵌入式項目架構 在嵌入式開發領域&#xff0c;快速理解現有項目的架構是一項關鍵技能。Trae CN 作為一款強大的分析工具&#xff0c;能幫助開發者高效剖…

MCP協議量子加密實踐:基于QKD的下一代安全通信(2025深度解析版)

一、量子計算威脅的范式轉移與MCP協議改造必要性 1.1 傳統加密體系的崩塌時間表 根據IBM 2025年量子威脅評估報告&#xff0c;當量子計算機達到4000個邏輯量子比特時&#xff08;預計2028年實現&#xff09;&#xff0c;現有非對稱加密體系將在72小時內被完全破解。工業物聯網…

STM32單片機入門學習——第40節: [11-5] 硬件SPI讀寫W25Q64

寫這個文章是用來學習的,記錄一下我的學習過程。希望我能一直堅持下去,我只是一個小白,只是想好好學習,我知道這會很難&#xff0c;但我還是想去做&#xff01; 本文寫于&#xff1a;2025.04.18 STM32開發板學習——第一節&#xff1a; [1-1]課程簡介第40節: [11-5] 硬件SPI讀…

Model Context Protocol (MCP) 開放協議對醫療多模態數據整合的分析路徑【附代碼】

Model Context Protocol (MCP) 作為一種革命性的開放協議,正在重塑醫療領域多模態數據整合的方式。本文將深入分析MCP協議在醫療多模態數據整合中的具體路徑、技術實現、應用場景及未來發展方向,揭示這一協議如何成為連接AI與醫療數據的關鍵橋梁。 MCP協議概述及其在醫療多模…

刀片服務器的散熱構造方式

刀片服務器的散熱構造是其高密度、高性能設計的核心挑戰之一。其散熱系統需在有限空間內高效處理多個刀片模塊產生的集中熱量,同時兼顧能耗、噪音和可靠性。以下從模塊化架構、核心散熱技術、典型方案對比、廠商差異及未來趨勢等方面展開分析: 一、模塊化散熱架構 刀片服務器…

java 排序算法-快速排序

快速排序&#xff08;Quick Sort&#xff09;是一種高效的排序算法&#xff0c;它使用分治法&#xff08;Divide and Conquer&#xff09;策略來把一個序列分為較小和較大的兩個子序列&#xff0c;然后遞歸地排序兩個子序列。 快速排序算法的基本思想&#xff1a; 選擇基準值&…

Linux工具學習之【vim】

&#x1f4d6;vim 基本用法 要想學會 vim 先要學會進入與退出它 &#x1f4c3;進入 vim 首先要保證自己的 Linux 中已經安裝好了 vim &#xff08;云服務器大多數都是出廠就安裝好了&#xff09;&#xff0c;如果沒有安裝&#xff0c;需要在 root 用戶下通過指令 yum instal…

win11系統截圖的幾種方式

在 Windows 11 中&#xff0c;系統內置的截圖功能已全面升級&#xff0c;不僅支持多種截圖模式&#xff0c;還整合了錄屏、OCR 文字識別和 AI 增強編輯等功能。以下是從基礎操作到高階技巧的完整指南&#xff1a; 一、快捷鍵截圖&#xff08;效率首選&#xff09; 1. Win Sh…

寫論文時降AIGC和降重的一些注意事項

‘ 寫一些研究成果&#xff0c;英文不是很好&#xff0c;用有道翻譯過來句子很簡單&#xff0c;句型很單一。那么你會考慮用ai嗎&#xff1f; 如果語句太正式&#xff0c;高級&#xff0c;會被誤判成aigc &#xff0c;慎重選擇ai潤色。 有的話就算沒有用ai生成&#xff0c;但…