Пн окт 10, 2022 07:48:30
Пн окт 10, 2022 09:16:45
Пн окт 10, 2022 10:04:43
Пн окт 10, 2022 14:43:55
OPM режим с прерыванием по UEV: в прерывании EXTI запускаешь таймер, он дает тебе два первых импульса. Затем перенастраиваешь в прерывании UEV на 500мкс, опять запускаешь, уже отключив прерывание UEV.
Еще более разумный вариант — запусить передачу при помощи DMA, пусть он в CC1/ARR и пишет нужные значения. Тогда проблемы с длительностью будут минимальными.
А разве так можно делать? Я чет даже не знаю...объединить выход двух таймеров
Вт окт 11, 2022 01:07:55
Вт окт 11, 2022 09:47:45
Вт окт 11, 2022 11:53:54
HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_4);
State = 1;
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM3)
{
switch (State)
{
case 1:
TIM3->CCR4 = 24999;
TIM3->ARR = 49999;
TIM3->EGR = TIM_EGR_UG;
State++;
break;
case 2:
TIM3->CCR4 = 4999;
TIM3->ARR = 9999;
TIM3->EGR = TIM_EGR_UG;
HAL_TIM_PWM_Stop_IT(&htim3, TIM_CHANNEL_4);
State = 1;
break;
default:
__NOP();
}
}
}
Вт окт 11, 2022 13:01:20
Вт окт 11, 2022 13:03:01
Вт окт 11, 2022 15:52:03
Eddy_Em писал(а):запусить передачу при помощи DMA, пусть он в CC1/ARR и пишет нужные значения.
Вт окт 11, 2022 22:42:12
Ср окт 12, 2022 13:47:42
if(htim->Instance == TIM2)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4); // WorkTest
switch (State)
{
case 1:
State++;
break;
case 2:
TIM2->CCR4 = 50000 - 1;
TIM2->ARR = 50000 - 1;
TIM2->EGR = TIM_EGR_UG;
State++;
break;
case 3:
HAL_TIM_OC_Stop_IT(&htim2, TIM_CHANNEL_4);
TIM2->CCR4 = 5000 - 1;
TIM2->ARR = 5000 - 1;
TIM2->EGR = TIM_EGR_UG;
HAL_TIM_OC_Start_IT(&htim2, TIM_CHANNEL_4);
State = 1;
break;
default:
__NOP();
}
}
Ср окт 12, 2022 13:50:21
Ср окт 12, 2022 14:08:47
Ср окт 12, 2022 14:22:49
Настраивайте однозначно в какой точке устанавливать высокий уровень, а в какой низкий
Ну и еще раз напомню о DMA
А также, видимо, мимо пролетело: было же предложение SPI или I2C использовать
P.S. А код реально жуткий. Дрыгать ногодрыгом в прерывании от таймера, когда можно напрямую в ШИМ-режиме…
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4); // WorkTest
Ср окт 12, 2022 14:32:03
Ср окт 12, 2022 14:50:56
А ртось - это фу
Ср окт 12, 2022 15:06:22
Ср окт 12, 2022 15:22:24
Ср окт 12, 2022 15:55:09