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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> STM32. Функция задержки, программные задержки на таймере
ViKo
сообщение Dec 22 2012, 06:53
Сообщение #16


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(AHTOXA @ Jun 28 2012, 21:03) *
Да, это я лопухнулсяsm.gif Значит, не надо уменьшать на 1.

Пытаюсь досконально разобраться с базовыми таймерами.
Считаю, что на 1 уменьшать надо. Практически пока не проверял. В руководстве есть картинки, где показано, как CNT меняется от 0 до 36, при этом написано, что ARR = 0x36. Значит, счетчик считает на 1 больше.
Фраза "The counter is blocked while the auto-reload value is null" вызывает недоумение.
Вообще, описано плохо. Пытаюсь прикинуть, как биты URS, UDIS работают в схеме таймера, и из описания понять невозможно.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 22 2012, 08:50
Сообщение #17


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

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



Цитата(ViKo @ Dec 22 2012, 12:53) *
Считаю, что на 1 уменьшать надо. Практически пока не проверял.

А я практически проверилsm.gif
Для генерации 2МГц пришлось в ARR занести значение 36. (При тактовой 72МГц).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Dec 22 2012, 09:07
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Нодо на 1 уменьшать. Я то же практически проверял.
Цитата(AHTOXA @ Dec 22 2012, 12:50) *
А я практически проверилsm.gif
Для генерации 2МГц пришлось в ARR занести значение 36. (При тактовой 72МГц).

Не должно было такое случиться. Где то единичка убежала.

Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Dec 22 2012, 10:09
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(AHTOXA @ Dec 22 2012, 11:50) *
А я практически проверил sm.gif
Для генерации 2МГц пришлось в ARR занести значение 36. (При тактовой 72МГц).

Как оно работает...
Цитата
the counter counts from 0 to the auto-reload value (content of the TIMx_ARR register) – 1, generates a counter overflow event


Цитата
Example update event period
The update event period is calculated as follows:

Update_event = TIM_CLK/((PSC + 1)*(ARR + 1)*(RCR + 1))




Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 22 2012, 10:20
Сообщение #20


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Из мануала RM0041 на STM32F100
Цитата
The counter counts from 0 to the auto-reload value (contents of the TIMx_ARR register),
then restarts from 0 and generates a counter overflow event.

То, что показал HHIMERA, относится к режиму Center-aligned mode (up/down counting) для других таймеров.
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Dec 22 2012, 10:32
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(ViKo @ Dec 22 2012, 14:20) *
То, что показал HHIMERA

Ну какие ещё другие таймера в STM32??? )))
AN4013 Application note

STM32F1xx, STM32F2xx, STM32F4xx, STM32L1xx, STM32F30/31/37/38x timer overview

2.2 Time base generator

Отнимать единички надобно... т.к. таймер их сам доплюсовывает...

Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 22 2012, 10:50
Сообщение #22


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Даете противоречивые показания. sm.gif
Цитата(HHIMERA @ Dec 22 2012, 13:32) *
Отнимать единички надобно... т.к. таймер их сам доплюсовывает...

Противоречит
Цитата
the counter counts from 0 to the auto-reload value (content of the TIMx_ARR register) – 1, generates a counter overflow event

Как вы представляете, что таймер считает не до ARR, а до ARR-1 (то есть, вашими словами, отминусовывает), физически?

По руководству пройдитесь поиском "counter counts", найдете, какие таймеры как считают.
P.S. и там не уверен, не разбирался вообще.
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Dec 22 2012, 11:00
Сообщение #23


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Update_event = TIM_CLK/((PSC + 1)*(ARR + 1)*(RCR + 1))

Update_event = 72 000 000/((0 + 1)*((36-1) + 1)*(0 + 1)) = ???

Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 22 2012, 11:13
Сообщение #24


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(HHIMERA @ Dec 22 2012, 14:00) *
...

Словами спросите. Я же сказал, что тоже считаю, что загружать нужно на 1 меньше. И таймер будет считать от 0 до N-1, всего N состояний. У вас (в AN) некорректная запись.
Кстати, такой записи в этом AN нет!
??
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Dec 22 2012, 11:20
Сообщение #25


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(ViKo @ Dec 22 2012, 13:50) *
По руководству пройдитесь поиском "counter count", найдете, какие таймеры как считают.

Спасибо, мне не надо... )))
Недавно с Леонидом Ивановичем рассматривали возможность частотомера на STM32 ...
В железе всё прекрасно...
На STM32f100 до 90МГц (выше не пробовал)... на STM32F05X - 110МГц (больше неоткуда было взять)...

P.S: Доки для STM32 писались не новичками... и не для новичков... увы...
Отсюда и сжатый стиль, и "неоднозначные толкования", и пр. ... но в целом - всё достойно и понятно...

Цитата(ViKo @ Dec 22 2012, 14:13) *
У вас (в AN) некорректная запись.

"Мопед не мой"(С)

И в чём некорректность???
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 22 2012, 11:46
Сообщение #26


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(HHIMERA @ Dec 22 2012, 14:18) *
Спасибо, мне не надо... )))
Отсюда и сжатый стиль, и "неоднозначные толкования", и пр. ... но в целом - всё достойно и понятно...

