HAL庫定時器配置

定時器的開啟需要手動開啟,例如在driver_capature.c開啟,該文件主要寫了具體的函數實現,與driver_can.c一樣,同時還有回調函數等一些高級的自定義函數。

這段代碼是 STM32 HAL 庫中用于初始化 定時器 2 (TIM2) 的函數 MX_TIM2_Init。它配置了定時器的基礎功能,時鐘源,輸入捕獲通道以及中斷功能。以下是逐行解釋:

1. 函數開始部分

void MX_TIM2_Init(void)
{/* USER CODE BEGIN TIM2_Init 0 *//* USER CODE END TIM2_Init 0 */

這部分是用戶自定義代碼的區域,通常用于在初始化代碼執行之前添加自定義操作。USER CODE 區域通常是可以修改的區域。

2. 定時器配置結構體定義

  TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};TIM_IC_InitTypeDef sConfigIC = {0};

這里定義了三個結構體,用于定時器配置:

  • TIM_ClockConfigTypeDef:用于配置定時器的時鐘源。
  • TIM_MasterConfigTypeDef:用于配置定時器的主/從模式。
  • TIM_IC_InitTypeDef:用于配置定時器的輸入捕獲通道。

3. 定時器實例配置

  htim2.Instance = TIM2;htim2.Init.Prescaler = 167;htim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = 65535;htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;

這里配置了定時器 2 (TIM2) 的一些基本參數:

  • Instance = TIM2:指定定時器 2。
  • Prescaler = 167:設置定時器預分頻器值。它決定定時器的計數頻率。具體計數頻率為系統時鐘頻率除以(預分頻器 + 1)。
  • CounterMode = TIM_COUNTERMODE_UP:設置計數模式為遞增模式(計數從 0 到 Period)。
  • Period = 65535:設置定時器的自動重載值,即計數器從 0 增加到 65535 后重載(溢出)。
  • ClockDivision = TIM_CLOCKDIVISION_DIV1:定時器時鐘分頻因子。
  • AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE:禁用自動重載預加載。

4. 初始化定時器

  if (HAL_TIM_Base_Init(&htim2) != HAL_OK){Error_Handler();}

這行代碼調用 HAL_TIM_Base_Init 函數來初始化定時器。若初始化失敗,則調用 Error_Handler() 來處理錯誤。

5. 配置定時器時鐘源

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK){Error_Handler();}
  • 設置定時器時鐘源為內部時鐘源 (TIM_CLOCKSOURCE_INTERNAL)。
  • 調用 HAL_TIM_ConfigClockSource 來配置時鐘源,如果配置失敗,則調用 Error_Handler()

6. 初始化定時器的輸入捕獲功能

  if (HAL_TIM_IC_Init(&htim2) != HAL_OK){Error_Handler();}
  • 調用 HAL_TIM_IC_Init 來初始化定時器的輸入捕獲功能。如果失敗,則調用 Error_Handler()

7. 配置定時器的主模式

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK){Error_Handler();}
  • 配置定時器的主輸出觸發為復位信號(TIM_TRGO_RESET)。
  • 設置主從模式為禁用(TIM_MASTERSLAVEMODE_DISABLE)。
  • 使用 HAL_TIMEx_MasterConfigSynchronization 來配置同步。如果配置失敗,則調用 Error_Handler()

8. 配置輸入捕獲通道

  sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;sConfigIC.ICFilter = 0;if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK){Error_Handler();}if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK){Error_Handler();}if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_3) != HAL_OK){Error_Handler();}if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_4) != HAL_OK){Error_Handler();}

這些代碼為 TIM2 的 4 個輸入捕獲通道進行配置:

  • ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING:設置輸入捕獲的極性為上升沿觸發。
  • ICSelection = TIM_ICSELECTION_DIRECTTI:選擇直接連接輸入信號。
  • ICPrescaler = TIM_ICPSC_DIV1:設置輸入捕獲的預分頻器(沒有分頻)。
  • ICFilter = 0:設置輸入濾波器。

這些配置分別應用于定時器 2 的通道 1、2、3 和 4。

