1. 程式人生 > 其它 >STM32 HAL庫 CUBEMX 定時器雙通道 高精度捕獲PWM波

STM32 HAL庫 CUBEMX 定時器雙通道 高精度捕獲PWM波

原文連結https://blog.csdn.net/yuleitao/article/details/104055748

使用標準庫來配置的,可以看我之前的部落格
https://blog.csdn.net/yuleitao/article/details/103721812
這個專案是使用CUBEMX配置,hal庫來寫,實現的功能一樣

幾個點注意

使用定時器1,將通道1設定為主模式(直接模式),通道2設定為從模式(非直接模式)
通道1捕獲上升沿,通道二捕獲下降沿
節省CPU時間,提高捕獲精度
CUBEMX配置
時鐘,系統這些就不說了,直接最關鍵的部分,開定時器TIM1

trigger source 選擇 TI1FP1

clock source 選擇 internal clock
channel1 選擇 input capture direct mode
channel2 選擇 input capture indirect mode
下方的設定按照圖上所設一樣就行
最後開啟工程,插入如下程式碼,開啟定時器1通道1和通道2的捕獲中斷

  /* USER CODE BEGIN 2 */

    HAL_TIM_IC_Start_IT(&htim1,TIM_CHANNEL_1);
    HAL_TIM_IC_Start_IT(&htim1,TIM_CHANNEL_2);

  /* USER CODE END 2 */
/* USER CODE BEGIN 0 */

uint32_t Cap_Data1 ;
uint32_t Cap_Data2 ;
float Fre_Cap = 0.0;
float zhouqi_Cap = 0.0;
float Pwm_Duty = 0.0;

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) { Cap_Data1 = HAL_TIM_ReadCapturedValue(&htim1,TIM_CHANNEL_1); if(Cap_Data1 != 0 ) { Fre_Cap = 16.8 * 1000000/Cap_Data1; zhouqi_Cap = 1 / Fre_Cap; Pwm_Duty = Cap_Data2 * 1.0
/Cap_Data1; } } if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2) { Cap_Data2 = HAL_TIM_ReadCapturedValue(&htim1,TIM_CHANNEL_2); } } /* USER CODE END 0 */



Talk is cheap, show me the code