單片機-STM32部分:9、定時器

飛書文檔https://x509p6c8to.feishu.cn/wiki/A749wx8T0ioqfgkzZKlc9poknUf

SMT32F1系列共有8個定時器:

  • 基本定時器(TIM6TIM7
  • 通用定時器(TIM2TIM3TIM4TIM5
  • 高級定時器(TIM1TIM8

高級定時器(TIM1TIM8)的主要功能:

通用定時器(TIM2~TIM5)的主要功能:

基本定時器功能(TIM6TIM7):

功能對比

定時器種類位數計數器模式捕獲/比較通道互補輸出特殊應用場景
高級定時器16向上,向下,中心對齊4定時計數,DAC/ADC時鐘、PWM輸出,輸入捕獲,輸出比較,帶可編程死區的互補輸出
通用定時器16向上,向下,中心對齊4定時計數,DAC/ADC時鐘、PWM輸出,輸入捕獲,輸出比較
基本定時器16向上0定時計數,DAC時鐘

基本定時器框圖說明

基礎定時器只有定時功能,使用基礎定時器進行定時的工作流程如下:
1、控制器除了控制定時器復位、使能、計數等功能之外,還可以用于觸發DAC轉換。
2、內部時鐘信號CK_INT經過控制器后成為CK_PSC進入預分頻器,CK_INT和CK_PSC在頻率上相等
3、預分頻器對CK_PSC時鐘信號進行分頻,輸出 CK_CNT是分頻后的時鐘
4、計數器對時鐘信號CK_CNT從0開始計數,自動重裝載寄存器存儲一個值。當計數器的值達到改值時就產生U事件,然后計數器歸零又重新開始計數。
5、開啟定時器全局中斷和U事件中斷后,在發生計數溢出時產生U事件中斷,利用中斷進行定時處理。

定時器配置的一些參數

雖然有3類定時器但,不管怎樣,只要是配置作為定時器,那么便總是與基本定時器是類似的。

在下文配置的時候要注意:我們配置的是進入定時器中斷的頻率,然后要定的時間要跟據這個頻率來定時的。

Prescaler(PSC): 定時器預分頻設置,16位,設置 0~65535 以達到 1 至 65536 的分頻。

Counter Mode : 定時器的計數方式,基本定時器只能向上(UP)計數

定時器有如下3種計數模式:

  • 遞增計數模式:計數器從 0 計數到自動重載值,然后重新從 0 開始計數并生成計數器上溢事件。
  • 遞減計數模式:計數器從自動重載值開始遞減到 0,然后重新從自動重載值開始計數并生成計數器下溢事件。
  • 中心對齊模式:也叫 向上向下計數,計數器從 0 開始計數到自動重載值 – 1 ,生成計數器上溢事件;然后從自動重載值開始向下計數到 1 并生成計數器下溢事件。之后從0 開始重新計數。

Counter Period : 定時器周期,16位,設置 0~65535 以達到 1 至 65536 的周期。每當定時器達到 設定值時,置位。

InternalCLock Division(CKD): 內部時鐘分頻因子,指設置定時器時鐘頻率與數字濾波器使用的采樣頻率之間的分頻比例的(與輸入捕獲相關)。

Auto-reload preload :自動重載。一般每次觸發以后需要重新填充。

Disable:自動重裝載寄存器寫入新值后,計數器立即產生計數溢出,然后開始新的計數周期
Enable:自動重裝載寄存器寫入新值后,計數器完成當前舊的計數后,再開始新的計數周期

Trigger Output Parameters : 觸發輸出 (TRGO) ,當定時器的定時時間到達的時候輸出一個信號(如:定時器更新產生TRGO信號來觸發ADC的同步轉換)

Repetition Counter:重復計數器(RCR -8 bits),屬于高級控制寄存器專用寄存器位,利用它可以非常容易控制輸出 PWM 的個數。

Master/Slave Mode(MSM bit) :主從模式

定時器一般是通過軟件設置而啟動,STM32的每個定時器也可以通過外部信號觸發而啟動,還可以通過另外一個定時器的某一個條件被觸發而啟動。這里所謂某一個條件可以是定時到時間、定時器超時、比較成功等許多條件。

這種通過一個定時器觸發另一個定時器的工作方式稱為定時器的同步,發出觸發信號的定時器工作于主模式,接受觸發信號而啟動的定時器工作于從模式。

定時器的四種主從機模式:外部觸發模式1IRC重置模式、門控模式、觸發模式。

基本定時器的使用:

創建工程,設置SWD調試,HSE時鐘,系統時鐘為72MHz

然后打開Timers配置TIM6,設置為Activated激活定時器

Activated:
激活TIM6,把前面的方框選中局表示激活了TIM6

One Pulse Mode
只會計數到預設的值時產生一個脈沖輸出信號,而不是周期性的信號輸出。產生一個脈沖信號后,然后計數器會停止計數。這種模式通常用于需要生成單個脈沖信號的應用場景,例如PWM控制、測量脈沖寬度等。在STM32F103系列中,定時器的One Pulse Mode可以通過設置TIM_CR1寄存器中的OPM位來實現。


?

然后如何設置定時器的定時時間呢?首先我們要知道定時器的時鐘來自哪里?

從芯片手冊的時鐘樹中可以知道,STM32F103定時器的時鐘源:

TIM1、TIM8:來自APB2總線上的TIMxCLK

TIM2到TIM7:來自APB1總線上的TIMxCLK

所以TIM6的APB1時鐘是72MHz。

Counter Setting:計數設置
Prescaler(PSC -16 bits value):預分頻器
簡寫PSC,16位,可設置的值范圍是0--65535。在STM32F103中,計數器的時鐘源可以是內部時鐘源或外部時鐘源。當使用內部時鐘源時,PSC可以將時鐘信號頻率除以一個固定的分頻系數,以降低計數器的時鐘頻率,從而擴大計數器的計時范圍。
例如,如果使用內部時鐘源,并將PSC設置為7199,
則定時器的時鐘頻率將為72 MHz / (7199 + 1) = 10 kHz。
這意味著計數器每計數10次,就會過去1毫秒。如果需要更長的計時范圍,可以將PSC設置為更大的值。

Counter Mode計數模式
基本定時器TIM6只能向上計數(UP)。

Counter Period(Auto Reload Register - 16 bit value):計數周期
Auto Reload寄存器用于設置定時器的計數周期。當定時器的計數器達到ARR的值時,定時器會自動重新加載ARR的值并繼續計數。這樣可以實現定時器的周期性計數,從而實現定時和計時的功能。

Auto-Reload Preload:自動重載預裝載使能。
自動重載預裝載功能是用來控制定時器計數器的自動重裝載和預裝載的。

Trigger Output(TRGO)Parameter:觸發器輸出參數
當一個定時器的計數器計數到預設值時,就會產生一個觸發輸出,可以將該輸出信號連接到其他定時器或外設的啟動輸入端,以實現多個定時器或外設同步工作(如:定時器更新產生TRGO信號來觸發ADC的同步轉換)。

TIM_TRGO_RESET-復位 – 使用TIMx_EGR寄存器的UG位作為觸發輸出(TRGO)。例如:溢出時會設置UG為1,計數器重新從0開始計數。
TIM_TRGO_ENABLE-使能 – 計數器使能信號CNT_EN被用作為觸發輸出(TRGO)。例如:可用于在同一時刻啟動多個定時器,或控制使能從定時器的時機。
TIM_TRGO_UPDATE-更新 – 更新事件被用作為觸發輸出(TRGO),例如:事件用于觸發ADC的同步轉換。

如果想要使其50ms觸發一次定時中斷,可以把72MHz通過7200分頻后,使其速度降為10KHz,也就意味著每計數10次需要1ms,那么50ms就需要計數500次。因為是從0為第一位開始計數,所以參數都需要減一。

72000000Hz/7200 = 10000Hz = 10KHz = 1s 10000次 = 1ms 10次

也可以通過公式計算
Tout= ((PSC+1)*(Period+1))/Tclk
Tclk:TIM的輸入時鐘頻率(單位為hz)。
Tout:TIM的溢出時間(單位為s)。
PSC: 分頻 7199
Period:計數周期 499
50ms=0.05s=((7200)*(500))/72000000Hz

然后設置定時器中斷

關于中斷優先級,在實際工程項目中,根據具體業務需要,當中斷過多時,才需要設置中斷優先級,測試工程無需設置。

同時,為了方便查看效果,添加LPA6為LED1

點擊生成代碼

main.c
void MX_TIM6_Init(void)
{TIM_MasterConfigTypeDef sMasterConfig = {0};htim6.Instance = TIM6;htim6.Init.Prescaler = 7200-1;htim6.Init.CounterMode = TIM_COUNTERMODE_UP;htim6.Init.Period = 500-1;htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;if (HAL_TIM_Base_Init(&htim6) != HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK){Error_Handler();}
}stm32f1xx_it.c
/*** @brief This function handles TIM6 global interrupt.*/
void TIM6_IRQHandler(void)
{HAL_TIM_IRQHandler(&htim6);
}進入HAL_TIM_IRQHandler(&htim6)函數,這里面的代碼很長,就是不同的中斷類型,進入不同的中斷回調函數,這里找到HAL_TIM_PeriodElapsedCallback(htim);
進入這個回調函數,我們看到是個虛函數,需要我們重寫,在main.c中添加。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){??if(htim == &htim6)? //判斷中斷是否來自于定時器6{//do something//例如:HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);? //翻轉LED燈的狀態//可以把500-1改為5000-1設置500ms的定時中斷}
}最后,需要啟動定時器,需要在main函數里使能中斷/* USER CODE BEGIN 2 */HAL_TIM_Base_Start_IT(&htim6);/* USER CODE END 2 */

同理,其它定時器的定時器中斷可以通過同樣的方式設置

記得設置完參數后,打開中斷哦,否則將不會產生中斷。

基本定時器

高級定時器

然后代碼中也要手動啟動定時器

??main.c/* USER CODE BEGIN 2 */HAL_TIM_Base_Start_IT(&htim6)/* USER CODE END 2 */

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

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

相關文章

uniapp-商城-51-后臺 商家信息(logo處理)

前面對頁面基本進行了梳理和說明,特別是對驗證規則進行了闡述,并對自定義規則的兼容性進行了特別補充,應該說是干貨滿滿。不知道有沒有小伙伴已經消化了。 下面我們繼續前進,說說頁面上的logo上傳組件,主要就是uni-fil…

ideal創建Springboot項目(Maven,yml)

以下是使用 IntelliJ IDEA 創建基于 Maven 的 Spring Boot 項目并使用 YAML 配置文件的詳細步驟: 一、創建 Spring Boot 項目 啟動項目創建向導 打開 IntelliJ IDEA,點擊“File”->“New”->“Project”。 在彈出的“New Project”窗口中&#…

MATLAB中矩陣和數組的區別

文章目錄 前言環境配置1. 數據結構本質2. 運算規則(1)基本運算(2)特殊運算 3. 函數與操作4. 高維支持5. 創建方式 前言 在 MATLAB 中,矩陣(Matrix) 和 數組(Array) 的概…

iTwin 數據報表(只是簡單的原型不代表實現)

大概想法是 前端從schema和class中選中感興趣的property內容生成ecsql語句傳遞給后端后端解析ecsql并提供公開接口給各個分析工具,如excel,poewerBI等(Odata或者直接選擇來自網站)再由分析工具做進一步的處 還未想好的點 如何存…

Spring AI 系列——使用大模型對文本內容分類歸納并標簽化輸出

原理概述 利用大語言模型(LLM)實現文本分類,核心思想是通過預訓練模型理解輸入文本的語義,并將其映射到預先定義好的分類標簽。在這個過程中,我們借助 Spring AI Alibaba 提供的能力,使用阿里云 DashScope…

LeetCode 高頻題實戰:如何優雅地序列化和反序列化字符串數組?

文章目錄 摘要描述題解答案題解代碼分析編碼方法解碼方法 示例測試及結果時間復雜度空間復雜度總結 摘要 在分布式系統中,數據的序列化與反序列化是常見的需求,尤其是在網絡傳輸、數據存儲等場景中。LeetCode 第 271 題“字符串的編碼與解碼”要求我們設…

GitHub打開緩慢甚至失敗的解決辦法

在C:\Windows\System32\drivers\etc的hosts中增加如下內容: 20.205.243.166 github.com 199.59.149.236 github.global.ssl.fastly.net185.199.109.153 http://assets-cdn.github.com 185.199.108.153 http://assets-cdn.github.com 185.199.110.153 http://asset…

重生之我在2024學Fine-tuning

一、Fine-tuning(微調)概述 Fine-tuning(微調)是機器學習和深度學習中的一個重要概念,特別是在預訓練模型的應用上。它指的是在模型已經通過大量數據訓練得到一個通用的預訓練模型后,再針對特定的任務或數據…

計算機網絡 4-2-1 網絡層(IPv4)

2 IPv4分組 各協議之間的關系 IP協議(Internet Protocol, 網際協議)是互聯網的核心&#xff01; ARP協議用于查詢同一網絡中的<主機IP地址&#xff0c;MAC地址>之間的映射關系 ICMP協議用于網絡層實體之間相互通知“異常事件” IGMP協議用于實現IP組播 2.1 結構<首…

Docker中運行的Chrome崩潰問題解決

問題 各位看官是否在 Docker 容器中的 Linux 桌面環境&#xff08;如Xfce&#xff09;上啟動Chrome &#xff0c;遇到了令人沮喪的頻繁崩潰問題&#xff1f;尤其是在打開包含圖片、視頻的網頁&#xff0c;或者進行一些稍復雜的操作時&#xff0c;窗口突然消失&#xff1f;如果…

K8S cgroups詳解

以下是 Kubernetes 中 cgroups&#xff08;Control Groups&#xff09; 的詳細解析&#xff0c;涵蓋其核心原理、在 Kubernetes 中的具體應用及實踐操作&#xff1a; 一、cgroups 基礎概念 1. 是什么&#xff1f; cgroups 是 Linux 內核提供的 資源隔離與控制機制&#xff0c…

javaer快速從idea轉戰vscode

插件安裝列表 在插市場安裝下面插件 Extension Pack for JavaSpring Boot Tools 配置文件提示Database Client Database/No-SQL管理工具httpYac - Rest Client .http文件編輯、API測試工具 https://httpyac.github.io/guide/request.htmlGit Graph 圖形化Git工具XML by Red H…

[項目總結] 抽獎系統項目技術應用總結

&#x1f338;個人主頁:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;?熱門專欄: &#x1f9ca; Java基本語法(97平均質量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection與…

【趙渝強老師】TiDB SQL層的工作機制

TiDB節點的SQL層&#xff0c;即TiDB Server&#xff0c;它負責將SQL翻譯成Key-Value操作&#xff0c;將其轉發給共用的分布式Key-Value存儲層TiKV&#xff0c;然后組裝TiKV返回的結果&#xff0c;最終將查詢結果返回給客戶端。這一層的節點都是無狀態的&#xff0c;節點本身并不…

性能遠超SAM系模型,蘇黎世大學等開發通用3D血管分割基礎模型

如果把人的身體比作一座龐大的城市&#xff0c;那么血管無疑就是這座城市的「道路」&#xff0c;動脈、靜脈以及毛細血管對應著高速公路、城市道路以及鄉間小道&#xff0c;它們相互協作&#xff0c;通過血液將營養物質、氧氣等輸送到身體各處&#xff0c;從而維持著這座「城市…

git高效殺器——cz-customizable 搭配 commitlint

What is cz-customizable and commitlint? cz-customizable 一款可定制化的Commitizen插件(也可作為獨立工具),旨在幫助創建如約定式提交規范的一致性提交消息。commitlint commitlint 是一個用于檢查 Git 提交信息的工具,它可以幫助開發者保持提交信息的規范性和一致性。…

Spark 中RDD、Job,stage,task的關系

目錄 1. 概念定義1.1 Job1.2 Stage1.3 Task 2. 關系總結3. 示例分析代碼示例執行過程 4. Spark中的運行流程5. 關鍵點5.1 寬依賴和窄依賴5.2 并行度5.3 性能優化 **6. 總結****1. RDD的核心作用****1.1 什么是RDD&#xff1f;****1.2 RDD與Job、Stage、Task的關系** **2. Job、…

Kubernetes基礎(三十二):Worker節點啟動全解析

Worker節點是Kubernetes集群的"肌肉"&#xff0c;負責實際運行業務負載。本文將深入剖析Worker節點的完整啟動流程&#xff0c;并揭秘生產環境中的關鍵優化點。 一、啟動流程全景圖 二、核心啟動階段詳解 1. 系統初始化&#xff08;0-30秒&#xff09; 關鍵任務&a…

matlab實現模型預測控制

考慮擴展狀態空間形式 縮寫為 對于未來的預測&#xff0c;這里要注意&#xff0c;默認了最小預測時域為1&#xff0c;如果不為1&#xff0c;從k1到k最小預測時域的x的預測為0 模型預測控制matlab運行代碼&#xff0c;可實現模型預測控制。 StateMPC是按照錢積新版《預測控制》…

Python_day22

DAY 22 復習日 復習日 仔細回顧一下之前21天的內容&#xff0c;沒跟上進度的同學補一下進度。 作業&#xff1a; 自行學習參考如何使用kaggle平臺&#xff0c;寫下使用注意點&#xff0c;并對下述比賽提交代碼 kaggle泰坦里克號人員生還預測 一、Kaggle 基礎使用步驟 注冊與登錄…