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

 
 
 
Reply to this topicStart new topic
> Поведение таймеров в STM32., Очевидное может стать невероятными граблями.
KnightIgor
сообщение Sep 12 2013, 12:40
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Вопросов нет. Хочу указать на замаскированные грабли в STM32.

Таймеры в них имеют предварительный делитель частоты Prescaler (PSC). Как честно и описано в доках, этот регистр имеет скрытый буфер, доступный для программы, а собственно действующий регистр загружается новым значением из того буфера только в момент выработки события переполнения (ну, когда счетчик CNT достигнет ARR). Из этого логически следует, что при начальной инициализации в программе, если в PSC требуется что-то отличное от 0, то оно будет действовать только после первого прохода счетика! И это оказалось для меня граблями, т.к. при первом проходе первое событие выработалось у меня значительно раньше, что оказалось критично в некотором приложении.

Короче, work around вполне прост и организуется штатными средствами: после записи требуемого значения в PSC надо программно сгенерировать событие переполнения/обновления установкой бита UG в регистре EGR таймера. Это пропишет рабочий регистр PSC значением из буферного.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 12 2013, 16:15
Сообщение #2


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

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



Цитата(KnightIgor @ Sep 12 2013, 18:40) *
Хочу указать на замаскированные грабли в STM32.

Грабли сии уже неоднократно замечены и заботливо огорожены sm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 13 2013, 02:33
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Да ужж.... Однако - сколько таких грабель в STM32!... И за что его местный народ так любит? не пойму... wacko.gif
Go to the top of the page
 
+Quote Post
Rash
сообщение Sep 13 2013, 08:36
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



почему бы просто не заинлайнить ф-цию из StdLib TIM_PrescalerConfig и не иметь проблем
Код
// Конфигурация предделителя таймера TIMx (TIMx Prescaler)
// [TIMx]              - где 'х' может быть от 1 до 14.  Выбор таймера TIM
// [Prescaler]         - Значение предделителя
// [TIM_PSCReloadMode] - определяет тип перезагрузки предделителя таймера
//                       TIM_PSCReloadMode_Update     - Предделитель будет изменён при событии обновления
//                       TIM_PSCReloadMode_Immediate  - Предделитель будет изменён сразу
static inline void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode)
{
  // Установить значение предделителя
  TIMx->PSC = Prescaler;
  // Установить или Сбросить UG бит
  TIMx->EGR = TIM_PSCReloadMode;
}
Go to the top of the page
 
+Quote Post
MK2
сообщение Sep 13 2013, 11:47
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 30-10-10
Пользователь №: 60 535



Цитата(jcxz @ Sep 13 2013, 05:33) *
Да ужж.... Однако - сколько таких грабель в STM32!... И за что его местный народ так любит? не пойму... wacko.gif

ну наверно за то что они известны и разжеваны
Go to the top of the page
 
+Quote Post
pitt
сообщение Sep 13 2013, 12:19
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(jcxz @ Sep 12 2013, 22:33) *
Да ужж.... Однако - сколько таких грабель в STM32!... И за что его местный народ так любит? не пойму... wacko.gif

Грабли, а точнее errata, есть у всех кристаллов, а вот заставить, в конце концов, делать именно то, что надо, STM32 позволяет, а другие не всегда.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post

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

 


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


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