【stm32】HAL庫開發——Cube配置基本定時器

目錄

一、Cube配置基本定時器

1.定時器CubeMX配置介紹

2.定時器中斷控制LED

3.定時器常用函數

4.定時器從模式(Reset Mode)

5.定時器的從模式(Gated Mode)

6.定時器的編碼器接口


一、Cube配置基本定時器

1.定時器CubeMX配置介紹

94875fd238974099974e95d0bcb76f9f.png

定時器屬性配置:451f46cdfca64c9bb5288760e4f91e51.png

2.定時器中斷控制LED

1、CubeMX配置(配置定時器頻率為1Hz)

abdd9795f0e64f8ca4506d11f94d9a75.png

開啟中斷:

7b2abae2b3994ae1b34ef5b35e8a4778.png

繼續選擇PA9為LED工作引腳(推挽輸出):

代碼實現:

HAL_TIM_Base_Start_IT(&htim2);//開始定時器中斷//中斷回調函數
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_9);}

3.定時器常用函數

HAL_TIM_Base_Stop_IT(&htim2);//關閉定時器中斷
HAL_TIM_Base_Start_IT(&htim2);//開始定時器中斷//中斷回調函數
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{}

4.定時器從模式(Reset Mode)

作用:

它的作用是TIF接收到信號時(上升沿或下降沿),會清空計數器。并且觸發一次 觸發器中斷(由觸發器中斷標 志位控制) 。(重裝載是的中斷是 更新中斷 )

CubeMX設置定時器相關參數:

1. 設置從模式為Reset模式

2. 使用的觸發源是TI1FP1,但選擇這個后右邊芯片圖中的PA6引腳會自動創建標簽

3. 使用內部時鐘

4. 設置PSC為36000-1,自動重裝寄存器為2000-1.計數器從0增加到2000,溢出周期為1秒。

5. 設置從模式的Reset模式用上升沿

6. 濾波值設置15

7、打開中斷

06daaacdd3c6458ba3ebb904f4bfc493.png

743bb459c9c24500b1043acf7814cfbf.png

下面我們用這個配置實現一個功能:

假如不按下按鍵,CNT從0自增到2000,后count只加1,并且從0計數。

但按鍵按下,CNT清零然后從零重新開始計數

main.c文件中重寫中斷函數:

uint32_t hhRetCount=0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim==&htim3){if(__HAL_TIM_GET_FLAG(htim,TIM_FLAG_TRIGGER)==SET){//從模式Reset的中斷__HAL_TIM_CLEAR_FLAG(htim,TIM_FLAG_TRIGGER);//需手動清空標志位}else{//自動重裝的中斷hhRetCount+=1;}}
}

main函數:

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_TIM3_Init();/* USER CODE BEGIN 2 */OLED_Init();//OLED初始化OLED_CLS();HAL_TIM_Base_Start_IT(&htim3);OLED_ShowStr(0,0,"CNT:",2);			//顯示字符串OLED_ShowStr(0,5,"Conut:",2);			//顯示字符串/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */uint32_t man = __HAL_TIM_GET_COUNTER(&htim3);//OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2);//size2(16|12)OLED_ShowNum(40, 0, hhRetCount,5,16);OLED_ShowNum(50, 5, man,4,16);}}

效果:

37276e011c214a478b443927d5229c92.png

5.定時器的從模式(Gated Mode)

作用:

它的作用是TIF接收到信號時(高電平或低電平),會暫停計數器計數。會設置觸發器中斷標志位,但是會觸發觸發器中斷

CubeMX設置定時器相關參數:

4a5c607e7c7844f2bcce47653d09e8db.png

其他的和上面一樣,代碼實現也一樣!

現象:按下按鍵時,TIF會輸入高電平。Gated模式檢查到后會開始計數器計數。不按下時則會停止計數。(定時器在高電平模式下會正常計數,低電平觸發后就會停止計數)

6.定時器的編碼器接口

簡單原理闡述:

Encoder Interface 編碼器接口 編碼器接口可接收增量(正交)編碼器的信號,根據編碼器旋轉產生的正交信號脈沖,自動控制CNT自增或自減,從而指示編碼器的位置、旋轉方向和旋轉速度

編碼器工作模式:

簡單可以分為三個模式:b86a2e9eb8404b808e7be35d0ffc17a0.png要理解這些,我們先要知道怎么分辨編碼器是正轉和反轉:

6decaa6e560a40b2adede08ea31761bd.jpeg

分辨完反向后,我們就可以根據A和B相來進行算數計次了,TI1模式就為遇到A相上下沿CNT自增,同理TI2模式就為遇到B相上下沿CNT自增,TI1和TI2模式就為遇到A相和B相上下沿CNT自增,無非就是精度問題而已,根據自己需求設定工作模式!

下面我們做兩個小實驗:①編碼器當做時鐘源 ②計數編碼器速度

編碼器硬件接線:

3ae7cc18901c4f56abd87e81d09058c3.png

CubeMX配置:

1. 打開編碼器模式

2. 設置定時器的相關參數由于是檢測速度,所以這里就不分頻,盡可能讓定時器快點。計數器設置 最大,防止輸入信號頻率太高溢出。

3. 設置計數模式,TI1計數和TI2計數

4. 設置信號不反轉

a97c27ed01d34cbba3fe4316175e973f.png

代碼實現:

main函數(這里我使用的OLED驅動,沒有顯示負數的函數,所以翻反轉沒辦法顯示負數出來):

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 */int16_t time = 100;int man =100;/* 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_TIM3_Init();/* USER CODE BEGIN 2 */OLED_Init();//OLED初始化OLED_CLS();HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);//打開定時器編碼器模式OLED_ShowStr(0,0,"CNT:",2);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */time = __HAL_TIM_GET_COUNTER(&htim3);//獲取當前CNTOLED_ShowNum(70, 0, time, 5, 16);HAL_Delay(100);OLED_ShowNum(70, 5, man, 5, 16);}/* USER CODE END 3 */
}

