Например TDA7294

Форум РадиоКот :: Просмотр темы - STM32F030F4P6 TIM14
Форум РадиоКот
https://radiokot.ru/forum/

STM32F030F4P6 TIM14
https://radiokot.ru/forum/viewtopic.php?f=59&t=199385
Страница 1 из 1

Автор:  aleksey chilov [ Вт окт 14, 2025 09:50:57 ]
Заголовок сообщения:  STM32F030F4P6 TIM14

Код:
//                      PA7 INTERRUPTIONS_CAPTURE
MODIFY_REG(GPIOA->MODER, GPIO_MODER_MODER6_Msk, 0b10 << GPIO_MODER_MODER6_Pos); // PA7 Режим альтернативных функций
MODIFY_REG(GPIOA->AFR[4], GPIO_AFRL_AFSEL7_Msk, 0b0100 << GPIO_AFRL_AFSEL7_Pos); // AF-4 PA7
MODIFY_REG(GPIOA->PUPDR, GPIO_PUPDR_PUPDR6_Msk, 0b00 << GPIO_PUPDR_PUPDR6_Pos); // PA7 Без подтягивания
MODIFY_REG(GPIOA->OSPEEDR, GPIO_OSPEEDR_OSPEEDR0_Msk, 0b11 << GPIO_OSPEEDR_OSPEEDR0_Pos); //PA0 High speed

Код:
void TIM14_capture(void){
SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN); //  Тактирование TIM14 ON
CLEAR_BIT(TIM14->CR1,TIM_CR1_CEN); // Счётчик OFF
CLEAR_BIT(TIM14->CCMR1,TIM_CCMR1_OC1PE); // Регистр предварительной загрузки в TIMx_CCR1 OFF
SET_BIT(TIM14->CCER,TIM_CCER_CC1E); // включение выхода захвата/сравнения 1.
//_____
//           Биты  CC1P и CC1NP работают в паре, определяя режим захвата таймера по фронтам
//_____
// ---------- ТАК ПО ПАДАЮЩЕМУ ФРОНТУ ----------
SET_BIT(TIM14->CCER,TIM_CCER_CC1P);     // 0b10
CLEAR_BIT(TIM14->CCER,TIM_CCER_CC1NP); //  0b10
// ---------- ТАК ПО НАРАСТАЮЩЕМУ ФРОНТУ ----------
//CLEAR_BIT(TIM14->CCER,TIM_CCER_CC1P);   //  0b00
//CLEAR_BIT(TIM14->CCER,TIM_CCER_CC1NP);  //  0b00
// ---------- ТАК ПО ОБОИМ ФРОНТАМ ----------
//SET_BIT(TIM14->CCER,TIM_CCER_CC1P);   //  0b11
//SET_BIT(TIM14->CCER,TIM_CCER_CC1NP);  //  0b11
//_____
MODIFY_REG(TIM14->OR, TIM14_OR_TI1_RMP_Msk, 0b00 << TIM14_OR_TI1_RMP_Pos); // Канал 1 TIM14 альтернативное назначение функций
MODIFY_REG(TIM14->CCMR1, TIM_CCMR1_CC1S_Msk, 0b01 << TIM_CCMR1_CC1S_Pos); // Канал CC1 настроен как вход, IC1 сопоставлен с TI1
CLEAR_BIT(TIM14->DIER, TIM_DIER_UIE); // Прерывание обновления OFF
SET_BIT(TIM14->DIER, TIM_DIER_CC1IE); // Прерывание CC1 ON

TIM14->PSC = 48 - 1; // 1 тик микросек.
TIM3->ARR = 65535 - 1;
NVIC_EnableIRQ(TIM14_IRQn); // Разрешить прерывания
SET_BIT(TIM14->CR1,TIM_CR1_CEN); // Счётчик включен
}


Код:
void TIM14_IRQHandler(void){
   if(READ_BIT(TIM14->SR,TIM_SR_CC1IF) != RESET){  //  Проверить и сбросить флаг!!!
      CLEAR_BIT(TIM14->SR,TIM_SR_CC1IF);     //    Сбросить флаг!!!
      test++;
   }
}


Добрый день форумчане!
Есть такой вопрос.
Нужно измерять длительность сигнала, для декодирования ИК от ПДУ.
Решил использовать для этой задачи таймер по захвату фронта. ( падающего )
Открыл референс, там посмотрел-полистал вроде бы там описано как это всё дело включить.
В итоге всегда попадаю в обработчик постоянно и кручусь там. Установил туа тестовую переменную
и в отладке чётко видно что всё крутится там и переменная всегда инкрементируется но при этом на
входе PA7 ни чего нет, генератор сигналов не подключён. Я прошу помочь, посмотрите на настройки и укажите
на ошибку в настройках. Ибо не вижу где проблема, не могу сам найти где не так настроил.
Спасибо!

Автор:  linux_rulezz [ Вт окт 14, 2025 10:00:14 ]
Заголовок сообщения:  Re: STM32F030F4P6 TIM14

Magick numbers - зло! Как без документации понять, правильно ли таймер настроен?
Нужно выбирать режим захвата. Тогда прерывание будет правильным, а в CCx поместится количество тиков от старта периода до внешнего события.
А пока можно в CC1R поместить значение больше ARR. И прерывания прекратятся.

Автор:  Adrift [ Вт окт 14, 2025 11:32:17 ]
Заголовок сообщения:  Re: STM32F030F4P6 TIM14

при этом на входе PA7 ни чего нет, генератор сигналов не подключён.

Если на входе ничего нет, то почему вы подтяжку выключили?

Автор:  Мурик [ Вт окт 14, 2025 18:34:25 ]
Заголовок сообщения:  Re: STM32F030F4P6 TIM14

aleksey chilov писал(а):
Решил использовать для этой задачи таймер по захвату фронта. ( падающего )
Можно и ШИМ захват http://we.easyelectronics.ru/STM32/ir-u ... ast-1.html
DMA прикрутить и выход по таймауту по 3 каналу таймера.

Автор:  jcxz [ Вт окт 14, 2025 18:58:50 ]
Заголовок сообщения:  Re: STM32F030F4P6 TIM14

Нужно измерять длительность сигнала, для декодирования ИК от ПДУ.
Решил использовать для этой задачи таймер по захвату фронта. ( падающего )
Для декодирования посылок ИК-пульта нужно захватывать как фронт так и спад.

Я прошу помочь, посмотрите на настройки и укажите
на ошибку в настройках. Ибо не вижу где проблема, не могу сам найти где не так настроил.
Вы ошиблись форумом. Вам нужно на форум медиумов и прорицателей. Которые угадают - что скрывается за всеми этими вашими MODIFY_REG, CLEAR_BIT и т.п.? И всеми остальлными символическими именами. Определения которых вы "забыли" привести.
Здесь все медиумы в отпусках.

Автор:  aleksey chilov [ Ср окт 15, 2025 08:13:05 ]
Заголовок сообщения:  Re: STM32F030F4P6 TIM14

Извиняюсь. Все те формы записи это библиотека CMSIS
Ну извините, не я это всё придумывал это уже вопросы к производителю софта.
И самих контролеров STM32.
Какие синонимы прописали в библиотеке такие и пишу.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/