скрытое меню

Несколько импульсов

Пока изучаем варианты без FreeRTOS.

Настройки таймера в Кубе

фотка 1

Связка 1 с включенными прерываниями от таймера

HAL_TIM_PWM_Start_IT
HAL_TIM_PWM_PulseFinishedCallback или HAL_TIM_OC_DelayElapsedCallback
HAL_TIM_PWM_Stop_IT

HAL_TIM_PWM_Start_IT дает один импульс

фотка 2

В HAL_TIM_PWM_PulseFinishedCallback считаем количество импульсов и когда надо останавливаем процесс , т.е. вызываем HAL_TIM_PWM_Stop_IT.

Устанавливаем счетчик в 0 и в прерывании счетчик увеличиваем на единицу:

void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
	/* Prevent unused argument(s) compilation warning */

	if(htim->Instance == TIM3)
	{
		waitT3++;
		printf("~"); // трассировка никогда не помешает
	}
}

В основном цикле программы тупо ждем значения допустим 50 :

фотка 1

Отсчитали нужное количество импульсов и обязательно вызвали в конце HAL_TIM_PWM_Stop_IT.
Вполне себе рабочий вариант.

Связка 2

Практически то же самое происходит.

HAL_TIM_OC_Start_IT
HAL_TIM_PWM_PulseFinishedCallback или HAL_TIM_OC_DelayElapsedCallback
HAL_TIM_OC_Stop_IT

фотка 2

Без прерываний использовать таймеры наверное не очень разумно. Поэтому и не будем.

Все прерывания всех таймеров начинаются в коллбеке : HAL_TIM_IRQHandler.