STM32-第七節-TIM定時器-3(輸入捕獲)

一、簡介:

1.名稱:

IC,輸入捕獲

2.電路:

如圖為通用定時器框圖,下半部分的左半模塊,與輸出比較部分共用捕獲/比較寄存器引腳

3.功能:

當通道輸入引腳出現電平跳變時,當前CNT的值,寫入CCR中。

4.框圖:

信號先進入濾波器,其中ICF寄存器為濾波器參數,數值越大,濾波效果越好

隨后進入邊沿檢測器,用于檢測上升沿和下降沿,隨后CC1P寄存器,可控制極性。

隨后信號來到一個數據選擇器,可選擇輸出到捕獲/比較寄存器1的信號來自通道1還是通道2,實際上,輸入通道1.2與寄存器1.2是交叉的,即通道1的信號可以同時傳給寄存器1和2,通道2也可以。

寄存器ICPS位,用于控制分頻器,CC1E位,用于控制輸出使能或失能。

主從觸發模式:注意到TI1FP1信號,可以鏈接到從模式控制器,接下來介紹。

5.主從觸發模式:

主模式:定時器信號,通過TRGO引腳,控制其他外設。

從模式:外來信號,通過TRGI引腳,控制定時器。

二、頻率測量方法:

1.測頻法:在閘門時間T內,對上升沿計次為N,f = N/T,適用高頻信號

2.測周法,在兩個上升沿內,以標準頻率fc計次,得到N,f = fc/N,適用低頻信號

三、實戰:頻率測量

1.思路:

運用測周法測頻率,讓CNT以一定頻率計數,當上升沿到來后,CNT的數值記錄到CCR中,隨后將CNT清零(使用主從觸發模式,觸發源選擇TI1FP1,從模式選擇Reset功能)。

CCR的值,就是N,CNT的時鐘頻率,就是fc,f = fc/N。

2.功能圖:

3.代碼:IC.c

用PA0輸出PWM信號,用PA6(定時器3的通道1)做輸入捕獲。

#include "stm32f10x.h"                  // Device header/*** 函    數:輸入捕獲初始化* 參    數:無* 返 回 值:無*/
void IC_Init(void)
{/*開啟時鐘*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);			//開啟TIM3的時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);			//開啟GPIOA的時鐘/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);							//將PA6引腳初始化為上拉輸入/*配置時鐘源*/TIM_InternalClockConfig(TIM3);		//選擇TIM3為內部時鐘,若不調用此函數,TIM默認也為內部時鐘/*時基單元初始化*/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;				//定義結構體變量TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;     //時鐘分頻,選擇不分頻,此參數用于配置濾波器時鐘,不影響時基單元功能TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //計數器模式,選擇向上計數TIM_TimeBaseInitStructure.TIM_Period = 65536 - 1;               //計數周期,即ARR的值,越大越好TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;               //預分頻器,即PSC的值,此處1MHzTIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;            //重復計數器,高級定時器才會用到TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);             //將結構體變量交給TIM_TimeBaseInit,配置TIM3的時基單元/*輸入捕獲初始化*/TIM_ICInitTypeDef TIM_ICInitStructure;							//定義結構體變量TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;				//選擇配置定時器通道1TIM_ICInitStructure.TIM_ICFilter = 0xF;							//輸入濾波器參數,可以過濾信號抖動TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;		//極性,選擇為上升沿觸發捕獲TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;			//捕獲預分頻,選擇不分頻,每次信號都觸發捕獲TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;	//輸入信號交叉,選擇直通,不交叉TIM_ICInit(TIM3, &TIM_ICInitStructure);							//將結構體變量交給TIM_ICInit,配置TIM3的輸入捕獲通道/*選擇觸發源及從模式*/TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);					//觸發源選擇TI1FP1TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);					//從模式選擇復位//即TI1產生上升沿時,會觸發CNT歸零/*TIM使能*/TIM_Cmd(TIM3, ENABLE);			//使能TIM3,定時器開始運行
}/*** 函    數:獲取輸入捕獲的頻率* 參    數:無* 返 回 值:捕獲得到的頻率*/
uint32_t IC_GetFreq(void)
{return 1000000 / (TIM_GetCapture1(TIM3) + 1);		//測周法得到頻率fx = fc / N,這里不執行+1的操作也可
}

