Easyelectronics.ru

Электроника для всех
Текущее время: 01 ноя 2020, 06:44

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Помогите сконфигурировать таймер
СообщениеДобавлено: 13 янв 2012, 09:58 
Только пришел

Зарегистрирован: 12 янв 2012, 14:20
Сообщения: 6
Здравствуйте, участники форума!
Нужно сконфигурировать таймер, чтобы он аппаратно переключал одну из ножек процессора в режиме триггера.

void TIMER_TWO(int PRED_DELIT_TIM_2)
{
PWR->CSR &= ~PWR_CSR_EWUP; //выключение WKUP с вывода PA0
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; //инициализируем таймер2
AFIO->MAPR &= ~AFIO_MAPR_TIM2_REMAP; // Настройка портов ввода-вывода
TIM2->CCR1 = 1; //Capture Compare register
TIM2->CR1 |= TIM_CR1_ARPE; // count up to ARR, no divisor, auto reload
TIM2->ARR = 0x7F; //Auto-reload register, значение когда прерывание происходит
TIM2->PSC = PRED_DELIT_TIM_2; //предделитель
TIM2->EGR |= TIM_EGR_UG; // generate an update event to reload the prescaler value immediately

TIM2->CCMR1 |= TIM_CCMR1_OC1M_0; //toggle mode OC1REF toggles when TIM2_CNT=TIM2_CCR1
TIM2->CCMR1 |= TIM_CCMR1_OC1M_1; //toggle mode OC1REF toggles when TIM2_CNT=TIM2_CCR1
TIM2->CCMR1 &= ~TIM_CCMR1_OC1M_2; //toggle mode OC1REF toggles when TIM2_CNT=TIM2_CCR1
TIM2->CCER |= TIM_CCER_CC1E; //Compare 1 output enable-включение выхода СН1
TIM2->BDTR |= TIM_BDTR_MOE; //разрешаем управлять выходами процессора напрямую
TIM2->CR1 |= TIM_CR1_CEN; //запускаем таймер2
}
По идее, должна дергаться нога PA0 с частотой 32кГц, но не работает. Выход PA0 подключен - проверяю программно.
Подскажите пожалуйста, времени уже много потратил впустую.


Вложения:
Комментарий к файлу: Это код
main.c [18.86 Кб]
Скачиваний: 471
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите сконфигурировать таймер
СообщениеДобавлено: 14 янв 2012, 17:03 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 13 май 2011, 11:55
Сообщения: 134
Откуда: Санкт-Петербург
В куске кода выше не хватает как минимум разрешения прерывания от источника. Что-нибудь типа TIM2->DIER |= TIM_DIER_CC1IE. В файле main.c у Вас разрешается прерываие от compare 3, но при этом бит CC3E в регистре CCER сбрасывается, т.е. если я ничего не путаю получается что OC3 неактивен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите сконфигурировать таймер
СообщениеДобавлено: 15 янв 2012, 20:05 
Только пришел

Зарегистрирован: 12 янв 2012, 14:20
Сообщения: 6
Так это немного разные вещи: прерывание - это так или иначе программная обработка, так на обработку расходуется время процессора. Уже разобрался, спасибо Денису Железнякову, - для использования альтернативной функции на ножке процессора, нужно конфигурировать эту ножку на работу альтернативной функции на ноге - в данном случае - на дерганье ноги по совпадению таймера/счетчика. переключение происходит без всяких обработчиков прерываний, процессорное время не затрачивается...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите сконфигурировать таймер
СообщениеДобавлено: 15 янв 2012, 20:07 
Только пришел

Зарегистрирован: 12 янв 2012, 14:20
Сообщения: 6
Если кто в теме, напишите, как сконфигурировать два таймера на славе/мастер режимы. Ну чтобы завтра поменьше разбираться))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите сконфигурировать таймер
СообщениеДобавлено: 18 июн 2012, 15:29 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 09 дек 2011, 12:47
Сообщения: 184
Откуда: Санкт-Петербург
что-то я не въезжаю: хочу, чтобы, допустим по TIM1, выходы каналов работали самостоятельно с разными частотами. Четыре канала - четыре разных частоты на выходах. В примерах библиотеки это сделано с помощью прерываний, в которых длины импульсов прибавляются к текущему значению таймера.
Собственно, я как-то представляла себе, что можно будет записать что-то вроде
Код:
TIM_OCInitTypeDef timer_oc;
TIM_OCStructInit(&timer_oc);
timer_oc.TIM_Pulse = 100;
timer_oc.TIM_OCMode = TIM_OCMode_Toggle;
timer_oc.TIM_OutputState = TIM_outputState_Enable;
TIM_OC1Init(TIM1, &timer_oc);


.... и так по четырем каналам.. с разными значениями timer_oc.TIM_Pulse ., а потом
Код:
TIM_BDTRInitTypeDef timer_bdtr;
TIM_BDTRStructInit(&timer_bdtr);
timer_bdtr.TIM_AutomaticOutput = TIM_AutomaticOutpu_Enable;
TIM_BDTRConfig(TIM1, &timer_bdtr);


и по каждой ножке у меня будет идти своя частота..
И вот что-то не получается разной частоты - одна какая-то идет, причем я даже не пойму - какая...
Или так нельзя и только через прерывания?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите сконфигурировать таймер
СообщениеДобавлено: 18 июн 2012, 18:33 
Старожил

Зарегистрирован: 25 апр 2010, 10:13
Сообщения: 1927
Откуда: Томск
Если по простому - частота счета задается PSCP_rescaler, counter таймера считает 0 до FFFF, тогда частота на выходе CK_PSC/(PSC_Prescaler*0xFFFF)
В timer_oc.TIM_Pulse записываешь число, например 0x04FF, как только counter = 0x04FF - выход сменил полярность. Частота будет одинаковая, разная будет ширина импульса.

_________________
Какое небо голубое....(с) лиса Алиса


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите сконфигурировать таймер
СообщениеДобавлено: 18 июн 2012, 23:35 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 09 дек 2011, 12:47
Сообщения: 184
Откуда: Санкт-Петербург
Спасибо,..а я-то размечталась.... :-(


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB