реклама на сайте
подробности

 
 
> Вопрос по таймеру в STM32 Cortex
Halfback
сообщение Jun 13 2010, 20:59
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512



Всем привет!
Настраиваю таймер 3.
Работает так: постоянно считает до T=1000 мсек (с шагом t=1мс) и сбрасывается. Авторелоад включен.
В какой-то момент времени нужно отмерить интервал времени t1=400мс.
Текущее состояние таймера = t0
Если t1+t0 <= T то компаратор можно назначить через время = t1+t0 и всё будет хорошо,
а вот если t1+t0 >= T то получается немного сложнее т.к. захват нужен после релоада счетчика. А раз так, то получается t1<t0 и компаратор сразу сработает после назначения нового порога.

Есть идея использовать событие по переполнению таймера и там делать переинициализацию на новый порог захвата - в этом случае компаратор словит всё как надо но это как то не красиво.

Есть у кого идеи по решению задачи?

Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Halfback
сообщение Jun 14 2010, 14:59
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512



Предлагаю ближе к делу:
Таймер конфигурируется так (конкретные значения периода, прескалеров привести не могу т.к. проект не под рукой):
Код
TIM_TimeBaseStructure.TIM_Period = 65535;
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

TIM_Cmd(TIM3, ENABLE);


Захват вот так:
Код
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Active;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  TIM_OC1Init(TIM3, &TIM_OCInitStructure);


Далее в момент времени таймера = 800 (таймер считает до 1000 и перезагружается, начинает считать с 0) надо отмерить 400мс и делаю
Код
TIM_SetCompare1(TIM3,400-(1000-800));
TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE)

и сразу вылетаю в обработчик прерывания. Почему это происходит понятно, т.к. 800>(400-(1000-800))

Так вот надо чтобы таймер обнулился, начал считать заново и сделал событие в момент времени (400-(1000-800)).

Потом попробую отработать событие TIM_EventSource_COM
Может это то что надо.

Сообщение отредактировал Halfback - Jun 14 2010, 15:07
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 15 2010, 05:31
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Halfback @ Jun 14 2010, 20:59) *
Далее в момент времени таймера = 800 (таймер считает до 1000 и перезагружается, начинает считать с 0) надо отмерить 400мс и делаю
Код
TIM_SetCompare1(TIM3,400-(1000-800));
TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE)

и сразу вылетаю в обработчик прерывания. Почему это происходит понятно, т.к. 800>(400-(1000-800))

Что за чушь? Ещё раз повторю: компаратор сравнивает не на "больше", а на "равно".
В обработчик вы вылетаете по другой причине.
Посмотрите пример к библиотеке в папке TIM\OCToggle - это то, что вам надо.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Halfback   Вопрос по таймеру в STM32 Cortex   Jun 13 2010, 20:59
- - AHTOXA   Цитата(Halfback @ Jun 14 2010, 02:59) Ест...   Jun 14 2010, 00:10
- - Halfback   AHTOXA Что значит свободный забег? не понял. и как...   Jun 14 2010, 06:06
|- - AHTOXA   Цитата(Halfback @ Jun 14 2010, 12:06) Что...   Jun 14 2010, 07:09
- - -SANYCH-   Используйте под каждый замер разный таймер. Ведь у...   Jun 14 2010, 06:46
- - Halfback   TIM_EventSource_COM не то, да и работает на 1 и 8 ...   Jun 14 2010, 17:03
- - Halfback   На данный момент проблему решил так: когда надо де...   Jun 14 2010, 20:29
- - koyodza   Не вижу смысла на такие большие времена использова...   Jun 21 2010, 17:48
- - _Макс   Подскажите, на брекпоинте таймер перестает работат...   Jul 8 2010, 10:59
|- - klen   Цитата(_Макс @ Jul 8 2010, 14:59) Подскаж...   Jul 8 2010, 19:42
- - ELEKTROS   Добрый день. Проблема похожа чем то: прерывания ра...   Jun 29 2011, 04:28
- - =F8=   Прерывания по CCx не использовал, но DMA в режиме ...   Jun 29 2011, 14:10


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 23:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016