四、實戰:占空比測量

1.PWMI模式:

兩個通道,同時捕獲一個引腳,一個配置為上升沿觸發, 另一個配置為下降沿觸發,即可同時測量頻率與占空比,占空比=CCR1/CCR2。

2.功能圖:

3.代碼:新IC.c

#include "stm32f10x.h"                  // Device header/*** 函    數:輸入捕獲初始化* 參    數:無* 返 回 值:無*/
void IC_Init(void)
{/*開啟時鐘*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);			//開啟TIM3的時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);			//開啟GPIOA的時鐘/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);							//將PA6引腳初始化為上拉輸入/*配置時鐘源*/TIM_InternalClockConfig(TIM3);		//選擇TIM3為內部時鐘,若不調用此函數,TIM默認也為內部時鐘/*時基單元初始化*/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;				//定義結構體變量TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;     //時鐘分頻,選擇不分頻,此參數用于配置濾波器時鐘,不影響時基單元功能TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //計數器模式,選擇向上計數TIM_TimeBaseInitStructure.TIM_Period = 65536 - 1;               //計數周期,即ARR的值TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;               //預分頻器,即PSC的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;            //重復計數器,高級定時器才會用到TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);             //將結構體變量交給TIM_TimeBaseInit,配置TIM3的時基單元/*PWMI模式初始化*/TIM_ICInitTypeDef TIM_ICInitStructure;							//定義結構體變量TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;				//選擇配置定時器通道1TIM_ICInitStructure.TIM_ICFilter = 0xF;							//輸入濾波器參數,可以過濾信號抖動TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;		//極性,選擇為上升沿觸發捕獲TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;			//捕獲預分頻,選擇不分頻,每次信號都觸發捕獲TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;	//輸入信號交叉,選擇直通,不交叉TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);						//將結構體變量交給TIM_PWMIConfig,配置TIM3的輸入捕獲通道//此函數同時會把另一個通道配置為相反的配置,實現PWMI模式/*選擇觸發源及從模式*/TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);					//觸發源選擇TI1FP1TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);					//從模式選擇復位//即TI1產生上升沿時,會觸發CNT歸零/*TIM使能*/TIM_Cmd(TIM3, ENABLE);			//使能TIM3,定時器開始運行
}/*** 函    數:獲取輸入捕獲的頻率* 參    數:無* 返 回 值:捕獲得到的頻率*/
uint32_t IC_GetFreq(void)
{return 1000000 / (TIM_GetCapture1(TIM3) + 1);		//測周法得到頻率fx = fc / N,這里不執行+1的操作也可
}/*** 函    數:獲取輸入捕獲的占空比* 參    數:無* 返 回 值:捕獲得到的占空比*/
uint32_t IC_GetDuty(void)
{return (TIM_GetCapture2(TIM3) + 1) * 100 / (TIM_GetCapture1(TIM3) + 1);	//占空比Duty = CCR2 / CCR1 * 100,這里不執行+1的操作也可
}

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

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

相關文章

Console 納管 Elasticsearch 9(二):日志監控

前面介紹過 INFINI Console 納管 Elasticsearch 9(一),進行指標監控、數據管理、DSL 語句執行,但日志監控功能需要結合 Agent 才能使用。現在來實現一下: Agent 需要和 ES 部署到同一機器上,這里是在我本地…

實訓十——路由器與TCP/IP模型

補充拓撲圖(交換機串聯通信)電腦A——交換機S1——交換機S2——電腦B問:A和B如何通信?首先A會將通信的數據封裝好,將源端口、目標端口,源地址、目標地址,源MAC、目標MAC封裝起來,但是…