9. 配置中斷和啟動輸入捕獲

  /* USER CODE BEGIN TIM2_Init 2 *//* Add by xinggaoyong */__HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE|TIM_FLAG_CC1|TIM_FLAG_CC2);__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_UPDATE);__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_CC1);__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_CC2);__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_CC3);__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_CC4);HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_1);HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_2);HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_3);HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_4);  __HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING);__HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_2, TIM_INPUTCHANNELPOLARITY_FALLING);__HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_3, TIM_INPUTCHANNELPOLARITY_FALLING);__HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_4, TIM_INPUTCHANNELPOLARITY_FALLING);/* USER CODE END TIM2_Init 2 */
  • __HAL_TIM_CLEAR_FLAG:清除定時器的標志位,如溢出標志和輸入捕獲標志。
  • __HAL_TIM_ENABLE_IT:使能定時器的中斷(溢出中斷、輸入捕獲中斷)。
  • HAL_TIM_IC_Start:啟動輸入捕獲功能。
  • __HAL_TIM_SET_CAPTUREPOLARITY:設置捕獲極性為下降沿,意味著輸入信號的下降沿觸發捕獲事件。

10. 函數結束

}

函數結束,所有初始化工作完成。

總結

這段代碼主要用于初始化 TIM2 定時器,配置輸入捕獲功能并啟用中斷。它設置了定時器的時鐘、輸入捕獲的配置、定時器的主從模式、并啟用了多通道的輸入捕獲中斷。

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

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

相關文章

使用Python開發自動駕駛技術:車道線檢測模型

友友們好! 我是Echo_Wish,我的的新專欄《Python進階》以及《Python!實戰!》正式啟動啦!這是專為那些渴望提升Python技能的朋友們量身打造的專欄,無論你是已經有一定基礎的開發者,還是希望深入挖掘Python潛力的愛好者,這里都將是你不可錯過的寶藏。 在這個專欄中,你將會…

Modern C++面試題及參考答案

目錄 解釋右值引用的定義及其與左值引用的核心區別 std::move 的實現原理是什么?為什么它本身不執行移動操作? 移動構造函數與拷貝構造函數的調用場景有何不同? 實現一個支持移動語義的類需要遵循哪些原則? 完美轉發(Perfect Forwarding)的實現原理及 std::forward 的…

Thinkphp(TP)框架漏洞攻略

1.環境搭建 vulhub/thinkphp/5-rce docker-compose up -d 2.訪問靶場 遠程命令執行: ? sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1] []whoami 遠程代碼執行: ? s/Index/\think\app/invokefunc…

QT筆記---JSON

QT筆記---JSON JSON1、JSON基本概念1.1、判斷.json文件工具 2、生成.json數據3、解析.json數據 JSON 在現代軟件開發中,數據的交換和存儲格式至關重要。JSON(JavaScript Object Notation)作為一種輕量級的數據交換格式,以其簡潔易…

Unity 使用 Protobuf(Pb2)二進制數據全流程工具詳解

前言 在Unity游戲開發中,高效、快速、安全地讀取配置數據是一項重要需求。本文介紹一種完整的解決方案——使用Protobuf二進制格式(Pb2)存儲和讀取游戲數據,并詳細分享實現全流程的Unity工具。 一、技術流程概覽 實現Unity讀取…

MySQL-----視圖與索引

目錄 視圖 1.視圖 2.操作 11.索引 1.定義 2.優缺點: 3.分類 4.索引的設計原則 5.索引的使用 作業 視圖 1.視圖 ?如果需要在原表中隱藏部分字段時,怎么辦? 視圖 📖視圖: 是一個沒有存儲任何數據的表,可以對其CRUD視圖…

stm32-IIC

i^2c,iiCBus,集成電路總線,同步串行半雙工通信總線方式 sck:時鐘同步信號 SDA:發送數據 GND:接地 通信對象:芯片與芯片 主從應答方式: SDA:數據總線 SCL:時鐘總線 在硬件設計中: 上拉電阻&#…

`chromadb` 是什么

chromadb 是什么 chromadb 是一個開源的向量數據庫,它專門用于存儲、索引和查詢向量數據。在處理自然語言處理(NLP)、計算機視覺等領域的任務時,通常會將文本、圖像等數據轉換為向量表示,而 chromadb 可以高效地管理這些向量,幫助開發者快速找到與查詢向量最相似的向量數…

機器視覺工程師如何看機器視覺展會,有些機器視覺兄弟參加機器視覺展會,真的是參加了?重在參與?

作為機器視覺工程師,參加機器視覺展會不僅是了解行業前沿技術的窗口,也是拓展專業網絡、尋找解決方案的重要機會。以下是結合展會信息和工程師視角的綜合建議: 一、聚焦技術趨勢與創新應用 參與技術論壇與研討會 展會同期的技術論壇是獲取行業洞見的核心渠道。例如: 上海展…