Нихрена там не понятно. И не достойно.
Был бы признателен, если бы растолковали, как работают биты UDIS, URS в базовых таймерах. Чтобы не противоречило ни одной из фраз из руководства. У меня пока никак не складывается картинка. Что на что влияет...?
Или, например, если загружаем в ARR значение меньше прежнего, при ARPE сброшенном, а CNT уже перевалившем за новое (до старого, естественно, не добрался еще). Тут же появится overflow event, или будет до переполнения счетчика скакать?

Цитата(HHIMERA @ Dec 22 2012, 14:20) *
И в чём некорректность???

Еще раз - где вы взяли ту цитату после "Как оно работает": (...) - 1, что привели?

Проверил на своем.
Код
void Timer3_init(void) {
/* Разрешить тактирование Таймера 3 */
  RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
/* Prescaler 8 MHz */
  TIM3->PSC = 24 / 8 - 1;
/* Autoreload 2 MHz */
  TIM3->ARR = 8 / 2 - 1;
/* PWM */
  TIM3->CCMR2 = 0x6060 | TIM_CCMR2_OC4PE | TIM_CCMR2_OC3PE;
/* Противоположная полярность активных сигналов (не обязательно) */
  TIM3->CCER = TIM_CCER_CC4E | TIM_CCER_CC4P | TIM_CCER_CC3E;
/* Регистры сравнения */
  TIM3->CCR3 = TIM3->CCR4 = 8 / 2 / 2;  
/* Разрешить счет */
  TIM3->CR1 = TIM_CR1_ARPE | TIM_CR1_URS | TIM_CR1_CEN;
/* Remap TIM3 to PC8, PC9 */
  AFIO->MAPR = 0x00000c00;  
}

Выдает 2 MHz на светодиодах STM32VLDiscovery. Не забудьте задать альтернативные функции для портов PC8, PC9.
Продолжу с битами, доложу.
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Dec 22 2012, 11:58
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(ViKo @ Dec 22 2012, 14:28) *
Нихрена там не понятно. И не достойно.

Просто надо привыкнуть к стилю написания документации...
Цитата
Был бы признателен, если бы растолковали

Не-не... я нифига ни разу не учитель-разжеватель и не писатель... Я так... ткнул, пнул и съе... и свалил... сорри...
Цитата
Или, например, если загружаем в ARR значение меньше прежнего, при ARPE сброшенном, а CNT уже перевалившем за новое (до старого, естественно, не добрался еще). Тут же появится overflow event, или будет до переполнения счетчика скакать?

Так грубо я шашкой не махал... таких задач не было... но мысль интересная, спасибо... проверю по желанию и возможности...
А вот новое значение ARR, которое не превысило предыдущее и CNT ещё не перевалил за новое, загружал "на лету"... отрабатывалось по новому значению ARR...
Цитата
Еще раз - где вы взяли ту цитату после "Как оно работает": (...) - 1, что привели?

Да с какого-то первого попавшегося даташита... что под руку попалось...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 22 2012, 12:02
Сообщение #28


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(HHIMERA @ Dec 22 2012, 14:58) *
Так грубо я шашкой не махал... таких задач не было... но мысль интересная, спасибо... проверю по желанию и возможности...
А вот новое значение ARR, которое не превысило предыдущее и CNT ещё не перевалил за новое, загружал "на лету"... отрабатывалось по новому значению ARR...

Сам проверю. Сравним ответы. sm.gif
Второе понятно. ARPE=0 разрешает обновлять теневой регистр ARR, с которым сравнивается счетчик CNT, сразу после записи.
Цитата
Да с какого-то первого попавшегося даташита... что под руку попалось...

Вот именно. Что я и хотел сказать.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 22 2012, 17:15
Сообщение #29


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

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



Цитата(vlad_new @ Dec 22 2012, 15:07) *
Не должно было такое случиться. Где то единичка убежала.

Да, точно, я куда-то не туда посмотрелsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 23 2012, 14:16
Сообщение #30


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Сочинил задержку подлиннее. Тактовая частота подразумевается 24 MHz.
Код
/*!
*******************************************************************************
* @brief    Wide time delay start, check, wait in 1, 10, 100, 1000 us steps
* @details    Старт, проверка и ожидание окончания задержки в микросекундаx
* @param    US - delay time (1 ... 65 536 000 us)
*/
#define WDELAY_START(US)                        \
  TIM6->PSC = ((US < 65536)? (24 - 1) :                    \
          ((US < 655360)? (240 - 1) :                 \
          ((US < 6553600)? (2400 - 1) : (24000 - 1))));        \
  TIM6->ARR = ((US < 65536)? (US - 1) :                    \
          ((US < 655360)? (US / 10 - 1) :                \
          ((US < 6553600)? (US / 100 - 1) : (US / 1000 - 1))));    \
  TIM6->EGR = TIM_EGR_UG;                        \
  TIM6->SR = 0;                                \
  TIM6->CR1 |= TIM_CR1_CEN;                        \

#define WDELAY_CHECK    (TIM6->SR)
#define WDELAY_WAIT()    while (!TIM6->SR)


К этому коду прилагается инициализация таймера.
Код
void Timer6_init(void) {
  RCC->APB1ENR |= RCC_APB1ENR_TIM6EN;
  TIM6->CR1 = TIM_CR1_ARPE | TIM_CR1_OPM | TIM_CR1_URS;
}
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 19:58
Рейтинг@Mail.ru


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