Jump to content

    
Sign in to follow this  
Velund

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

Recommended Posts

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

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

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

 

Share this post


Link to post
Share on other sites

 

9 minutes ago, Velund said:

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

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

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

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

Share this post


Link to post
Share on other sites
20 часов назад, Velund сказал:

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

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

 

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

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

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

Edited by makc
Убран оффтопик

Share this post


Link to post
Share on other sites
6 hours ago, Integro said:

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

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

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

 

Share this post


Link to post
Share on other sites
35 minutes ago, Velund said:

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

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

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

Share this post


Link to post
Share on other sites
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;

 

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

 

Share this post


Link to post
Share on other sites
10 hours ago, Integro said:

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

 

1 hour ago, Velund said:

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

 

Share this post


Link to post
Share on other sites
9 часов назад, Velund сказал:

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

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

Figure 109. TI2 external clock connection example

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this