定時器TIM配置微妙延時函數

定時器TIM配置微妙延時函數

文章目錄

  • 定時器TIM配置微妙延時函數
    • `開胃小菜(BOOT0、BOOT1)`
      • Boot0
      • Boot1(如果有)
    • 三種定時器
      • 高級控制定時器(TIM1,TIM8)
      • 通用定時器(TIM2, TIM3, TIM4, TIM5)
      • 基本定時器(TIM6, TIM7)
    • `TIM6配置Delay_us()`
      • `Prescaler (分頻系數)`
      • `Counter Mode (計數模式)`
      • `Counter Period (重載值)`
      • `auto-reload preload (自動重載預載)`
      • `代碼`
      • `重要問題`
      • `簡單粗暴的毫秒延時,取別名`
    • `PS:定時器中斷服務函數`
  • `如果對你有幫助,就點贊收藏把!(。・ω・。)ノ?`


開胃小菜(BOOT0、BOOT1)

在STM32系列微控制器中,Boot0和Boot1是兩個用于 選擇啟動模式 的引腳。
主要功能是決定芯片啟動時加載哪個存儲區域的代碼
這兩個引腳的狀態組合決定了微控制器從哪個內存位置開始執行代碼,從而影響啟動過程和運行的固件。

Boot0

這個引腳通常用于選擇啟動模式。
例如,在STM32F103RCT6芯片中
如果Boot0引腳被拉高(通常連接到VCC),則微控制器將從Flash存儲器啟動;
如果Boot0引腳被拉低(通常連接到GND),則將從SRAM啟動。
這是一種常見的配置,但具體行為可能會根據不同的STM32系列略有變化,所以最好查閱相應芯片的數據手冊以獲取準確信息。

Boot1(如果有)

有些STM32芯片可能還有一個Boot1引腳,用于進一步擴展啟動模式的選擇。
結合Boot0和Boot1的不同電平狀態,可以選擇從不同的存儲介質啟動,如系統存儲器、用戶閃存或其他。

不同STM32芯片上有不同的配置和選項,Boot0和Boot1的功能,需要查看該芯片的參考手冊或數據表來確定

三種定時器

stm32f103芯片一般包含了以下類型的定時器:

高級控制定時器(TIM1,TIM8)

STM32F1系列微控制器中功能最強大的定時器,通常用于電機控制等高級應用,支持多達4路的PWM輸出、捕獲和比較模式等多種功能。高級控制定時器可以實現復雜的波形生成和電機控制策略,如PID控制、死區時間設置等。

通用定時器(TIM2, TIM3, TIM4, TIM5)

通用定時器是最常用的定時器類型,適用于多種用途,可以用于生成脈沖寬度調制(PWM)信號(PWM輸出、輸入捕獲和輸出比較)、計數外部事件等。通用定時器通常具有多個通道,每個通道都可以獨立地進行配置和使用。

基本定時器(TIM6, TIM7)

基本定時器相對簡單,通常用于 簡單的計數 或產生基本的 時間延遲 。它們的功能不如通用定時器豐富,但在一些簡單的應用場合非常有用。

TIM6配置Delay_us()

采用的是stm32f103芯片,8M外接晶振,所以系統時鐘為72MHz。
使用軟件stm32cubeode

.IOS 配置如下:

在這里插入圖片描述
Prescaler-------------------分頻系數
Counter Mode------------計數模式(方向)
Counter Period ----------重裝載值
auto-reloadpreload------自動重載預載

Prescaler (分頻系數)

設置適當的預分頻系數,可以調整定時器計數器的時鐘頻率,從而改變定時器計數的速度。
確保定時器以所需的頻率進行計數,這對于生成精確的時間延遲或周期性事件至關重要。
比如說,上面設置的是72分頻,已知系統時鐘頻率是 72 M H z 72MHz 72MHz
所以定時器時鐘就是 72 M H z / 72 = 1 M H z 72MHz/72 = 1MHz 72MHz/72=1MHz ,即 定時器每計數一次耗時 1 u s 1us 1us

Counter Mode (計數模式)

