【stm32】HAL庫開發——CubeMX配置RTC,單片機工作模式和看門狗

目錄

?

一、CubeMX配置RTC

1.RTC實時重要一環——BKP 寄存器

2.RTC實時時鐘

2.1打開RTC并設置時間

2.2打開外部低速時鐘

2.3代碼實現:

二、單片機工作模式

1.低功耗睡眠模式(Sleep)

2.低功耗停止模式(Stop)

3.低功耗待機模式(StandBy)

三、看門狗

1.獨立看門狗

2.窗口看門狗


一、CubeMX配置RTC

1.RTC實時重要一環——BKP 寄存器

BKP寄存器簡介
BKP(Backup Registers)備份寄存器
BKP可用于存儲用戶應用程序數據。當VDD(2.03.6V)電源被切斷,他們仍然由VBAT(1.83.6V)維持供電。當系統在待機模式下被喚醒,或系統復位或電源復位時他們也不會被復位
TAMPER引腳產生的侵入事件將所有備份寄存器內容清除
RTC引腳輸出RTC校準時鐘、RTC鬧鐘脈沖或者秒脈沖
存儲RTC時鐘校準寄存器
用戶數據存儲容量:
20字節(中容量和小容量)/ 84字節(大容量和互聯型)

小實驗將要實現的現象:單片機掉電后,不會遺忘BKP寄存器中的數值!

硬件連接:(需要額外供電給VB引腳)

第一次先寫:

HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,100);
uint32_t Ret= HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1);//斷電后靠VBAT供電

OLED_ShowNum(0, 0, Ret, 4, 12);

運行后,第二次注釋掉HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,100);并且把單片機供電拔了,繼續運行,按道理說,這個Ret數值就會隨著單片機斷電變成0,但是當VDD電源被切斷,他仍然由VBAT維持供電!所以數值會維持不變!

CubeMX配置簡單使用BKP寄存器:

BKP 寄存器通常與 RTC 一起使用,在CubeIDE中假如需要使用BKP寄存器,需要先打開RTC

代碼實現:

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_I2C2_Init();MX_RTC_Init();/* USER CODE BEGIN 2 */OLED_Init();//OLED初始化OLED_CLS();//	HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,100);//寫BKPuint32_t Ret= HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1);//斷電后靠VBAT供電。讀BKPOLED_ShowNum(0, 0, Ret, 4, 12);//顯示數值/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

2.RTC實時時鐘

CubeMX配置:

2.1打開RTC并設置時間

2.2打開外部低速時鐘

配置RTC時鐘源為LSE外部低速時鐘

2.3代碼實現:

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_RTC_Init();MX_I2C2_Init();/* USER CODE BEGIN 2 */RTC_TimeTypeDef RTC_Time ;//時分秒RTC_DateTypeDef RTC_Date; //年月日OLED_Init();OLED_CLS();OLED_ShowStr(0, 0, "Data:20  -   -", 2);OLED_ShowStr(0, 2, "Time:", 2);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_RTC_GetDate(&hrtc, &RTC_Date, RTC_FORMAT_BIN);HAL_RTC_GetTime(&hrtc,&RTC_Time, RTC_FORMAT_BIN);OLED_ShowNum(57, 0, RTC_Date.Year, 2, 16);OLED_ShowNum(78, 0, RTC_Date.Month, 2, 16);OLED_ShowNum(100, 0, RTC_Date.Date, 2, 16);OLED_ShowNum(57, 2, RTC_Time.Hours , 2, 16);OLED_ShowNum(78, 2, RTC_Time.Minutes, 2, 16);OLED_ShowNum(100, 2, RTC_Time.Seconds, 2, 16);}/* USER CODE END 3 */
}

效果:

二、單片機工作模式

1.低功耗睡眠模式(Sleep)

使用

HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);

打開睡眠模式。由于Hal庫與標準庫在管理系統時鐘和低功耗模式時的處理方式不同,Hal庫中需要多手動關閉SysTick定時器,因為SysTick定時器會周期性觸發中斷,會喚醒睡眠模式。

HAL_SuspendTick();//關閉SysTick定時器
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);
HAL_ResumeTick();//恢復SysTick定時器

2.低功耗停止模式(Stop)

HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI);//進入Stop模式
SystemClock_Config();//恢復時鐘

3.低功耗待機模式(StandBy)

配置PA0為喚醒引腳:

代碼:

HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);while(1)
{__HAL_RCC_PWR_CLK_ENABLE();HAL_PWR_EnterSTANDBYMode();
}

三、看門狗

1.獨立看門狗

打開獨立看門狗并設置預分頻器和重裝值:

HAL_IWDG_Refresh(&hiwdg);//初始化完成后執行一次喂狗
//獲取當前的復位是IWDG造成的復位還是按Rst鍵造成的復位
if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET) 
{// IWDG reset flag is setOLED_ShowString(2, 1, "IWDGRST"); //OLED閃爍IWDGRST字符串HAL_Delay(500);OLED_ShowString(2, 1, " ");HAL_Delay(100);__HAL_RCC_CLEAR_RESET_FLAGS();
}
else
{OLED_ShowString(3, 1, "RST"); //OLED閃爍RST字符串HAL_Delay(500);OLED_ShowString(3, 1, " ");HAL_Delay(100);
}while (1)
{HAL_IWDG_Refresh(&hiwdg);//喂狗HAL_Delay(1100);
}

2.窗口看門狗

代碼:

//獲取當前的復位是WWDG造成的復位還是按Rst鍵復位,這里代碼有大耗時,需要在
MX_WWDG_Init(); 之前
if (__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET) 
{// IWDG reset flag is setOLED_ShowString(2, 1, "WWDGRST"); //OLED閃爍IWDGRST字符HAL_Delay(500);OLED_ShowString(2, 1, " ");HAL_Delay(100);__HAL_RCC_CLEAR_RESET_FLAGS();
}
else
{OLED_ShowString(3, 1, "RST"); //OLED閃爍RST字符HAL_Delay(500);OLED_ShowString(3, 1, " ");HAL_Delay(100);
}MX_WWDG_Init();
while (1)
{HAL_Delay(40);HAL_WWDG_Refresh(&hwwdg);//喂狗HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);//開
}

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

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

相關文章

9.Docker的容器數據卷使用(掛載)

什么是容器數據卷技術? 到這里,我算是入門docker了! docker的理念:將環境和應用打包成一個鏡像!直接安裝就能使用 如果數據都在容器中,那么我們一旦將容器刪除,數據就會丟失!因為…

使用 TCollector 寫入 TDengine

TCollector 是 openTSDB 的一部分,它用來采集客戶端日志發送給數據庫。 只需要將 TCollector 的配置修改指向運行 taosAdapter 的服務器域名(或 IP 地址)和相應端口即可將 TCollector 采集的數據存在到 TDengine 中,可以充分利用…

高斯消元法詳解

文章目錄 概念用法特殊情況 我的奇怪方法 概念 什么是高斯消元?讓我們看一看 OI-Wiki 的解釋: 高斯消元法(Gauss–Jordan elimination)是求解線性方程組的經典算法,它在當代數學中有著重要的地位和價值,是線性代數課…

暴雨服務器成功中標華中科技大學集成電路學院服務器采購項目

近日,武漢暴雨信息發展有限公司在激烈的競爭中脫穎而出,成功中標華中科技大學集成電路學院的服務器采購項目。此次中標產品為暴雨旗下的塔式重裝AM400服務器,這一成果標志著暴雨信息在高性能計算領域的卓越實力得到了高校科研機構的高度認可。…

集群聊天服務器---MySQL數據庫的建立

數據庫的建立表格 user表 字段名稱字段類型字段說明約束idINT用戶idPRIMARY KEY, AUTO_INCREMENTnameVARCHAR(50)用戶名NOT NULL, UNIQUEpasswordVARCHAR(50)用戶密碼NOT NULLstateENUM(online, offline)當前登錄狀態DEFAULT offline friend表 字段名稱字段類型字段說明約束…

MongoDB 安裝使用教程

一、MongoDB 簡介 MongoDB 是一個高性能、開源的 NoSQL 文檔型數據庫,使用 BSON(二進制 JSON)格式存儲數據。適合存儲大規模、高并發的非結構化數據,常用于大數據、日志存儲、微服務架構中。 二、下載安裝 2.1 官網下載 訪問 …

FastAPI 小白教程:從入門級到實戰(源碼教程)

目錄 1. FastAPI 基本介紹 安裝 FastAPI 2. 簡單的 CRUD 示例 2.1 創建基本應用 2.2 添加 CRUD 操作??????? 3. 處理跨域請求 (CORS) 4. 普通案例:待辦事項 API??????? 5. 企業案例:認證和數據庫集成 5.1 使用 SQLAlchemy 和 JWT…

java中jasypt是用來做什么的?

思路: 簡要介紹Jasypt:一句話說明它的作用。配置解析:分別解釋password和algorithm的作用。工作流程:說明如何加密敏感數據并在配置文件中使用。安全提醒:強調密鑰管理的重要性。 最終回答: Jasypt&…

牛客周賽 Round 98

1.小紅與奇數 解題思路&#xff1a;如果給定的數是偶數, 由于1是任意正數的因子, 偶數1奇數 若給定的數是奇數, 1/自身, 都變成了偶數 #include <bits/stdc.h> using namespace std; void solve() {int x;cin >> x;if (x & 1)cout << "No" <…

