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 */

 

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM