Францискогимено
Ср 22 ноября 2017 г. 9:38
Привет, друзья могут кто -нибудь подать мне пример использования таймеров с Arduino IDE в основной доске.
Библиотека таймера1..Timer3, кажется, не работает на этой доске.
Я искал, но я не вижу ясного примера.
Приветствую и спасибо
Библиотека таймера1..Timer3, кажется, не работает на этой доске.
Я искал, но я не вижу ясного примера.
Приветствую и спасибо
Стивестронг
Ср 22 ноября 2017 г. 10:45
Вот оригинальная справочная документация Leaflabs: http: // docs.Leaflabs.com/static.Leaflab ... -мини.HTML
С правой стороны у вас есть модули (включая таймеры).
С правой стороны у вас есть модули (включая таймеры).
Францискогимено
Ср 22 ноября 2017 г. 11:01
Спасибо за ответ.
В этой сети ссылка на эти библиотеки у меня нет.
Моя доска - STMF303 - F303K8 и не используйте эти библиотеки
В этой сети ссылка на эти библиотеки у меня нет.
Моя доска - STMF303 - F303K8 и не используйте эти библиотеки
fpistm
Ср 22 ноября 2017 г. 13:27
Привет,
Я открываю дискуссию об управлении таймером здесь:
https: // github.com/stm32duino/arduino_c ... Проблемы/146
Я открываю дискуссию об управлении таймером здесь:
https: // github.com/stm32duino/arduino_c ... Проблемы/146
Францискогимено
Ср 22 ноября 2017 г. 16:07
Я использовал <Flexitimer2.час> и это дает мне ошибку при компиляции.
Не поддерживает этот микро.
Два других не компилируют.
Не поддерживает этот микро.
Два других не компилируют.
Францискогимено
Чт 23 ноября 2017 г. 18:15
Кто -то знает, почему библиотеки не работают
Таймер1 ... 2 ...
Я попробовал этот пример, и он тоже не работает.
#define any_delay_rquired 0x0fff
Тим6->Sr = 0
Тим6->Arr = any_delay_rquired
Тим6->CR1 | = TIM_CR1_CEN
пока (!(TIM6->Старший & Tim_sr_uif)); / * Цикл до тех пор, пока флаг события обновления не будет установлен */
/ * Требуемая задержка времени была исчщена */
/ * Код пользователя может быть выполнен */
Компилировать без ошибок, но это не работает
Таймер1 ... 2 ...
Я попробовал этот пример, и он тоже не работает.
#define any_delay_rquired 0x0fff
Тим6->Sr = 0
Тим6->Arr = any_delay_rquired
Тим6->CR1 | = TIM_CR1_CEN
пока (!(TIM6->Старший & Tim_sr_uif)); / * Цикл до тех пор, пока флаг события обновления не будет установлен */
/ * Требуемая задержка времени была исчщена */
/ * Код пользователя может быть выполнен */
Компилировать без ошибок, но это не работает
fpistm
Чт 23 ноября 2017 г. 20:22
Может, CLK для этого таймера не включает.
__Hal_rcc_tim6_clk_enable
https: // github.com/stm32duino/arduino_c ... RCC.H#1797
__Hal_rcc_tim6_clk_enable
https: // github.com/stm32duino/arduino_c ... RCC.H#1797
Францискогимено
Пт 24 ноября 2017 г. 7:55 утра
Привет, этот пример, я взял его со листа ST AN4776
Чтобы использовать его, я включаю в проект #include <Таймер.час>.
Я попробую вашу возможность увидеть, работает ли это.
Чтобы использовать его, я включаю в проект #include <Таймер.час>.
Я попробую вашу возможность увидеть, работает ли это.
Францискогимено
Пт 24 ноября 2017 г. 13:11
Это все еще не работает .. Я схожу с ума от таймера
Францискогимено
Пт 24 ноября 2017 г. 13:18
Если я помесчу это:
Тим6-> Sr = 0;
Тим6-> Arr = 250;
Тим6-> CR1 | = Tim_cr1_cen;
пока (! (TIM6-> Старший & Tim_sr_uif));
точка а
Никогда не ходите в пункт А
RCC->Apb1enr | = rcc_apb1enr_tim6en; <-----------новая линия
Тим6->Sr = 0;
Тим6->Arr = 250;
Тим6->CR1 | = TIM_CR1_CEN;
пока (!(TIM6->Старший & Tim_sr_uif));
точка а
И с новой линией, которая говорит вам, что генератор внутренний,
сразу же, не делая никаких сроков
Тим6-> Sr = 0;
Тим6-> Arr = 250;
Тим6-> CR1 | = Tim_cr1_cen;
пока (! (TIM6-> Старший & Tim_sr_uif));
точка а
Никогда не ходите в пункт А
RCC->Apb1enr | = rcc_apb1enr_tim6en; <-----------новая линия
Тим6->Sr = 0;
Тим6->Arr = 250;
Тим6->CR1 | = TIM_CR1_CEN;
пока (!(TIM6->Старший & Tim_sr_uif));
точка а
И с новой линией, которая говорит вам, что генератор внутренний,
сразу же, не делая никаких сроков
Дэнниф
Пт 24 ноября 2017 г. 13:24
У меня есть набор процедур таймеров для F3, но он построен на вершине SPL.
Взгляните на таблицу данных, и не так сложно выработать набор собственных процедур, с прямым доступом к регистрации.
Если у меня будет некоторое время, я могу написать сам сам.
Взгляните на таблицу данных, и не так сложно выработать набор собственных процедур, с прямым доступом к регистрации.
Если у меня будет некоторое время, я могу написать сам сам.
Францискогимено
Пт 24 ноября 2017 г. 15:30
Я был бы признателен, мне просто нужен пример, и я продолжаю.
Странно то, что даже не работает код ST.
Странно то, что даже не работает код ST.
Дэнниф
Пт 24 ноября 2017 г. 22:13
Я на самом деле закончил просто использовать свой код F1.
tim3_init(100); //set prescaler to 100
tim3_setpr1(50000ul); //oc1 period to be 50000 ticks
tim3_act1(led12_flp); //install user handler
ei(); //enable global interrupts
Дэнниф
Пт 24 ноября 2017 г. 22:27
Кстати, этот подход (с использованием выходных каналов сравнения для времени) позволяет создавать 4 события времени на TIM2/3/4 (каждый из которых имеет 4 канала сравнения выхода) с разными периодами.
это можно расширить и на другие чипсы. Для получения дополнительной информации см. Здесь: https: // dannyelectronics.WordPress.ком/ ... ол
Основной код должен работать на других чипах STM32 с минимальной повторной конфигурацией: в основном для изменения тактового снабжения.
это можно расширить и на другие чипсы. Для получения дополнительной информации см. Здесь: https: // dannyelectronics.WordPress.ком/ ... ол
Основной код должен работать на других чипах STM32 с минимальной повторной конфигурацией: в основном для изменения тактового снабжения.
Францискогимено
Пн 27 ноября 2017 г. 8:43 утра
Привет, друг, спасибо большое спасибо за ваш код.
Мне удалось доказать это, но перерывы не вызывают запуска
Мне удалось доказать это, но перерывы не вызывают запуска
Францискогимено
Вт 28 ноября 2017 г. 9:51 утра
В конце я решил это, поместив функцию
В Systick_handler, побуждение, так как есть много таймеров
без использования.
В прерывании таймера не работает.
Я пытался с таймером 6, 7, 1,3, и он не работает.
Например, базовый таймер 6 имеет правильное значение, но
Даже если вы установите активное прерывание, оно никогда не запускает его.
Также, если в любом таймере активно это:
В Systick_handler, побуждение, так как есть много таймеров
без использования.
В прерывании таймера не работает.
Я пытался с таймером 6, 7, 1,3, и он не работает.
Например, базовый таймер 6 имеет правильное значение, но
Даже если вы установите активное прерывание, оно никогда не запускает его.
Также, если в любом таймере активно это:
TIM6->DIER |= TIM_DIER_UIE;
Дэнниф
Вт 28 ноября 2017 г. 16:54
То, как вы написаны ISR, это трудно не повесить.
1. Прочитайте таблицу и посмотрите, что вам нужно там делать.
2. Переверните булавку в ISR, чтобы помочь вам понять, что происходит.
1. Прочитайте таблицу и посмотрите, что вам нужно там делать.
2. Переверните булавку в ISR, чтобы помочь вам понять, что происходит.
Францискогимено
Вт 28 ноября 2017 г., 18:32
Ну, я не знаю, хотя я смотрю на справочное руководство RM0316 RM0316
и режимы конфигурации:
AN4013 Примечание примечания STM32 Обзор таймера перекрестного сериала
AN4776 Примечание примечания общего назначения поваренная книга таймера таймера
Я не вижу вины.
и режимы конфигурации:
AN4013 Примечание примечания STM32 Обзор таймера перекрестного сериала
AN4776 Примечание примечания общего назначения поваренная книга таймера таймера
Я не вижу вины.
Францискогимено
Вт 28 ноября 2017 г., 19:06
Это также не запускает событие:
void tim6_init ()
{
RCC->Apb1enr | = rcc_apb1enr_tim6en; // включить часы TIM6
Тим6->PSC = 41999; // Установить Прескалер на 41999
Тим6->Arr = 5999; // установить автоматическую загрузку на 5999
Тим6->CR1 | = TIM_CR1_OPM; // один режим импульса
Тим6->Egr | = tim_egr_ug; // Обновление силы
Тим6->Старший &= ~ Tim_sr_uif; // очистить флаг обновления
Тим6->Dier | = tim_dier_uie; // включить прерывание события обновления
Nvic_enableirq (tim6_dac_irqn); // включить TIM6 IRQ
Тим6->CR1 | = TIM_CR1_CEN; // включить счетчик TIM6
}
void tim6_dac_irqhandler ()
{
if (tim6->Старший & TIM_SR_UIF != 0) // Если установлен флаг обновления
{
Тим6->Старший &= ~ Tim_sr_uif; // прерывание было обработано
Сериал.println ("прерывание");
}
}
void tim6_init ()
{
RCC->Apb1enr | = rcc_apb1enr_tim6en; // включить часы TIM6
Тим6->PSC = 41999; // Установить Прескалер на 41999
Тим6->Arr = 5999; // установить автоматическую загрузку на 5999
Тим6->CR1 | = TIM_CR1_OPM; // один режим импульса
Тим6->Egr | = tim_egr_ug; // Обновление силы
Тим6->Старший &= ~ Tim_sr_uif; // очистить флаг обновления
Тим6->Dier | = tim_dier_uie; // включить прерывание события обновления
Nvic_enableirq (tim6_dac_irqn); // включить TIM6 IRQ
Тим6->CR1 | = TIM_CR1_CEN; // включить счетчик TIM6
}
void tim6_dac_irqhandler ()
{
if (tim6->Старший & TIM_SR_UIF != 0) // Если установлен флаг обновления
{
Тим6->Старший &= ~ Tim_sr_uif; // прерывание было обработано
Сериал.println ("прерывание");
}
}
Дэнниф
Вторник 28 ноября 2017 г. 11:52
Вы близки. Так что продолжайте работать над этим.
следующее:
следующее:
IO_OUT(LED_PORT, LED12); //led as output
tim6_init(100); tim6_setpr(10000); tim6_act(led12_flp);
tim7_init(100); tim7_setpr(10000*1.01); tim7_act(led12_flp);
ei(); //enable global interrupts
fpistm
Ср 29 ноября 2017 г. 8:26 утра
Какое ядро вы использовали?
Обратите внимание, что, если IRQHandler определяется в файле CPP или в файле INO, вы должны объявить TIM6_DAC_IRQHandler как Extern "C"
Обратите внимание, что, если IRQHandler определяется в файле CPP или в файле INO, вы должны объявить TIM6_DAC_IRQHandler как Extern "C"
extern "C" void TIM6_DAC_IRQHandler()
Францискогимено
Ср 29 ноября 2017 г. 10:58 утра
Код скомпилируется хорошо, и счетчик имеет значение в соответствии с планом.
Как в вашем примере, так и в предыдущем, опубликованном мной.
Проблема в том, что когда вы достигаете конца учетной записи, микро -микросхема блокируется и никогда не входит в
прерывание, как будто я собирался искать это прерывание, и я не найду его, и, конечно, это вешает трубку.
Это происходит с двумя примерами с вашим и моим
Любые предложения?
Как в вашем примере, так и в предыдущем, опубликованном мной.
Проблема в том, что когда вы достигаете конца учетной записи, микро -микросхема блокируется и никогда не входит в
прерывание, как будто я собирался искать это прерывание, и я не найду его, и, конечно, это вешает трубку.
Это происходит с двумя примерами с вашим и моим
Любые предложения?
Францискогимено
Ср 29 ноября 2017 г. 11:18
Привет
Ядро: Nucleo STMF303 - F303K8
И эта линия, где я ее поместил, потому что я проверил начало программы:
extern "c" void tim6_dac_irqhandler ();
И я получаю ошибку.
основной.А (таймер.в.o)*: в функции tim6_dac1_irqhandler
таймер.C*: (.текст.TIM6_DAC1_IRQHandler+0x0): множественное определение TIM6_DAC1_IRQHandler
Ядро: Nucleo STMF303 - F303K8
И эта линия, где я ее поместил, потому что я проверил начало программы:
extern "c" void tim6_dac_irqhandler ();
И я получаю ошибку.
основной.А (таймер.в.o)*: в функции tim6_dac1_irqhandler
таймер.C*: (.текст.TIM6_DAC1_IRQHandler+0x0): множественное определение TIM6_DAC1_IRQHandler
Дэнниф
Ср 29 ноября 2017 г. 11:55 утра
никогда не входит в
прерывание, Вы не могли (и не могли) установить это. Если вы попытаетесь установить это, вы найдете проблему с вашим кодом.
Любые предложения? так же, как я дал тебе ранее.
прерывание, Вы не могли (и не могли) установить это. Если вы попытаетесь установить это, вы найдете проблему с вашим кодом.
Любые предложения? так же, как я дал тебе ранее.
Францискогимено
Ср 29 ноября 2017 г. 12:22
Извините, но я не понимаю, что вы имеете в виду.
fpistm
Ср 29 ноября 2017 г. 13:01
Ошибка нормальная с ARDUINO_CORE_STM32, поскольку функция TIM6_DAC1_IRQHandler уже определена в ядре.
Как уже говорилось, я должен пересмотреть управление таймером, выпуск открылся для отслеживания этого обзора:
https: // github.com/stm32duino/arduino_c ... Проблемы/146
Вы выпускаете связан с этим PR:
https: // github.com/stm32duino/arduino_c ... 2/тяга/150
Ядро уже определило Timx_irqhandler, пока он не должен.
В частности, эта линия:
https: // github.com/stm32duino/arduino_c ... 54128R1119
Как уже говорилось, я должен пересмотреть управление таймером, выпуск открылся для отслеживания этого обзора:
https: // github.com/stm32duino/arduino_c ... Проблемы/146
Вы выпускаете связан с этим PR:
https: // github.com/stm32duino/arduino_c ... 2/тяга/150
Ядро уже определило Timx_irqhandler, пока он не должен.
В частности, эта линия:
https: // github.com/stm32duino/arduino_c ... 54128R1119
WEAK void TIM6_IRQHandler(void)
Францискогимено
Ср 29 ноября 2017 г. 13:49
Хорошо. Хорошо, это уже работает наконец
Большое спасибо всем.
Суммировано для того, что случается со мной и не сходит с ума ...
Измените таймер.c Файл
Все эти пустоты Тим.... Для этих слабых пустот Тим...... и сохранить.
Когда прерывание определяется таким образом:
Внешний "C" {
void tim6_dac_irqhandler ()
{
код прерывания
}
}
И сейчас
Я чуть не умер в этом.
Спасибо, спасибо, спасибо всем.
Большое спасибо всем.
Суммировано для того, что случается со мной и не сходит с ума ...
Измените таймер.c Файл
Все эти пустоты Тим.... Для этих слабых пустот Тим...... и сохранить.
Когда прерывание определяется таким образом:
Внешний "C" {
void tim6_dac_irqhandler ()
{
код прерывания
}
}
И сейчас
Я чуть не умер в этом.
Спасибо, спасибо, спасибо всем.