我正在尝试测量 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)一直给我随机数。
对于任何错误的格式表示歉意,这是我的第一篇文章哈哈。
您正在修改
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;
}
}
可能还有其他问题,但问题缺乏足够的上下文来确定。