Гексмикро
Чт 13 сентября 2018 г. 15:27
Привет,
Первая публикация здесь!
я’ve пытался найти простые примеры кода, которые используют таймер.C в ядре STM, но без большой удачи. Я вижу, что другие делали торговцы аппаратным обеспечением в разных ядрах, но я’VE A ST32L423 BOARD NUCLEO и вообще I’M пытаюсь использовать библиотеку St Core, которая до сих пор работала для меня.
Если у кого -то есть светодиодный Mlink или другой простой пример, используя прерывания с аппаратным таймером, это поможет мне увидеть, как инициализировать и сделать необходимые вызовы по таймеру.в. Возможная цель - настроить PWM, но мне нужно ползти, прежде чем я хожу !
заранее спасибо.
Кев
Первая публикация здесь!
я’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.
Луча
http: // docs.Leaflabs.com/static.Leaflab ... таймер.HTML
Я не изучал, как таймеры абстрагированы в официальном ядре STM Arduino Core.
Луча
Гексмикро
Пт 14 сентября 2018 г. 16:53
Спасибо, я’В замешался несколько примеров, использующих другие библиотеки, но надеялся найти то же самое для ядра STM. Если я могу’t Найдите любую или фигурируйте, что вычеркнут основной таймер, я посмотрю на переход на другую библиотеку.
Приветствия для ссылки.
Кев
Приветствия для ссылки.
Кев
Chismicro
Сб 15 сентября 2018 г. 5:10 утра
Спасибо, я’Видел несколько примеров, использующих другие библиотеки
Вы имеете в виду ядро вместо примеров?
Для ядра STM322GERERIERC у нас есть некоторые примеры таймера.
Для ядра STM322GERERIERC у нас есть некоторые примеры таймера.
Гексмикро
Сб 15 сентября 2018 г., 17:05
Извините, я имел в виду я’Vieved примеры кода с использованием аппаратных таймеров, но которые используют разные ядра (я думаю, что’S Правильная терминология?например, некоторые используют Libmaple от Roger.
Я начал использовать ‘официальный’ St Core и до сих пор работают, поэтому мой идеал был придерживаться этого и использовать его библиотеку таймеров.
Я думаю, я только что нашел один пример, используя это, но я могу’t, чтобы скомпилировать. я’Попробуйте исправить это, но если я’м застрял (вероятно!), опубликует здесь, чтобы посмотреть, сможет ли кто -нибудь помочь указать, что я’Я делаю неправильно.
Спасибо
Кев
Я начал использовать ‘официальный’ 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 и скомпилирован без ошибок
В настоящее время я в стороне от дома, поэтому не могу скачать на мое оборудование, но компиляция - это огромный шаг вперед для меня, так что спасибо за помощь. Это должно помочь мне прогрессировать и начать использовать для приложения PWM, над которым я работаю.
еще раз спасибо.
Кев
В настоящее время я в стороне от дома, поэтому не могу скачать на мое оборудование, но компиляция - это огромный шаг вперед для меня, так что спасибо за помощь. Это должно помочь мне прогрессировать и начать использовать для приложения 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.
Очень с нетерпением жду помощи в успеваемости и помощи в разработке и проверке, где я могу.
Спасибо,
Джордж
Я проверил эскиз отсюда (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 входов на захват импульсов):
Типичный обработчик прерываний входного захвата (переключает направление края входного захвата в рамках прерывания, чтобы получить достаточно входных каналов (необходимы 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.
}
}