在大多數定時器中,計數模式可以是 向上計數向下計數雙向計數
這決定了定時器計數器的計數方向。
選擇正確的計數模式對于滿足特定應用的需求非常重要。
向上計數:從0開始計數到65535
向下計數:從65535開始計數到0
雙向計數:計數器從一個設定的值開始,向上計數到最大值,然后向下計數到最小值,如此循環。
雙向計數通常用于需要測量周期性事件或信號的頻率和持續時間

Counter Period (重載值)

定時器計數器在達到該值后產生事件(如中斷或復位)的周期長度。
設置合適的重載值定義了定時器計數器的周期,這可以用于生成特定的時間間隔或頻率。
通俗來講
向上計數:計數器從0開始計數,計數到65535(重載值),就會觸發事件。
向下計數:計數器從65535(重載值)開始計數,計數到0,就會觸發事件。

auto-reload preload (自動重載預載)

當設置此功能時,每當計數器達到預設的重載值(65535)時,它會自動重新加載預設值(65535),從而使定時器能夠無縫地繼續計數。這允許定時器持續運行,無需軟件干預,適用于需要連續或周期性操作的應用。

代碼

在這里插入圖片描述
設置分頻系數,由于初始化的時候已經設置好了,這里可以不設置了;

設置重裝載值,寫延時函數的話,
向上計數這一行絕對不能要
向下技術根據實際情況來設置
寫定時器中斷服務函數也需要

部分博主無腦搬運,工程師們可要仔細辨認

計數值歸零,實際上就是將0賦值給計數器的初始值
可以F12跳轉到宏定義

/*** @brief  Set the TIM Counter Register value on runtime.* @param  __HANDLE__ TIM handle.* @param  __COUNTER__ specifies the Counter register new value.* @retval None*/
#define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__)  ((__HANDLE__)->Instance->CNT = (__COUNTER__))

實際上就是一個賦值
寫成這樣也可以

__HAL_TIM_SET_COUNTER(&htim6,0);//把定時器計數值歸零

開啟定時器,獲取計數值,如果計數值達到輸入 u s us us 次,則關閉定時器

__HAL_TIM_GET_COUNTER(&htim6) //獲取計數值

重要問題

為什么向上計數時 第201行 不能要?
舉個例子:
比如我輸入的是1000,也就是Timer6_Delay_us(1000);(即us = 1000;)
我們看看這個函數的原型

/*** @brief  Set the TIM Autoreload Register value on runtime without calling another time any Init function.* @param  __HANDLE__ TIM handle.* @param  __AUTORELOAD__ specifies the Counter register new value.* @retval None*/
#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \do{                                                    \(__HANDLE__)->Instance->ARR = (__AUTORELOAD__);  \(__HANDLE__)->Init.Period = (__AUTORELOAD__);    \} while(0)

倒數第二行

 (__HANDLE__)->Init.Period = (__AUTORELOAD__);    \

Period 是不是很眼熟?-------->重裝載值!!!
也就是將重裝載值設置成了999(1000-1),每次計數到999,就會從0重新開始
也就是計數值最大只能到達999(1000-1)
再看跳出 while 循環的條件

	while(1){Count = __HAL_TIM_GET_COUNTER(&htim6);if(Count > us)break;}

這里的計數值 Count 最大值只能到達999(1000-1),而我們輸入的 u s us us == 1000;
那么這個循環就無法終止也就是為什么卡死在這的原因

為什么一開始用著也沒什么事呀?運氣好唄,沒什么干擾

簡單粗暴的毫秒延時,取別名

在這里插入圖片描述


PS:定時器中斷服務函數

前面說了,如果需要使用定時器中斷服務函數,就需要 第201行 或者 提前就設置好重裝載值

什么意思呢?

向上計數,從0計數到重裝載值,就會自動觸發 定時器中斷服務函數

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim == &htim7)    //判斷是哪個定時器請求的中斷 在這個函數里可以if判斷多個定時器請求的中斷{//觸發事件}
}

H A L HAL HAL 庫提供了一個回調函數 HAL_TIM_PeriodElapsedCallback
當定時器的周期完成時,這個回調函數會被調用,觸發事件。
即計數器的值達到了自動重載寄存器 ARR 的值并發生溢出或更新事件
這個函數通常在定時器的中斷服務例程中被調用,允許用戶執行一些事件