(2)手摸手-學習 Vue3 之 變量聲明【ref 和 reactive】

手摸手-學習 Vue3 之 變量聲明【ref 和 reactive】 前言refreactive 前言 vue3 前端代碼開發過程中&#xff0c;必然會涉及變量聲明&#xff0c;會用到&#xff1a;ref、reactive 。本章節 進行講解說明。 演示的項目&#xff0c;經處理后的結構如下&#xff1a; ref 用途…

[Terence Tao訪談] 無限 | 關注模型 | 矢量場 | 策略性“作弊” | Lean

關注模型 改變視角真的很重要 無限&#xff1a;假設是球形的奶牛 陶哲軒&#xff1a;一個很好的例子是數學中的塞邁雷迪定理&#xff0c;于1970年代得以證明&#xff0c;它涉及在一組數字集合中尋找某種類型的模式&#xff0c;即等差數列&#xff0c;例如3、5、7或10、15、20。…

汽車v型推力桿總成三維5自由度性能及疲勞測試系統

V型推力桿總成裝置&#xff0c;通常設置在載重汽車中、后橋上&#xff0c;成對使用。其一端通過球面銷與車架鉸接&#xff0c;另一端則安裝在車橋上&#xff0c;通過關節軸承與車橋鉸接&#xff0c;其主要作用是穩定車橋&#xff0c;保持車橋的穩定位置&#xff0c;同時克服彈簧…

制動系統故障定義與診斷標準

核心定義&#xff1a; 制動不足 (Brake Insufficiency) 定義&#xff1a;制動系統產生的實際制動力低于預期制動力&#xff0c;但未完全喪失制動能力 關鍵特征&#xff1a; 制動距離增加20%以上 減速度低于預期值30%-50% 制動踏板行程異常增長 等效物理描述&#xff1a;&a…

server-rs

今天早上 看到有人 用cursor寫rust東西了 效果不錯遂嘗試寫一下web serverserver本身這個詞就不確指單單這一個東西在與cursor交流中,還是越來越明白了之前 沒有管過的一些"常識"一個業務服務之所以能“一直處理請求”&#xff0c;是因為有一個“東西”在背后做著持續…

python打卡day59@浙大疏錦行

知識點回顧&#xff1a; SARIMA模型的參數和用法&#xff1a;SARIMA(p, d, q)(P, D, Q)m模型結果的檢驗可視化&#xff08;昨天說的是摘要表怎么看&#xff0c;今天是對這個內容可視化&#xff09;多變量數據的理解&#xff1a;內生變量和外部變量多變量模型 統計模型&#xff…

Redisson的分布式鎖源碼分析2

文章目錄Redisson的讀寫鎖使用加鎖源碼分析釋放鎖源碼分析&#xff1a;Redisson一次加多個鎖RedissonMultiLock加鎖源碼分析&#xff1a;RedissonMultiLock釋放鎖源碼分析&#xff1a;RCountDownLatch介紹&#xff1a;RCountDownLatch源碼分析&#xff1a;RSemaphore分布式信號…

系統架構設計師論文分享-論軟件過程模型及應用

我的軟考歷程 摘要 2023年2月&#xff0c;我所在的公司通過了研發紗線MES系統的立項&#xff0c;該系統為國內紗線工廠提供SAAS服務&#xff0c;旨在提升紗線工廠的數字化和智能化水平。我在該項目中擔任架構設計師&#xff0c;負責該項目的架構設計工作。本文結合我在該項目…

云原生Kubernetes系列 | etcd3.5集群部署和使用

云原生Kubernetes系列 | etcd3.5集群部署和使用 1. etcd集群部署2. etcd集群操作3. 新增etcd集群節點1. etcd集群部署 etcd3.5官網站點: ?? https://etcd.io/docs/v3.5/op-guide/clustering/ ?? https://etcd.io/docs/v3.5/tutorials/how-to-setup-cluster/ [root@localh…

helm安裝配置jenkins

1、k8s1.28.2、helm3.12.0&#xff0c;集群搭建 查看節點運行情況 kubectl get node -o wide openebs部署情況 kubectl get sc -n openebs 2、添加Jenkins Helm倉庫 helm repo add jenkins https://charts.jenkins.iohelm repo update# 查看版本 helm search repo -l jen…

Wagtail - Django 內容管理系統

文章目錄 一、關于 Wagtail1、項目概覽2、相關鏈接資源3、功能特性 二、安裝配置三、使用入門1、快速開始2、兼容性 四、其它社區與支持1、社區資源2、商業支持 開發貢獻參考項目參考文獻 一、關于 Wagtail 1、項目概覽 Wagtail 是一個基于 Django 構建的開源內容管理系統&am…