1. 程式人生 > >STM32CubeMX學習筆記——STM32H743輸入捕獲

STM32CubeMX學習筆記——STM32H743輸入捕獲

Github

功能簡述

在PA0上進行輸入捕獲,將輸入訊號的頻率與高/低電平時間分別儲存在pre、time變數中

STM32CubeMX配置

STM32CubeMX版本:4.27.0
配置流程:
Pinout介面選擇並開啟TIM5 RCC
Clock Configuration配置時鐘樹
Configuration介面配置System
生成工程

Pinout配置

在這裡插入圖片描述
開啟TIM5定時器並設定為輸入捕獲模式

Clock Configuration配置

在這裡插入圖片描述
開啟系統時鐘,TIM5時鐘(APB1)

Configuration

在這裡插入圖片描述
左側主要系統功能的開啟,或中間軟體層功能的開啟(如:RTOS、JPEG解碼器,檔案系統等)
右側是系統及外設模組的具體配置

GPIO

在這裡插入圖片描述

TIM5

在這裡插入圖片描述
週期=((1+TIM_Prescaler )/時鐘)*(1+TIM_Period )
分頻:0
計數模式:向上計數
重灌值:0xffffffff
時鐘分割:0 (數字濾波器相關)
自動重灌:關閉
MSM:關閉(開啟將在該定時器使能的同時TRGO發出訊號)

Polarity Selection:捕獲方式,當前選擇上升沿、下降沿都會觸發
IC Selection:對映中斷線
Prescaler Division Ratio:輸入分頻
Input Filter:濾波器

NVIC

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

程式碼部分

main.c

/* USER CODE BEGIN 2 */
	HAL_TIM_IC_Start_IT
(&htim5,TIM_CHANNEL_1); /* USER CODE END 2 */

stm32h7xx_it.c

/* USER CODE BEGIN 0 */
uint32_t last = 0;
double fre = 0;
double time = 0;
/* USER CODE END 0 */

/* USER CODE BEGIN 1 */
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	uint32_t i = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
	
	if
(last < i){ time = (i - last) / 200000000.0; fre = 200000000.0 / ((i - last) * 2); } else { time = ((0xffffffff - last) + i) / 200000000.0; fre = 200000000.0 / (((0xffffffff - last) + i) * 2); } last = i; } /* USER CODE END 1 */