Centos操作系統安裝及優化

Centos操作系統安裝及優化 零、環境概述 主機名 centos版本 cpu 內存 Vmware版本 ip地址 test CentOS Linux release 7.6.1810 (Core) 2C 2G 15.5.1 10.0.0.10 一、介質下載 1、7.6版本下載 CentOS7.6標準版下載鏈接: https://archive.kernel.org/centos-vault/7.6.1810/i…

Edge瀏覽器如何默認啟動某個工作區 / 為工作區添加快捷方式

Edge瀏覽器的工作區確實非常好用,可以多端同步標簽頁。但是打開Edge時默認是沒有在工作區的狀態,這個狀態下的標簽頁可能會丟失。所以我研究了一下,如何點擊快捷方式時自動啟動一個工作區,方法如下: 先找到WorkspaceCa…

mac上安裝nvm及nvm的基本語法使用!!

種一棵樹,最好是十年前,其次是現在!想要改變,從此刻開始,一切都不晚! 目錄 nvm是什么?前提條件:安裝homebrew如果系統已經有node版本:在mac上安裝nvm:用nvm安…

CPP中的numeric庫中的accumulate求和函數說明

導入 accumulate函數位于numeric庫中,作用是對數組或向量求和 // 設定初始值為0,從dp[0]到dp[n-1]進行累加 accumulate(dp,dpn,0);注意:這里的第二個參數是開區間,所以求和時不包含dp[n]這一位

Qt 高效讀寫JSON文件,玩轉QJsonDocument與QJsonObject

一、前言 JSON作為輕量級的數據交換格式,已成為開發者必備技能。Qt框架為JSON處理提供了完整的解決方案,通過QJsonDocument、QJsonObject和QJsonArray三大核心類,輕松實現數據的序列化與反序列化。 JSON vs INI 特性JSONINI數據結構支持嵌…

Kubernetes(k8s)-Pod親和性(Affinity)和反親和性(Anti-affinity)

作者介紹:簡歷上沒有一個精通的運維工程師。請點擊上方的藍色《運維小路》關注我,下面的思維導圖也是預計更新的內容和當前進度(不定時更新)。 我們上一章介紹了Docker基本情況,目前在規模較大的容器集群基本都是Kubernetes,但是K…

ESP32-C3物聯網方案,智能設備創新升級,無線交互控制通信應用

在物聯網技術迅猛發展的今天,各類智能設備如雨后春筍般涌現,深度融入我們生活與工作的各個角落,物聯網正以一種前所未有的速度改變著我們的世界。 想象一下,清晨,當第一縷陽光灑進房間,智能窗簾自動緩緩拉…

Python自動化測試 之 DrissionPage 的下載、安裝、基本使用詳解

Python自動化測試 之 DrissionPage 使用詳解 🏡前言:一、??DrissionPage的基本概述二、 🗺?環境安裝2.1 ???運行環境2.2 ???一鍵安裝 三、🗺?快速入門3.1 頁面類🛰?ChromiumPage🛫 SessionPage&…

【操作系統安全】任務3:Linux 網絡安全實戰命令手冊

目錄 一、基礎網絡信息獲取 1. 網絡接口配置 2. 路由表管理 3. 服務端口監控 二、網絡監控與分析 1. 實時流量監控 2. 數據包捕獲 3. 網絡協議分析 三、滲透測試工具集 1. 端口掃描 2. 漏洞利用 3. 密碼破解 四、日志審計與分析 1. 系統日志處理 2. 入侵檢測 3…

社群經濟4.0時代:開源鏈動模式與AI技術驅動的電商生態重構

摘要:在Web3.0技術浪潮與私域流量紅利的雙重驅動下,電商行業正經歷從"流量收割"到"用戶深耕"的范式轉變。本文基于社群經濟理論框架,結合"開源鏈動21模式"、AI智能名片、S2B2C商城小程序源碼等創新工具&#x…

從技術架構和生態考慮,不是單純的配置優化,還有哪些方式可以提高spark的計算性能

從技術架構和生態系統層面提升Spark的計算性能,可采取以下核心策略: 一、計算模型重構與執行引擎升級 1. 彈性分布式數據集(RDD)的血統優化 通過RDD的Lineage(血統)機制實現容錯時,采用增量式…