定時(shí)器輸入捕獲功能
1 輸入捕獲功能概述
1.1 輸入捕獲功能的用途和工作原理
- 用途:用于測量信號的參數(shù),比如周期和頻率。
- 工作原理:在輸入捕獲模式下,當(dāng)捕獲單元捕捉到外部信號的有效邊沿(上升沿/下降 沿/雙邊沿)時(shí),將計(jì)數(shù)器的當(dāng)前值鎖存到捕獲/比較寄存器TIMx_CCR, 供用戶讀取。
1.2 捕獲通道的內(nèi)部結(jié)構(gòu)
1.3 捕獲過程示意圖
將兩次捕獲值相減,再乘以計(jì)數(shù)時(shí)間可計(jì)算出信號周期
1.4 信號參數(shù)計(jì)算公式
信號參數(shù)計(jì)算公式
周期
頻率
當(dāng)待測信號不大于定時(shí)器的一個(gè)完整計(jì)數(shù)周期(從0到ARR)時(shí)。假設(shè)兩次連續(xù)的捕獲值分別為CCRx_1 和 CCRx_2,則捕獲差值可以按照如下方法計(jì)算:
- 如果 CCRx_1 < CCRx_2:捕獲差值 = CCRx_2 - CCRx_1
- 如果 CCRx_1 > CCRx_2:捕獲差值 = (ARR + 1 - CCRx_1) + CCRx_2
注意:如果待測信號大于定時(shí)器的一個(gè)完整計(jì)數(shù)周期,則需要結(jié)合定時(shí)器的更新中斷次數(shù)來計(jì)算捕獲差值。
1.5 輸入捕獲功能的數(shù)據(jù)類型和接口函數(shù)
成員變量ICPolarity的取值范圍
宏常量定義 | 含義 |
---|---|
TIM_ICPOLARITY_RISING | 上升沿捕獲 |
TIM_ICPOLARITY_FALLING | 下降沿捕獲 |
TIM_ICPOLARITY_BOTHEDGE | 雙邊沿捕獲 |
成員變量ICSelection的取值范圍
宏常量定義 | 含義 |
---|---|
TIM_ICSELECTION_DIRECTTI | 直接輸入模式:捕獲通道CH1和CH2分別與IC1和IC2連接.捕獲通道CH3和CH4分別與IC3和IC4連接. |
TIM_ICSELECTION_DIRECTT2 | 間接輸入模式:捕獲通道CH1和CH2分別與IC2和IC1連接.捕獲通道CH3和CH4分別與IC4和IC3連接. |
TIM_ICSELECTION_TRC | 選擇從模式管理器的觸發(fā)信號TRC 作獲信號. |
成員變量ICPrescaler的取值范圍
宏常量定義 | 含義 |
---|---|
TIM_ICPSC_DIV1 | 檢測到輸入信號的每1個(gè)有效邊沿觸發(fā)1次捕獲 |
TIM_ICPSC_DIV2 | 檢測到輸入信號的每2個(gè)有效邊沿觸發(fā)1次捕獲 |
TIM_ICPSC_DIV3 | 檢測到輸入信號的每4個(gè)有效邊沿觸發(fā)1次捕獲 |
TIM_ICPSC_DIV4 | 檢測到輸入信號的每8個(gè)有效邊沿觸發(fā)1次捕獲 |
輸入捕獲啟動函數(shù):
HAL_TIM_IC_Start_IT
函數(shù)原型 uint32_t HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
功能描述 用于在中斷方式下啟動定時(shí)器的輸入捕獲功能 入口參數(shù) htim:定時(shí)器句柄的地址Channel:定時(shí)器通道號,取值范圍是TIM_CHANNEL_1~TIM_CHANNEL_4 返回值 HAL狀態(tài)值 注意事項(xiàng) 1. 該函數(shù)在定時(shí)器初始化完成之后調(diào)用2. 函數(shù)需要由用戶調(diào)用,用于使能定時(shí)器的捕獲中斷,并啟動定時(shí)器運(yùn)行 輸入捕獲停止函數(shù):
HAL_TIM_IC_Stop_IT
函數(shù)原型 HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
功能描述 用于停止在中斷方式下定時(shí)器的輸入捕獲功能 入口參數(shù) htim:定時(shí)器句柄的地址Channel:定時(shí)器通道號,取值范圍是TIM_CHANNEL_1~TIM_CHANNEL_4 返回值 HAL狀態(tài)值 注意事項(xiàng) 1. 該函數(shù)需要由用戶調(diào)用,用于禁止捕獲中斷,關(guān)閉輸入捕獲通道,停止 定時(shí)器運(yùn)行 輸入捕獲中斷回調(diào)函數(shù):
HAL_TIM_IC_CaptureCallback
函數(shù)原型 void HAL_TIM_IC_CaptureCallback (TIM_HandleTypeDef *htim)
功能描述 用于處理所有定時(shí)器的輸入捕獲中斷,用戶在該函數(shù)內(nèi)編寫實(shí)際的任務(wù)處理程序 入口參數(shù) htim:定時(shí)器句柄的地址 返回值 無 注意事項(xiàng) 1. 該函數(shù)由定時(shí)器中斷通用處理函數(shù)HAL_TIM_IRQHandler調(diào)用,完成所 有定時(shí)器輸入捕獲中斷的任務(wù)處理2. 函數(shù)內(nèi)部需要根據(jù)定時(shí)器句柄的實(shí)例來判斷是哪一個(gè)定時(shí)器的哪一個(gè)通道 產(chǎn)生的本次輸入捕獲中斷3. 函數(shù)由用戶根據(jù)具體的處理任務(wù)編寫 捕獲值讀取函數(shù):
HAL_TIM_ReadCapturedValue
函數(shù)原型 uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel)
功能描述 用于處理所有定時(shí)器的輸入捕獲中斷,用戶在該函數(shù)內(nèi)編寫實(shí)際的任務(wù)處理程序 入口參數(shù) htim:定時(shí)器句柄的地址Channel:定時(shí)器通道號,取值范圍是TIM_CHANNEL_1~TIM_CHANNEL_4 返回值 捕獲值 注意事項(xiàng) 1. 函數(shù)需要由用戶調(diào)用,用于讀取發(fā)生捕獲時(shí)的捕獲值 捕獲邊沿設(shè)置函數(shù):
__HAL_TIM_SET_CAPTUREPOLARITY
函數(shù)原型 __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__
功能描述 用于設(shè)置輸入信號的捕獲邊沿 入口參數(shù) HANDLE :定時(shí)器句柄的地址__Channel__:定時(shí)器通道號, 取值范圍是TIM_CHANNEL_1~TIM_CHANNEL_4__POLARITY__ :捕獲邊沿, 取值范圍是TIM_INPUTCHANNELPOLARITY_RISING/FALLING/BOTHEDGE 返回值 無 注意事項(xiàng) 1. 該函數(shù)是宏函數(shù),進(jìn)行宏替換,不發(fā)生函數(shù)調(diào)用2. 函數(shù)需要由用戶調(diào)用,用于設(shè)置輸入信號的有效捕獲邊沿
2 任務(wù)實(shí)踐
利用定時(shí)器2的通道1(對應(yīng)引腳PA0)來測量一個(gè)外部脈沖信號的周期和頻率,外部脈沖信號利用引腳PA6輸入。
- 配置定時(shí)器2時(shí)鐘源為內(nèi)部時(shí)鐘源(8MHz),通道一為輸入捕獲方式。
配置時(shí)基單元- 預(yù)分頻系數(shù)PSC為0,即計(jì)數(shù)時(shí)鐘CK_CNT為8MHz,便于擴(kuò)大測量頻率的范圍。
- 設(shè)置自動重載值A(chǔ)RR為最長的計(jì)數(shù)周期,便于擴(kuò)大測量頻率的脈寬。
配置輸入捕獲通道采用默認(rèn)參數(shù)
- 捕獲有效邊沿為上升沿
- 捕獲通道為直接輸入方式
- 捕獲信號不分頻
- 捕獲信號不進(jìn)行濾波
使能定時(shí)器2的全局中斷,中斷優(yōu)先級使用默認(rèn)值
- 配置定時(shí)器3時(shí)鐘源為內(nèi)部時(shí)鐘源(8MHz),通道一為PWM輸出模式。
設(shè)置預(yù)分頻系數(shù)PSC為399,自動重載值 ARR為199,表示PWM信號的周期為10ms。
設(shè)置捕獲/比較值CRR為100, 表示PWM信號的占空比為50% - 打開串口USART1,并在工程中添加頭文件和prinrf函數(shù)重定義,Keil中勾選USE MicroLIB。
在CubeMX中配置串口,在Keil中使用“Use MicroLIB”并在代碼中重定向printf函數(shù)的方法在STM32基礎(chǔ):定時(shí)器的定時(shí)計(jì)數(shù)功能中有詳細(xì)講解。 - 編寫程序
/* USER CODE BEGIN PV */ uint32_t Diff = 0; // 存放捕獲差值 uint32_t Period = 0; // 存放計(jì)算所得周期 uint8_t MeasureFlag = 0; // 測量完成標(biāo)志: 0表示未完成, 1表示完成 uint8_t CapIndex = 0; // 捕獲指示: 0表示沒有開始捕獲, 1表示完成一次捕獲 uint32_t CapVal1 = 0; // 存放第一次捕獲值 uint32_t CapVal2 = 0; // 存放第二次捕獲值 /* USER CODE END PV */ /* USER CODE BEGIN 2 */ printf("Timer Capture Function Test: n"); HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); /* USER CODE END 2 */ /* USER CODE BEGIN 3 */ if(MeasureFlag == 1) { if(CapVal2 >= CapVal1) { Diff = CapVal2 - CapVal1; } else { Diff = ((65535 + 1 - CapVal1) + CapVal2) ; } } Period = Diff/20000; printf ("Period is: %.4fmsrn", Diff/20000.0); printf ("Frequency is: %dHzrn", 8000000/Period); printf ("/*****************************/rn"); MeasureFlag = 0; HAL_Delay(1000); HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); } /* USER CODE END 3 */ /* USER CODE BEGIN 4 */ int fputc (int ch, FILE *f) { HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY); return ch; } int fgetc(FILE *f) { uint8_t ch = 0; HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY); return ch; } void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { if (htim- >Instance == TIM2) { if (htim- >Channel == HAL_TIM_ACTIVE_CHANNEL_1) { if (CapIndex == 0) { CapVal1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); CapIndex = 1; } if (CapIndex == 1) { CapVal2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); CapIndex = 0; MeasureFlag = 1; } else { Error_Handler(); } } } } /* USER CODE END 4 */
-
寄存器
+關(guān)注
關(guān)注
31文章
5368瀏覽量
121245 -
STM32
+關(guān)注
關(guān)注
2272文章
10925瀏覽量
357734 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2274瀏覽量
95034 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3256瀏覽量
115424
發(fā)布評論請先 登錄
相關(guān)推薦
定時(shí)器基礎(chǔ)知識
STM32 --通用定時(shí)器輸入捕獲功能 精選資料推薦
從應(yīng)用方面詳解STM32的定時(shí)器輸入捕獲模式
stm32定時(shí)器輸入捕獲
![<b class='flag-5'>stm32</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>](https://file1.elecfans.com//web2/M00/A6/D3/wKgZomUMQLOAJamCAABUT9Z5pOw168.png)
基于STM32定時(shí)器輸入捕獲解析
stm32 定時(shí)器 捕獲
基于STM32定時(shí)器捕獲測量脈寬的應(yīng)用示例
![基于<b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>捕獲</b>測量脈寬的應(yīng)用示例](https://file.elecfans.com/web1/M00/D6/6E/o4YBAF_jGbeAM_vcAAAVP2fagKE004.png)
STM32CubeMX——定時(shí)器輸入捕獲
![<b class='flag-5'>STM32</b>CubeMX——<b class='flag-5'>定時(shí)器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32定時(shí)器輸入捕獲實(shí)驗(yàn)
![<b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>實(shí)驗(yàn)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
stm32捕獲占空比_【話說定時(shí)器系列】之六:STM32定時(shí)器輸入捕獲話題
![<b class='flag-5'>stm32</b><b class='flag-5'>捕獲</b>占空比_【話說<b class='flag-5'>定時(shí)器</b>系列】之六:<b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>話題](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
stm32捕獲占空比_「話說定時(shí)器系列」之六:STM32定時(shí)器輸入捕獲話題
![<b class='flag-5'>stm32</b><b class='flag-5'>捕獲</b>占空比_「話說<b class='flag-5'>定時(shí)器</b>系列」之六:<b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>話題](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
通用定時(shí)器的輸入捕獲實(shí)驗(yàn)
![通用<b class='flag-5'>定時(shí)器</b>的<b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>實(shí)驗(yàn)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論