參數 htim 是一個指向 TIM_HandleTypeDef 結構體的指針,包含了定時器的控制和狀態信息。
這個回調函數通常用于處理定時器周期到達時的中斷服務例程(ISR)。


┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈┈
┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈
┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈
▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈┈
▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈
▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈
▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈┈

如果對你有幫助,就點贊收藏把!(。・ω・。)ノ?

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

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

相關文章

linux命令: rsync的使用

使用rsync同步本地文件夾到遠程目錄 rsync -zvrt /localdir/ -e ssh -p 30000 rootip:/remotedir/rsync -zvrt /localdir/ /remotedir/ 遠程備份 rsync -avlR --delete -e ssh -p 3231 tangboqi221.122.114.27:backup ~/backup/ R表示保留目錄結構,如果不保留…

基于Intel Chainer 和姿勢檢測的動作識別(人體、面部、手部關鍵點識別動作識別)

項目概述 目標 開發一個能夠實時或近實時識別特定動作的系統,如運動姿勢、表情變化或手勢控制。實現對人體關鍵點的精確追蹤,以便于分析和理解人的動態行為。 技術棧 Intel硬件:可能使用Intel的高性能計算平臺,如Xeon處理器或…

【國潮】國產化系統甲方問題總結

持續更新。。。。。。。。。。。。。。。 【國潮】國產化系統甲方問題總結 1. 安全性問題2. 可靠性和穩定性問題3. 性能問題4. 符合軍事標準問題5. 兼容性和集成問題6. 維護和升級問題7. 項目管理問題8. 隱私和合規性問題9. 災難恢復和備份問題10. 技術支持和培訓問題 引言&am…

zookeeper的shell操作