計數編碼器速度并顯示:

原理就是1秒鐘讀取一次定時器的計數值(編碼器的脈沖)并清空。得到的數字就是當前的速度,單 位是Plus/S

代碼實現:

int16_t hhGetEncoderSpeedCountAndReset(){int16_t Tmp;Tmp=__HAL_TIM_GET_COUNTER(&htim3);//獲取當前CNT__HAL_TIM_SET_COUNTER(&htim3,0);//清空CNTreturn Tmp;
}int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM3_Init();HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);//打開定時器編碼器模式OLED_Init();OLED_Clear();OLED_ShowString(2, 1, "CNT:");while (1){OLED_ShowSignedNum(2,5,hhGetEncoderSpeedCountAndReset(),5);HAL_Delay(1000);}
}

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

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

相關文章

nginx反向代理后端服務restful及token處理

#user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; } #代理mysql服務 stream {upstream mysql_backend {server 192.168…

正確理解Cola StateMachine不內置事務管理機制

? 正確理解:Cola StateMachine 并非“不支持”事務一致性,而是“不內置”事務管理機制 因為: Cola StateMachine 是輕量級、無狀態、不依賴 Spring 的框架,它本身 不綁定任何事務上下文。它不像 Spring StateMachine 那樣自動與…

AudioTrack使用

