Проблема с TIM11 STM32F401RCT6

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Грызет канифоль
Аватара пользователя
Сообщения: 253
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

Доброго времени суток.
Переменная 1 = 250.
Переменная 2 = 36000.
1-Загружаю в ARR переменную 2, жду прерывание, останавливаю таймер.
2-Загружаю в ARR переменную 1, жду прерывание, останавливаю таймер.
3-Пауза на 3мСек.
4-Загружаю в ARR переменную 2, жду прерывание, останавливаю таймер.(Здесь проблема)
5-Загружаю в ARR переменную 1, жду прерывание, останавливаю таймер.
6-Пауза на 3мСек.
И далее все повторяется.
Проблема в том что на шаге 4 прерывание всегда срабатывает раньше чем должно быть .

void TIM11_Init(void)
{
RCC->APB2ENR |= RCC_APB2ENR_TIM11EN;
TIM11->CR1 = 0;
TIM11->PSC = 9;
TIM11->ARR = 0;
TIM11->DIER |= TIM_DIER_UIE;
NVIC_EnableIRQ(TIM1_TRG_COM_TIM11_IRQn);
NVIC_SetPriority(TIM1_TRG_COM_TIM11_IRQn, 0);
}

void StartTIM11(uint16_t tim)
{
TIM11->ARR = tim;
TIM11->CR1 |= TIM_CR1_CEN; // Включить счётчик
}
void StopTIM11(void)
{
TIM11->CR1 &=~ TIM_CR1_CEN;
}
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Реклама
Опытный кот
Сообщения: 860
Зарегистрирован: Пн фев 16, 2026 17:30:02

Сообщение Rapra »

А насколько раньше?
Реклама
Грызет канифоль
Аватара пользователя
Сообщения: 253
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

Из 8.4мС которые должны быть на 1.4 мСек меньше.
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
u37
Говорящий с текстолитом
Сообщения: 1513
Зарегистрирован: Пн май 01, 2017 20:01:45

Сообщение u37 »

перед п4 не забудьте сбросить прерывание от п2.
И вообще, играть в игру +/-1 это гнустнейшее что может быть. PSC 10 - оно вам так_прям_надо
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 1982
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Кто запускает функции StartTIM11(uint16_t tim) и StopTIM11()?
Дайте прогр. код для TIM11 IRQHandler?
Где именно реализуете паузу в 3 ms?
Последний раз редактировалось veso74 Ср окт 21, 2026 20:14:10, всего редактировалось 1 раз.
Контактная информация:
Реклама
Опытный кот
Сообщения: 860
Зарегистрирован: Пн фев 16, 2026 17:30:02

Сообщение Rapra »

Нужно перед запуском таймера программно занулить счетчик, присвоив ему CNT = 0, потому что вот не факт, что при остановке счетчика там всё еще остается 0.
В регистре ARR, так же как и в PSC, действует правило "значение минус 1", потому что счет начинается с 0.

Можно поступить иначе. ARR настроить на 36000-1 + 3 мс, а для интервалов 36000 и 250 использовать регистры сравнения CCRx
Реклама
Грызет канифоль
Аватара пользователя
Сообщения: 253
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

CNT обнулял, не помогло.
void TIM1_TRG_COM_TIM11_IRQHandler(void)//
{
if (TIM11->SR & TIM_SR_UIF)
{
TIM11->SR &=~ TIM_SR_UIF;
TIM11->CNT =0 ;
StopTIM11();
UpravlenieTIM11();
}
}
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Грызет канифоль
Аватара пользователя
Сообщения: 253
Зарегистрирован: Ср дек 31, 2008 01:55:19
Откуда: Санкт-Петербург

Сообщение RUNA »

Rapra писал(а): Ср окт 21, 2026 19:21:47 Можно поступить иначе. ARR настроить на 36000-1 + 3 мс, а для интервалов 36000 и 250 использовать регистры сравнения CCRx
А вот это попробую.
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Вымогатель припоя
Сообщения: 598
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

RUNA писал(а): Ср окт 21, 2026 19:45:06 TIM11->CNT =0 ;
StopTIM11();
мне кажется, немного не та очерёдность.
Ответить

Вернуться в «ARM»