[Решено] любые примеры с использованием (аппаратного) таймера ?

Гексмикро
Чт 13 сентября 2018 г. 15:27
Привет,

Первая публикация здесь!

я’ve пытался найти простые примеры кода, которые используют таймер.C в ядре STM, но без большой удачи. Я вижу, что другие делали торговцы аппаратным обеспечением в разных ядрах, но я’VE A ST32L423 BOARD NUCLEO и вообще I’M пытаюсь использовать библиотеку St Core, которая до сих пор работала для меня.

Если у кого -то есть светодиодный Mlink или другой простой пример, используя прерывания с аппаратным таймером, это поможет мне увидеть, как инициализировать и сделать необходимые вызовы по таймеру.в. Возможная цель - настроить PWM, но мне нужно ползти, прежде чем я хожу !

заранее спасибо.

Кев

Mrburnette
Пт 14 сентября 2018 г. 14:54
... Мы используем Libmaple от Leaflabs, пример будет похож на:
http: // docs.Leaflabs.com/static.Leaflab ... таймер.HTML

Я не изучал, как таймеры абстрагированы в официальном ядре STM Arduino Core.

Луча

Гексмикро
Пт 14 сентября 2018 г. 16:53
Спасибо, я’В замешался несколько примеров, использующих другие библиотеки, но надеялся найти то же самое для ядра STM. Если я могу’t Найдите любую или фигурируйте, что вычеркнут основной таймер, я посмотрю на переход на другую библиотеку.

Приветствия для ссылки.

Кев

Chismicro
Сб 15 сентября 2018 г. 5:10 утра
Спасибо, я’Видел несколько примеров, использующих другие библиотеки Вы имеете в виду ядро ​​вместо примеров?

Для ядра STM322GERERIERC у нас есть некоторые примеры таймера.