** AudioTrack ** AudioTrack 是 Android 音頻系統中的核心類,用于播放原始音頻數據(PCM)或壓縮音頻(如 MP3、AAC)。它提供了低級別的音頻播放控制,適合需要精細管理的場景(如游戲音效、實時音…

解密:MySQL 的常見存儲引擎

在數據庫領域,MySQL 作為一款廣受歡迎的關系型數據庫管理系統,提供了多種存儲引擎以滿足不同應用場景的需求。每種存儲引擎都有其獨特的特性、優勢和適用場景。本文將深入探討 MySQL 中幾種常見的存儲引擎,包括 InnoDB、MyISAM、MEMORY 和 AR…

qt和qtcreator版本關系

實例展示: 如圖所示的qtcreator是使用qt5.15安裝過程選擇勾選了qtcreator 14.0.2,安裝完成qtcreator版本信息: 安裝過程中選擇了這些構件kits,會自動識別到: 使用qt5.9.9另外安裝的kits,需要手動設置才能識…

2個任務同時提交到YARN后2個都卡住(CDH)

文章目錄 問題描述解決方案1、增加資源2、調整ApplicationMaster資源3、關閉YARN調度器的資源搶占4、不使用公平調度器 問題描述 在CDH集群上,同時提交2個任務到YARN后,2個任務都卡住 解決方案 1、增加資源 增加服務器的內存和CPU 2、調整Applicatio…

web3區塊鏈-ETH以太坊

一. 以太坊概述 以太坊(Ethereum)作為區塊鏈技術的代表性項目之一,自2015年發布以來,迅速成為全球區塊鏈行業的核心基礎設施。相比比特幣,以太坊不僅支持點對點的價值轉移,還引入了智能合約,使…

【智能協同云圖庫】智能協同云圖庫第二彈:用戶管理系統后端設計與接口開發

用戶管理系統 一、需求分析 對于用戶模塊,通常要具有下列功能: 二、方案設計 (一)庫表設計 實現用戶模塊的難度不大,在方案設計階段,我們需要確認以下內容: 庫表設計用戶登錄流程如何對用戶權限…

閑庭信步使用SV搭建圖像測試平臺:第十三課——談談SV的數據類型

(本系列只需要modelsim即可完成數字圖像的處理,每個工程都搭建了全自動化的仿真環境,只需要雙擊top_tb.bat文件就可以完成整個的仿真,大大降低了初學者的門檻!!!!如需要該系列的工程…

前端進階之路-從傳統前端到VUE-JS(第一期-VUE-JS環境配置)(Node-JS環境配置)(Node-JS/npm換源)

經過前面的傳統前端開發學習后,我們接下來進行前端的VUE-JS框架學習(寫這篇文章的時候VUE-JS最新版是VUE3,所以默認為VUE3即可) 首先,我們要配置Node-JS環境,雖然我們還不學習Node-JS但是Node-JS可以快速配…

Requests源碼分析:面試考察角度梳理

簡單描述執行流程 ?? Q:能簡單描述一下發送一個requests.get(url)請求時,在requests庫內部的主要執行流程嗎?(從調用get方法到收到響應) 入口委托: get() 方法內部調用 requests.request(GET, url)。Session 接管: request() 方法會獲取或隱式創建一個 Session 對象,并…

航天VR賦能,無人機總測實驗艙開啟高效新篇?

(一)沉浸式培訓體驗? 在傳統的無人機培訓中,操作人員主要通過理論學習和簡單的模擬操作來掌握技能。但這種方式存在很大局限性,難以讓操作人員真正感受無人機在復雜環境下的運行狀態。而航天 VR 技術引入到 VR 無人機總測實驗艙后,徹底改變了…

Kotlin 函數與 Lambda 表達式

今天繼續分享Kotlin學習內容。 目標:掌握函數定義、調用、參數傳遞,以及 Lambda 表達式的基礎用法 1. 函數:Kotlin 的代碼模塊化工具 定義:函數是可重復調用的代碼塊,用于封裝邏輯。 語法: fun 函數名(參…

[mcp-servers] docs | AI客戶端-MCP服務器-AI 架構

鏈接:https://github.com/punkpeye/awesome-mcp-servers 服務器調用 相關專欄:實現Json-Rpc docs:精選MCP服務器資源列表 本專欄為精選 模型上下文協議(MCP)服務器的列表。 MCP 是一種標準協議語言,允許*…

1688商品發布API:自動化上架與信息同步

一、1688商品發布API的核心功能與技術架構 1.1 API功能全景 1688商品發布API是1688開放平臺的核心組件之一,支持商品信息的自動化發布、編輯、上下架及庫存同步。其核心功能包括: 商品信息管理:支持商品標題、描述、價格、庫存、SKU&#…

如何在x86_64 Linux上部署Android Cuttlefish模擬器運行環境

0 軟硬件環境 x86_64服務器Ubuntu20.04 LTS參考:Cuttlefish 虛擬 Android 設備參考: 筆記:搭建 Cuttlefish 運行環境可以下載編好的android-cuttlefish:android-cuttlefish.tar.gz 1 系統采用Ubuntu20.04 LTS 2 搭建cuttlefish…

機器學習9——決策樹

決策樹 Intro 歸納學習(Inductive Learning)的目標:從訓練數據中學習一般規則,應用于未見過的數據。 決策樹是一個樹形結構,其中: 每個分支節點表示一個屬性上的選擇(即決策條件)。…

CppCon 2017 學習:The Asynchronous C++ Parallel Programming Model

清晰理解 Amdahl’s Law(阿姆達爾定律),這是一條描述并行計算加速能力的核心定律。 定義公式: S 1 ( 1 ? P ) P N S \frac{1}{(1 - P) \frac{P}{N}} S(1?P)NP?1? S S S:加速比(Speedup&#xff09…

60頁PPT實戰方案 | 大數據決策分析平臺建設全流程路徑圖

目錄 一、什么是大數據決策分析平臺? 二、為什么要做大數據決策分析平臺建設? 1. 數據已經成為“資源”,但多數組織還停留在“信息孤島” 2. 管理復雜度上升,傳統報表跟不上業務節奏 3. 外部環境不確定性高,倒逼企…

芯谷科技--降壓型DC-DC轉換器D4005

在現代電子設備中,電源管理芯片的性能直接關系到設備的穩定性和效率。D4005以其高效、穩定的性能和廣泛的應用范圍,成為眾多工程師在設計電源方案時的優選。 產品簡介 D4005 是一款高效降壓型 DC-DC 轉換器,具備固定 400KHz 開關頻率&#…