RM電控講義【HAL庫篇】

這段代碼中do while的作用:

宏定義中的語句塊do { ... } while (0)?允許你在宏定義中創建一個語句塊,從而可以包含多條語句。這在宏定義中特別有用,因為宏只是簡單的文本替換,不像函數那樣有作用域和返回類型。因此,如果你想在宏中執行多個操作,你需要將這些操作放在一個語句塊中。

保證邏輯在一行內完成:使用?do { ... } while (0)?可以確保宏定義中的所有邏輯都在一行內完成。這有助于避免在宏展開時可能出現的語法錯誤,特別是當宏在復雜的表達式中被調用時。

免編譯器警告或錯誤:如果宏定義中有多條語句,并且沒有使用?do { ... } while (0),編譯器可能會產生關于未使用的循環變量的警告或錯誤。使用?do { ... } while (0)?可以避免這些警告或錯誤,因為循環條件是常量值“零”,所以循環實際上不會執行。

?HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);對引腳電平進行翻轉

對兩個引腳初始化,推完輸出,默認為高電平。

C中的三元運算符(X ? A : B):如果x為真(非0),那么宏BEEP(x)將調用HAL_GPIO_WritePin函數來設置(或打開)蜂鳴器;如果x為假(0),那么宏BEEP(x)將調用HAL_GPIO_WritePin函數來重置(或關閉)蜂鳴器。兩個函數之間是冒號。

引腳的輸入定義默認為高或低電平的作用:

防止輸入端懸空:當輸入端處于懸空狀態時,即沒有外部信號連接,其電平狀態容易受到外界干擾而改變。上拉和下拉電阻可以將輸入端的電平狀態固定在一個確定的狀態上,防止其受到外部信號的干擾。

確定電平狀態:上拉電阻將不確定的信號通過一個電阻提升為高電平,而下拉電阻將不確定的信號通過一個電阻降低為低電平。這樣,無論輸入端是否接收到外部信號,都可以保證其電平狀態是確定的,從而避免數字信號的傳輸和控制受到干擾。

按鍵掃描程序加入delay_ms()去抖動,KEY的值由 HAL_GPIO_ReadPin()所得。

按鍵掃描+switch判斷。

一個外部中斷的設置(重點看看gpio_init_struct.Mode = GPIO_MODE_IT_FALLING; ):

注意看下圖的最后一行,這里的EXTI4_IRQn與PE4是對應的。

中斷回調函數:

注意看這三個函數之間的關系,弄明白HAL外部中斷回調函數的使用方法。

外部中斷可以繞開主循環,避免影響。

usart的使用:

HAL_UART_Receive_IT開啟UART接受中斷。

串口的底層初始化:

#define USART_EN_RX ?1 ????這種條件限定值得學習。

在串口中斷里處理接收到的數據;

????

單片機中的看門狗(Watchdog Timer,WDT)是一個重要的安全保護機制。它由一個獨立的時鐘和一個計數器組成,用于檢測系統是否運行正常。當計數器達到一個預先設定的值時,看門狗會向系統發出警報,以此來檢測系統是否運行正常。如果系統運行正常,單片機會在計數器達到警報值之前給看門狗發出“清除”信號,以此來重置計數器,繼續監測系統的運行狀態。然而,如果系統運行異常,例如出現程序跑飛、受到干擾或陷入死循環等情況,單片機不會給看門狗發出“清除”信號。這種情況下,看門狗計數器會持續增加,當達到警報值后,看門狗會向系統發出警報,使單片機強制復位,從而使程序重新開始執行。這樣,看門狗能夠確保系統在異常情況下能夠安全停止運行,避免造成重大損失。看門狗定時器的溢出時間越短,其靈敏度越高,系統跑飛后復位的時間也就越短,從而提高了系統的安全性。然而,這也意味著需要更頻繁地給看門狗“喂食”,即在程序中定期給看門狗設置值,以防止其溢出。
看門狗初始化和喂狗:

需要再主函數中每一秒執行iwdg_feed(); 狗才不會瘋強制系統復位。

窗口看門狗與普通看門狗的區別

