STM32F030F4P6 TIM14

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
aleksey chilov
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

STM32F030F4P6 TIM14

Сообщение aleksey chilov »

Код: Выделить всё

//                      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
Вымогатель припоя
Сообщения: 589
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди шариатской республики

Re: STM32F030F4P6 TIM14

Сообщение linux_rulezz »

Magick numbers - зло! Как без документации понять, правильно ли таймер настроен?
Нужно выбирать режим захвата. Тогда прерывание будет правильным, а в CCx поместится количество тиков от старта периода до внешнего события.
А пока можно в CC1R поместить значение больше ARR. И прерывания прекратятся.
Windows must die!
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: STM32F030F4P6 TIM14

Сообщение Adrift »

[uquote="aleksey chilov",url="/forum/viewtopic.php?p=4753847#p4753847"]при этом на входе PA7 ни чего нет, генератор сигналов не подключён.[/uquote]
Если на входе ничего нет, то почему вы подтяжку выключили?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: STM32F030F4P6 TIM14

Сообщение Мурик »

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

Re: STM32F030F4P6 TIM14

Сообщение jcxz »

[uquote="aleksey chilov",url="/forum/viewtopic.php?p=4753847#p4753847"]Нужно измерять длительность сигнала, для декодирования ИК от ПДУ.
Решил использовать для этой задачи таймер по захвату фронта. ( падающего )[/uquote]Для декодирования посылок ИК-пульта нужно захватывать как фронт так и спад.

[uquote="aleksey chilov",url="/forum/viewtopic.php?p=4753847#p4753847"]Я прошу помочь, посмотрите на настройки и укажите
на ошибку в настройках. Ибо не вижу где проблема, не могу сам найти где не так настроил.[/uquote]Вы ошиблись форумом. Вам нужно на форум медиумов и прорицателей. Которые угадают - что скрывается за всеми этими вашими MODIFY_REG, CLEAR_BIT и т.п.? И всеми остальлными символическими именами. Определения которых вы "забыли" привести.
Здесь все медиумы в отпусках.
aleksey chilov
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

Re: STM32F030F4P6 TIM14

Сообщение aleksey chilov »

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

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