STM32 定时器寄存器(PWM 测量)不工作

问题描述 投票:0回答:1

我正在尝试测量 STM32G431RB 上信号的脉冲宽度,并且我一直从计数器寄存器中获取随机值。我已经检查过信号,它很好(来自接收器的 PWM 信号)。

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){

    if (htim -> Instance == TIM2 && htim -> Channel == HAL_TIM_ACTIVE_CHANNEL_1 && state == 0) {
        IC_Val1 = TIM2 -> CNT;
        __HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING);
        state = 1;
    }

    if(htim -> Instance == TIM2 && htim -> Channel == HAL_TIM_ACTIVE_CHANNEL_1 && state == 1){
        IC_CH1 == TIM2 -> CNT;

        if (IC_Val1 > IC_CH1){
            Difference = IC_Val1 - IC_CH1;
        }
        else {
            Difference = (0xffffffff  - IC_CH1) + IC_Val1;
        }

        __HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
        state = 0;
    }


}

我确定捕获回调中断例程被调用正常,但“差异”变量(uint32_T)一直给我随机数。

对于任何错误的格式表示歉意,这是我的第一篇文章哈哈。

c timer embedded stm32 pwm
1个回答
0
投票

您正在修改

state
并重新测试它。正确计时器的测试应独立于测试 if
state
,修改后不应重新测试。

if (htim -> Instance == TIM2 && 
   htim -> Channel == HAL_TIM_ACTIVE_CHANNEL_1 )
{
    if( state == 0 )
    {
        IC_Val1 = TIM2 -> CNT;
        __HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING);
        state = 1;
    }
    else
    {
        IC_CH1 == TIM2 -> CNT;

        if (IC_Val1 > IC_CH1){
            Difference = IC_Val1 - IC_CH1;
        }
        else {
            Difference = (0xffffffff  - IC_CH1) + IC_Val1;
        }
    
        __HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
        state = 0;
    }
}

可能还有其他问题,但问题缺乏足够的上下文来确定。

© www.soinside.com 2019 - 2024. All rights reserved.