普通看門狗通常只設定一個時間閾值,系統需要在這個時間閾值內“喂狗”以重置看門狗。如果系統因故障或死鎖無法在規定時間內“喂狗”,看門狗會觸發復位操作,強制重啟系統。這種看門狗方式相對簡單,但缺乏靈活性,因為它只有一個固定的時間閾值。

窗口看門狗則設定了兩個時間閾值:窗口上限和窗口下限。在這個窗口時間內,系統需要至少“喂狗”一次以重置看門狗。如果系統在這個窗口時間內沒有“喂狗”,或者“喂狗”的時間超出窗口上限或下限,看門狗會觸發復位操作。這種方式提供了更大的靈活性,因為它允許系統在一定時間范圍內“喂狗”,而不是固定在一個時間點。

wwdg_init(0X7F, 0X5F, WWDG_PRESCALER_8);/* 計數器值為7f,窗口寄存器為5f,分頻數為8 */

窗口看門狗可以設置中斷處理函數,在窗口看門狗需要喂狗的時候調用。

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

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

相關文章

JBOSS EPA 7.X 接入Oracle數據源

獲取Oracle JDBC驅動程序: 訪問Oracle官方網站,下載適用于您的操作系統和Oracle數據庫版本的JDBC驅動程序文件(通常為一個JAR文件)。您可能需要一個Oracle賬戶來訪問這些文件。將下載的JAR文件保存到您的計算機上。 將驅動程序文件…

WordPress后臺自定義登錄和管理頁面插件Admin Customizer

WordPress默認的后臺登錄頁面和管理員,很多站長都想去掉或修改一些自己不喜歡的功能,比如登錄頁和管理頁的主題樣式、后臺左側菜單欄的某些菜單、儀表盤的一些功能、后臺頁眉頁腳某些小細節等等。這里boke112百科推薦這款可以讓我們輕松自定義后臺登錄頁…

2.20日學習打卡----初學Vue3

2.20日學習打卡 目錄: 2.20日學習打卡Vue是什么?安裝vue模板語法條件渲染列表渲染事件處理表單輸入綁定組件基礎Props組件交互自定義事件組件交互組件生命周期Vue引入第三方Axios網絡請求Axios網絡請求封裝網絡請求跨域解決方案路由配置路由傳遞參數嵌套路由配置Vue…

js設計模式:單例模式

