Перейти к содержанию
    

STM32F030F4 - не получается настроить таймер ТИМ3 на счет внешних импульсов

Доброго всем времени суток.

Пытаюсь изобразить низкочастотный частотомер на оставшихся "невостребованными" ресурсах у контроллера (TIM3 и pin PA6). Планировалось вычитывать раз в секунду таймер и либо считать приращение, либо вообще его обнулять. Но, что то пошло не так. То, что кубу с таймерами кроме нескольких "учебных" вариантов верить нельзя я понял почти сразу, но даже вручную по даташиту как то не так получается (LL от куба остался, но куб выкинут и далее все руками).

Может быть уважаемые гуру могут подкинуть для примера проверенный код инициализации таймера в Ext. Clock Mode 1 для контроллеров этого семейства?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

9 minutes ago, Velund said:

но даже вручную по даташиту как то не так получается (LL от куба остался, но куб выкинут и далее все руками).

"Вручную по даташиту" - это БЕЗ всяких LL, т.е. ограничиваемся только соотв. готовым h-файлом с описанием регистров и их битовых полей для выбранного МК.

Этого вполне достаточно.

Не забываем включать тактирование таймера и правильно настраивать предделитель шины, на которой он висит (см. RCC).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 часов назад, Velund сказал:

Может быть уважаемые гуру могут подкинуть для примера проверенный код инициализации таймера в Ext. Clock Mode 1 для контроллеров этого семейства? 

Примеры лежат в папке с "репозиторием" куба STM32F0xxx/Projects/BoardXXX/Examples/TIM
Пуст к "репозиторию" можно посмотреть в настройках.

 

19 часов назад, Forger сказал:

это БЕЗ всяких LL, т.е. ограничиваемся только соотв. готовым h-файлом с описанием регистров и их битовых полей для выбранного МК.

Не нужно путать HAL и LL
LL- это и есть по сути регистры, макросы и битовые маски, почти весь функционал находится в H файлах за некоторым исключением.
 

Изменено пользователем makc
Убран оффтопик

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, Integro said:

Примеры лежат в папке с "репозиторием" куба STM32F0xxx/Projects/BoardXXX/Examples/TIM

Спасибо за подсказку, но увы, интересующего меня примера я так и не обнаружил.

Ближайшее, что есть к интересовавшему - пример с Input Capture, которым измеряют период. У меня на эту реализацию уже ресурсов по любому нет, и мне не нужен период, мне нужна усредненная за секунду частота (и чтобы скважность которая может гулять в очень широких пределах не влияла сильно). Т.е. просто и тупо - таймер с внешним тактированием, который должен инкрементироваться каждым фронтом входного сигнала и будет обчитываться раз в секунду. Без прерываний и прочего. С абсолютным минимумом нагрузки на процессор.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

35 minutes ago, Velund said:

Без прерываний и прочего. С абсолютным минимумом нагрузки на процессор.

Одно другому противоречит!

Нужен таймер секундных отчетов. Если не занят таймер systick, то он вполне подойдет. Если стоит RTOS, то задача становится еще проще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, Forger said:

Одно другому противоречит!

Нужен таймер секундных отчетов. Если не занят таймер systick, то он вполне подойдет.

 

Не противоречит. Имелось в виду отсутствие собственных прерываний. Systick занят делом (миллисекундный таймер), но в его обработчике вполне все уместится. RTOS для камешка в TSSOP-20 с 16К флеша как то больно жирный заход.

 

Собственно запустил уже. Ручным дерганием битов в регистрах. При этом ту же конфигурацию пробовал с использованием дефайнов и макросов LL запустить - она не пошла. Позже может покопаю где собака порылась, но по ходу для LL инклюды тоже индусам оутсорсят. ;)

Клоки еще LL включал.

 

GPIOA->MODER =(GPIOA->MODER &~(GPIO_MODER_MODER6))|(GPIO_MODER_MODER6_1);
  GPIOA->AFR[0] |= 0x01 << (6 * 4);
  TIM3->CCMR1 |= TIM_CCMR1_IC1F_0 | TIM_CCMR1_IC1F_1 | TIM_CCMR1_CC1S_0;
  TIM3->CCER &=(uint16_t)(~TIM_CCER_CC1P);
  TIM3->SMCR |= TIM_SMCR_SMS | TIM_SMCR_TS_2 | TIM_SMCR_TS_0;
  TIM3->CR1 |= TIM_CR1_CEN;

 

А куб... Он удобен когда надо камешек подобрать, пины на функционал "развесить" и с тактировками разобраться. А дальше по ходу становится злом...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, Integro said:

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

 

1 hour ago, Velund said:

При этом ту же конфигурацию пробовал с использованием дефайнов и макросов LL запустить - она не пошла. Позже может покопаю где собака порылась, но по ходу для LL инклюды тоже индусам оутсорсят. ;)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 часов назад, Velund сказал:

интересующего меня примера я так и не обнаружил.

В реф. мануале на странице 309 есть пример использования External clock source mode 1 и картинка

Figure 109. TI2 external clock connection example

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...