Skip to main content
RGünt.1
Associate II
May 23, 2021
Question

I cannot find a program example (HAL_TIM_IC_CaptureCallback() for the input capture mode described in 14.3.6 PWM input mode (13902_STM32_ReferenceManual_11.pdf ). The attached user code works as I expect, but it is unclear to me if everything is corr

  • May 23, 2021
  • 2 replies
  • 1609 views

0693W00000APLUMQA5.jpgvolatile uint32_t udwIC1_Val1 = 0;

volatile uint32_t udwIC2_Val1 = 0;

volatile uint16_t uwDuty_Cycle = 0;

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef* htim)

{

if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)

{

udwIC1_Val1 = htim->Instance->CCR1;

udwIC2_Val1 = htim->Instance->CCR2;

uwDuty_Cycle = (udwIC2_Val1 * 100) / udwIC1_Val1;

udwFrequency = HAL_RCC_GetPCLK1Freq() / udwIC1_Val1 / htim->Instance->PSC;

}

}

This topic has been closed for replies.

2 replies

waclawek.jan
Super User
May 23, 2021

The Reference Manual describes the hardware, not one particular piece of software ("library") Cube/HAL is. For that you have to resort to Cube's manual.

I don't use Cube but the code appears to be OK to me.

Please note that the measured values are off by a couple of cycles (maybe literally 2) due to internal delay between the input signal's edge and the moment when the counter reset actually occurs. This is not documented in ST's materials. This may be OK for your application, if better accuracy is desired, don't use the reset mode of slave-mode controller, simply leave the counter free-running, and calculate period/duty by subtracting consecutively captured values.

JW

RGünt.1
RGünt.1Author
Associate II
May 24, 2021

First of all, thank you for your quick reply and for pointing out a possible measurement inaccuracy caused by resetting the counter.

With kind regards

R.G.