【Android】ViewBinding(視圖綁定)

一、什么是ViewBindingViewBinding是Android Studio 3.6推出的新特性,旨在替代findViewById(內部實現還是使用findViewById)。通過ViewBinding,可以更輕松地編寫可與視圖交互的代碼。在模塊中啟用ViewBinding之后,系統會為該模塊中的每個 XML…

泛型與類型安全深度解析及響應式API實戰

一、泛型通配符&#xff1a;靈活與安全的平衡術 在Java動物收容所系統中&#xff0c;我們常需要處理不同動物類型的集合。通過泛型通配符&#xff0c;可以構建更靈活的API&#xff1a; class Shelter<T extends Animal> {private List<T> animals new ArrayList&l…

Cookie 與 Session概述

在 Web 開發中&#xff0c;會話跟蹤是一個核心問題。HTTP 協議是無狀態的&#xff0c;這意味著服務器無法直接記住客戶端的狀態。而 Cookie 和 Session 技術的出現&#xff0c;正是為了解決這一難題。一、Cookie概述Cookie&#xff0c;翻譯成中文是小甜點、小餅干的意思。在 HT…

阿里云alicloud liunux3-安裝docker

你這個錯誤&#xff1a;Curl error (35): SSL connect error for https://download.docker.com/linux/centos/8/x86_64/stable/... Error: Failed to download metadata for repo docker-ce-stable: Yum repo downloading error說明你的機器訪問 download.docker.com 的 HTTPS …

【世紀龍科技】汽車故障診斷與排除仿真教學軟件

在汽車產業智能化、電動化轉型加速的今天&#xff0c;汽車維修行業對技術人才的要求已從傳統經驗型向“理論實踐數字化”復合型轉變。然而&#xff0c;實車實訓成本高、安全隱患大、教學場景受限等問題&#xff0c;始終制約著職業教育的高質量發展。江蘇世紀龍科技有限公司立足…

柴油機活塞cad【4張】三維圖+設計說明書

1015柴油機活塞結構設計及溫度場分析 摘 要 隨著科研的進步&#xff0c;內燃機技術得到了快速的發展&#xff0c;低排放高效率的內燃機的發展成為內燃機發展的主要趨勢&#xff0c;活塞作為內燃機的主要組成部件&#xff0c;在內燃機中扮演著至關重要的作用。活塞在內燃機中始終…

雪豹大模型驅動效率革命 華鼎冷鏈科技重構餐飲供應鏈神經網絡

當餐飲行業的開店率高達67.5%、閉店率達61.2%時&#xff0c;供應鏈該如何進行革新與升級&#xff1f; 在鄭州盛大啟幕的第三屆中國火鍋燒烤領潮峰會上&#xff0c;華鼎冷鏈科技CEO王君以“AI驅動智慧供應鏈賦能餐飲行業新升級”為主題分享時稱&#xff0c;當前餐飲行業高閉店率…

汽車功能安全 -- TC3xx外部看門狗

之前聊過TC3xx SMU關于內部看門狗&#xff08;CPU Watchdog 和Safety Watchdog&#xff09;Alarm的處理方法。 汽車功能安全--TC3xx SMU之看門狗alarm處理 在里面我們提到了這些Alarm關聯的功能安全機制&#xff1a; SM[HW]:SCU:ENDINIT_WATCHDOG SM[HW]:SCU:SAFETY_WATCHD…

如何為“地方升學導向型”語校建模?Prompt 框架下的宇都宮日建工科專門學校解析(7 / 500)

如何為“地方升學導向型”語校建模&#xff1f;Prompt 框架下的宇都宮日建工科專門學校解析&#xff08;7 / 500&#xff09; 系列說明 500 所日本語言學校結構化建模實戰&#xff0c;第 7 篇。每篇拆解 1 所學校在 Prompt-QA 系統中的建模策略&#xff0c;分享工程經驗&#x…