作用: 保證一個類只有一個實例,并且提供一個全局的訪問位置。 可以用來實現全局的一些狀態管理或者獨一無二的數據 示例: class Wjt{constructor(name,idNumber,gender){this.name namethis.idNumber idNumberthis.gender gender}//可以直接使用Wjt調用的靜態方法static …

性能測試概述

1.性能測試介紹 好處: 有效的性能測試能給研發、運維團隊提供有效的容量規劃能力、系統風險識別、系統瓶頸識別、性能調優指導,保障盡量避免這些問題的發生。 例如: 假設:以下場景,不可用10分鐘,帶來的經濟損失 天貓雙十一峰值處理訂單58.3萬筆每秒 京東金融618戰報…

Linux Driver | 設備樹開發之初識設備樹

Linux Driver | 設備樹開發之初識設備樹 時間:2024年2月22日20:35:13 文章目錄 **Linux Driver** | 設備樹開發之初識設備樹參考1.設備樹開發2.`Linux`設備樹的由來3.`Linux`設備樹的由來-為什么會有設備樹4.設備樹的由來5.快速編譯設備樹---**DTC** (`device tree compiler`)…

C#,入門教程(29)——修飾詞靜態(static)的用法詳解

上一篇: C#,入門教程(28)——文件夾(目錄)、文件讀(Read)與寫(Write)的基礎知識https://blog.csdn.net/beijinghorn/article/details/124231282 static 是編程高頻詞之一。 讀了一…

2.21號qt

1.QMainWindow中常用的類 繼承于QMainWindow類,原因該類提供了QWidget沒有提供的成員函數。 菜單欄、工具欄、狀態欄、浮動窗口(鉚接部件)、核心部件 1.1 菜單欄 QMenuBar //創建菜單欄 QMenuBar 最多只能有一個 QMenuBar *mbar menu…

Hutool簡介和常用類

Hutool簡介 Hutool是一個小而全的Java工具類庫,通過靜態方法封裝,降低相關API的學習成本,提高工作效率,使Java擁有函數式語言般的優雅,讓Java語言也可以“甜甜的”。 Hutool中的工具方法來自每個用戶的精雕細琢&…

【鴻蒙 HarmonyOS 4.0】數據持久化

一、數據持久化介紹 數據持久化是將內存數據(內存是臨時的存儲空間),通過文件或數據庫的形式保存在設備中。 HarmonyOS提供兩種數據持久化方案: 1.1、用戶首選項(Preferences): 通常用于保存應用的配置信息。數據通…

android 全局異常處理封裝

app出現了問題,尤其是多線程問題,某個線程出了問題,很不好找,那是不是可以搞一個統一的處理類,將所有的異常信息都統一到一個地方呢,原本只是一個知識點,但我發現這里還可以 保存異常信息到本地…

Vue 進階系列丨實現簡易reactive和ref

Vue 進階系列教程將在本號持續發布,一起查漏補缺學個痛快!若您有遇到其它相關問題,非常歡迎在評論中留言討論,達到幫助更多人的目的。若感本文對您有所幫助請點個贊吧! 2013年7月28日,尤雨溪第一次在 GItHu…

計算機網絡Day02--物理層(一)

計算機網絡Day02–物理層 物理層基本概念 物理層考慮的是怎么才能在連接各種計算機的傳輸媒體上傳輸比特流,而不是具體的傳輸媒體 作用:盡可能屏蔽掉不同傳輸媒體和通信手段的差異 用于物流層的協議也稱為物流層規程 主要作用:解決計算機…

COCI2015-2016#1 RELATIVNOST

P6533 [COCI2015-2016#1] RELATIVNOST 題目大意 小 L L L在賣畫。這些畫分為彩色畫和黑白畫,小 L L L希望有至少 c c c個人會買走他至少一張彩色畫。 第 i i i個人至多會購買 a i a_i ai?張彩色畫或者 b i b_i bi?張黑白畫,且每個人至少購買一張畫。…

Android---Jetpack Compose學習007

Compose 附帶效應 a. 純函數 純函數指的是函數與外界交換數據只能通過函數參數和函數返回值來進行,純函數的運行不會對外界環境產生任何的影響。比如下面這個函數: fun Add(a : Int, b : Int) : Int {return a b } “副作用”(side effe…

單例模式的介紹

單例模式(Singleton)是一種創建型設計模式,它確保一個類只有一個實例,并提供全局訪問點。其核心思想是通過限制類的實例化次數,防止多個實例同時存在,從而避免了多線程競爭和資源浪費,提高了代碼…

【藍橋杯單片機入門記錄】靜態數碼管

目錄 一、數碼管概述 (1)認識數碼管 (2)數碼管的工作原理 (3)LED數碼管驅動方式-靜態顯示 二、數碼管電路圖 三、靜態數碼管顯示例程 (1)例程1:數碼管顯示某一位&a…

vue、thinkphp實現騰訊云對象存儲COS圖片上傳

環境&#xff1a; thinkphp6 vue2 vant2.12 composer安裝qcloud-sts-sdk composer require qcloud_sts/qcloud-sts-sdk獲取COS臨時id、key的sts接口 <?php declare (strict_types 1);namespace app\index\controller; use QCloud\COSSTS\Sts;class CosController {//h…

如何為PostgreSQL設置自增主鍵?

在 PostgreSQL 中&#xff0c;自增主鍵通常是通過使用 SERIAL 類型或在新版本中使用 IDENTITY 列來實現的。 1. 使用 SERIAL 類型 SERIAL 是一個自動增加的整數&#xff0c;常用于主鍵。當插入新的行時&#xff0c;PostgreSQL 會自動為這個列生成一個新的值。 ??例如 CREAT…

PYQT5-自定義事件

from PyQt5.QtCore import QEvent, QObject from PyQt5.QtWidgets import QApplication import sys# 自定義事件類 class CustomEvent(QEvent):# PYQT5 預留給用戶自定義事件類型的起點為 QEvent.User1000custom_event_type QEvent.registerEventType()# 也可以這樣寫# custom…