一:啟動拽庫的shell命令行 zkCli.sh -server localhost:2181 退出:quit 二:查詢所有的命令 help 三:查詢對應的節點 --查詢zk上的根節點 ls / ls /zookeeper 四:查詢對應節點的節點信息(節點的元數據&a…

[AI 大模型] 阿里巴巴 通義千問

文章目錄 [AI 大模型] 阿里巴巴 通義千問簡介模型架構發展新技術和優勢示例 [AI 大模型] 阿里巴巴 通義千問 簡介 阿里巴巴的 通義千問 是由阿里云開發的一款大型語言模型,旨在為用戶提供高效、智能的自然語言處理服務。 通義千問能夠處理多種語言輸入&#xff0c…

c# Bitmap

在C#中,Bitmap 類是一個表示位圖圖像的類,它屬于 System.Drawing 命名空間。Bitmap 類是從 Image 類派生的,因此它繼承了 Image 類的所有屬性和方法,并添加了一些專門用于處理位圖的功能。 以下是關于 Bitmap 類的一些基本信息和…

Supervisord控制進程舉例

當使用Supervisord來控制進程時,通常會配置一個或多個進程組(program group),每個進程組負責監控和管理一個特定的進程或應用程序。以下是一個具體的例子: 假設我們有一個簡單的 Flask 應用程序,我們希望使…

免殺筆記 ---> Session0--DLL注入

剛更新完上一篇,于是我們就馬不停蹄的去跟新下一篇!! Session0注入 :: 各位看官如果覺得還不錯的可以給博主點個贊💕💕 這次,我把這個腳本直接傳到Github上了 喜歡的師傅點個Star噢…

深入理解JS中的防抖節流

在Web開發中,防抖(Debouncing)和節流(Throttling)是兩種常用的優化技術,用于提高頁面性能和用戶體驗。它們通過限制函數執行的頻率來減少計算資源的消耗,尤其是在處理頻繁觸發的事件時,如窗口大小調整、滾動、鍵盤輸入等。 1、防抖(Debouncing) 防抖技術的核心思想是…

風景園林工程設計乙級資質業績要求案例分析

項目數量與規模 數量要求:企業需要提供一定數量的已完成風景園林設計項目案例,這個數量可能依據具體政策而有所不同,但通常需要完成多個項目以展示設計團隊的綜合能力。 規模要求:項目規模需達到乙級資質標準所規定的級別&#…

【C++報錯已解決】Dangling Pointer

🎬 鴿芷咕:個人主頁 🔥 個人專欄: 《C干貨基地》《粉絲福利》 ??生活的理想,就是為了理想的生活! 文章目錄 引言一、問題描述1.1 報錯示例1.2 報錯分析1.3 解決思路 二、解決方法2.1 方法一:使用智能指針2.2 方法二…

本地部署,GFPGAN: 實用的面部修復算法

目錄 什么是 GFPGAN? 技術原理 主要功能 應用場景 本地安裝 運行結果 結語 Tip: 在圖像處理和計算機視覺領域,面部修復是一個重要且具有挑戰性的研究方向。隨著深度學習技術的不斷進步,許多新的算法被提出,用于…

C# 根據日期對mysql數據庫數據篩選的一些操作函數

在C#中,根據日期篩選MySQL數據庫中的數據是一個常見的操作。以下是一些基于日期的數據篩選操作函數示例: 1. 篩選特定日期的數據 public List<YourDataType> GetDataBySpecificDate(DateTime specificDate) {List<YourDataType> dataList = new List<YourDa…

Python8:線程和進程

1.并發和并行 并發&#xff1a;在邏輯上具備同時處理多個任務的能力&#xff08;其實每時刻只有一個任務&#xff09; 并行&#xff1a;物理上在同一時刻執行多個并發任務 2.線程與進程 一個進程管多個線程&#xff0c;一個進程至少有一個線程 python多線程是假的&#xf…

【漏洞復現】docassemble——interview——任意文件讀取

聲明&#xff1a;本文檔或演示材料僅供教育和教學目的使用&#xff0c;任何個人或組織使用本文檔中的信息進行非法活動&#xff0c;均與本文檔的作者或發布者無關。 文章目錄 漏洞描述漏洞復現測試工具 漏洞描述 docassemble 是一款強大的開源工具&#xff0c;它讓自動化生成和…

linux_進程概念——理解馮諾依曼體系結構

前言&#xff1a; 本篇內容是為了讓友友們較好地理解進程的概念&#xff0c; 而在真正了解進行概念之前&#xff0c; 要先了解一下馮諾依曼體系結構。 所以博主會先對馮諾伊曼體系結構進行解釋&#xff0c; 然后再講解進程的概念。 ps&#xff1a; 本篇內容適合了解一些linux指…

openfoam生成的非均勻固體Solid數據分析、VTK數據格式分析、以及paraview官方用戶指導文檔和使用方法

一、openfoam生成的非均勻固體Solid數據分析 對于Solid/dealii-output文件&#xff0c;固體的數據文件&#xff0c; # vtk DataFile Version 3.0 #This file was generated by the deal.II library on 2024/7/10 at 9:46:15 ASCII DATASET UNSTRUCTURED_GRIDPOINTS 108000 do…

go1.21版本后,文件加載順序

總結 顯式引入&#xff1a; 同一個文件顯式引入一個包&#xff0c;按照頁面代碼執行的函數的先后&#xff0c;來執行該函數的文件&#xff0c;不按照包內的文件首字母順序 隱式引入&#xff1a; 同一個文件內隱式引入一個包&#xff0c;包內的多個文件會按照文件首字母順序執行…

移動端 圖片優化

項目場景&#xff1a; 在移動端開發&#xff0c;加載圖片并保持圖片不變形是非常重要的&#xff0c;也是一名前端必備和經常打交道的內容。以下是自己對圖片加載是變形的處理&#xff1f; 問題和解決方法 移動端加載圖片&#xff0c;不同的手機&#xff0c;圖片的展示不一樣&…

二分查找理論及例題

二分查找&#xff08;Binary Search&#xff09;是一種常用的搜索算法&#xff0c;用于在有序數組中快速查找目標值。以下是二分查找的詳細理論知識、優缺點以及適用場景&#xff1a; 理論知識&#xff1a; 基本原理&#xff1a;二分查找通過比較目標值與數組的中間元素&#x…