Flutter 入門指南:從基礎到實戰

介紹 Flutter Flutter 是 Google 開發的開源移動應用軟件開發工具包&#xff08;SDK&#xff09;&#xff0c;用于快速在 iOS 和 Android 上構建高質量的原生界面。Flutter 的一大特點是其跨平臺功能&#xff0c;讓開發者能夠使用同一套代碼基礎為兩個平臺構建應用。這一點通過…

八字命理:梟印奪食的形成原理與解決辦法

梟印奪食(|)含義:原局食神傷官為喜用&#xff0c;印為忌正印/偏印克制了食神/傷官&#xff0c;克制形式可以是蓋頭/截腳/同在天干或者地支時相克(2)表現癥狀:emo、敏感、好面子、不敢開口說話、被環境壓制(3)癥狀剖析:印為忌&#xff1d;他人即地獄&#xff0c;不論正印(吉神)還…

數組和對象的深拷貝和淺拷貝的方法

數組和對象的深拷貝、淺拷貝方法有所不同&#xff0c;以下是常見的實現方式&#xff1a;一、淺拷貝方法&#xff08;數組和對象通用/專用&#xff09;淺拷貝只復制表層數據&#xff0c;嵌套的引用類型仍共享內存。1. 數組的淺拷貝- 擴展運算符&#xff08;...&#xff09;&…

【RK3576】【Android14】開發板概述

獲取更多相關的【RK3576】【Android14】驅動開發&#xff0c;可收藏系列博文&#xff0c;持續更新中&#xff1a; 【RK3576】Android 14 驅動開發實戰指南 1. 引言 RK3576處理器簡介&#xff1a; RK3576 是一顆高性能、低功耗的應用處理器芯片&#xff0c;專為ARM PC、邊緣計算…

凸優化課程學習筆記(一)

凸優化課程學習筆記(一) 課程:B站清華大學陳劍博士《凸優化基礎理論與應用》 優化理論概述 1. 優化序論 定義:凸優化是一門應用極為廣泛的學科,主要研究如何對決策問題進行最優選擇,探討最優解的性質,尋找高效的計算方法,并分析這些方法的理論基礎與實際應用表現。…

(四)OpenCV——特征點檢測與匹配

前言 特征點檢測與匹配是計算機視覺中的基礎技術&#xff0c;廣泛應用于圖像拼接、物體識別、三維重建、運動跟蹤等領域。OpenCV 提供了多種特征檢測與匹配算法的實現。 特征點檢測與匹配是計算機視覺中的核心技術&#xff0c;廣泛應用于多個領域。以下是其主要應用場景&…

if (a == 1 a == 2 a == 3)返回true的問題思考

引文&#xff1a; 無意中看到了這樣的非常規邏輯&#xff0c;在想前后端應該都可以實現&#xff0c;a 是變量&#xff0c;或者操作a時觸發了值得改變。 意義&#xff1a; 該問題讓我們知道了一切規則都是可以被打破的&#xff0c;世界上的規則都是為了解釋某種現象設計的。 題目…

MySQL的索引操作及底層結構淺析

一.索引提高數據庫的性能&#xff0c;索引是物美價廉的東西了。不用加內存&#xff0c;不用改程序&#xff0c;不用調sql&#xff0c;只要執行正確的 create index &#xff0c;查詢速度就可能提高成百上千倍。但是天下沒有免費的午餐&#xff0c;查詢速度的提高是以插入、更新…

stm32f4 dma的一些問題

文章目錄前言一、使用開發板燒錄dma代碼不生效問題二、一個工程同時使用uart2、uart3借助dma來傳遞1.并行。2.DMA "同時工作"的本質3.總線訪問的具體含義4.實際效果5.最佳實踐5.1 總線傳輸機制&#xff1a;6.DMA傳輸中斷的問題總結前言 記錄一些使用stm32f4 dma過程…