Гексмикро
Сб 15 сентября 2018 г., 17:05
Извините, я имел в виду я’Vieved примеры кода с использованием аппаратных таймеров, но которые используют разные ядра (я думаю, что’S Правильная терминология?например, некоторые используют Libmaple от Roger.


Я начал использовать ‘официальный’ St Core и до сих пор работают, поэтому мой идеал был придерживаться этого и использовать его библиотеку таймеров.

Я думаю, я только что нашел один пример, используя это, но я могу’t, чтобы скомпилировать. я’Попробуйте исправить это, но если я’м застрял (вероятно!), опубликует здесь, чтобы посмотреть, сможет ли кто -нибудь помочь указать, что я’Я делаю неправильно.

Спасибо

Кев

fpistm
Сб 15 сентября 2018 г. 18:45
Привет Hexmicro,

Вы можете попробовать это: /* Blink with Timer Turns an LED on for one second, then off for one second, repeatedly. */ #define TIMER_BLINK TIM4 volatile uint16_t count = 0; /* Handler for stimer */ static stimer_t TimHandle; /** @brief blink callback. Call by a timer interrupt. @param htim: pointer to stimer_t @retval None */ static void blink(stimer_t *htim) { UNUSED(htim); if (count++ == 100) { count = 0; digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); } } // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); /* Set TIMx instance. */ TimHandle.timer = TIMER_BLINK; /* Timer set to 10ms */ TimerHandleInit(&TimHandle, 10000 - 1, ((uint32_t)(getTimerClkFreq(TIMER_BLINK) / (1000000)) - 1)); attachIntHandle(&TimHandle, blink); } // the loop function runs over and over again forever void loop() { // do nothing }

Гексмикро
Сб 15 сентября 2018 г. 20:00
Блестящий, большое спасибо за это. Я попробую и вернусь.

Оценить всю помощь.

Кев

Гексмикро
Сб 15 сентября 2018 г., 21:02
Когда я впервые попробовал, у меня была ошибка компиляции («TIM4» не была объявлена ​​в этом прицеле), но никаких других ошибок, так что так быстро не поняли, что STM32L432KC, который я использую, не имеет таймера 4 ! Изменил ваш пример кода REFS с TIM4 на TIM15 и скомпилирован без ошибок : D : D

В настоящее время я в стороне от дома, поэтому не могу скачать на мое оборудование, но компиляция - это огромный шаг вперед для меня, так что спасибо за помощь. Это должно помочь мне прогрессировать и начать использовать для приложения PWM, над которым я работаю.

еще раз спасибо.

Кев

Гексмикро
Солнце 16 сентября 2018 г. 18:49
Просто чтобы подтвердить, пример кода работал нормально на Nucleo STM32L432, как только я заменил, чтобы использовать TIM15, светодиодные мигание, как и ожидалось,. Теперь я поиграю с ним и, надеюсь, использую его, чтобы узнать, как использовать таймер для более практического использования.

Спасибо

Кев

Nikosx
Пн 17 сентября 2018 г. 18:56
Протестировано OK с помощью Nucleo64 F030R8 !!!!
Спасибо !

Nikosx
Пн 17 сентября 2018 г. 18:58
... с #define Timer_blink TIM6 (с помощью Timer6 на F030...) :)

Nikosx
Вторник 18 сентября 2018 г., 7:51 утра
Протестировано OK также в нукле F091RC с 2 используемыми таймерами, одним вождением, 2 -е событие последовательного печати.. Наконец, после долгого времени пример таймера с помощью int handler, который работает, а также прост в использовании !!! В ожидании обновления Timer LIB...

Mgeo
Пн, 01 октября 2018 г. 9:34 утра
Всем здравствуйте,

Я проверил эскиз отсюда (https: // www.STM32duino.com/viewtopic.PHP?P = 49879#P49879) на Nucleo-F103RB работает, как и ожидалось для TIM1 до TIM4.

Я надеюсь получить достаточно понимания этого ядра и управления таймером STM32 для порта этого приложения контроллера полета (http: // www.броккинг.net/ymfc-32_main.HTML). Первоначально это было разработано вокруг немного более ранней версии Roger's STM32Duino Core (http: // www.броккинг.net/ymfc-32_downloads.HTML). Он использует некоторые манипуляции с битом более низкого уровня TIM2-4 для входного захвата на основе прерываний импульсных входов, а также аппаратного управления ШИМ.

Я работаю над основным ядром HAL, чтобы это приложение могло перейти на доски на основе F3/F4. В то же время я поднимаюсь на общую кривую обучения STM32/HAL, мигрируя из 8 -битных AVRS. Я играл с STM32GENERIERIER, поскольку, по -видимому, у него есть функциональность работы с усердно, но проблемы с основными функциями ARDUIN.

Очень с нетерпением жду помощи в успеваемости и помощи в разработке и проверке, где я могу.

Спасибо,
Джордж

Mgeo
Пн, 01 октября 2018 г. 10:27 утра
Я должен добавить, что приложение, которое я пытаюсь портировать из STM32Duino Core, использует TIM2 и TIM3 (входной захват пилотных команд из RC -приемника), а также TIM4 (выходы ШИМ для контроллеров двигателя QuadCopter). Я начну новую ветку, чтобы не задушить эту.

Типичный обработчик прерываний входного захвата (переключает направление края входного захвата в рамках прерывания, чтобы получить достаточно входных каналов (необходимы 6 входов на захват импульсов): void handler_channel_1(void) { //This function is called when channel 1 is captured. if (0b1 & GPIOA_BASE->IDR >> 0) { //If the receiver channel 1 input pulse on A0 is high. channel_1_start = TIMER2_BASE->CCR1; //Record the start time of the pulse. TIMER2_BASE->CCER |= TIMER_CCER_CC1P; //Change the input capture mode to the falling edge of the pulse. } else { //If the receiver channel 1 input pulse on A0 is low. channel_1 = TIMER2_BASE->CCR1 - channel_1_start; //Calculate the total pulse time. if (channel_1 < 0)channel_1 += 0xFFFF; //If the timer has rolled over a correction is needed. TIMER2_BASE->CCER &= ~TIMER_CCER_CC1P; //Change the input capture mode to the rising edge of the pulse. } }