Stm32 freeRTOS Hal_delay + ошибки во времени

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 48
Зарегистрирован: Пн июл 31, 2017 10:53:04

Сообщение Cheeseman »

Всем привет, сел делать проект на stm32h743. Шаблон проекта сгенерил кубом. В кубе включил только RTOS и тактирование. Создал простенькую задачу мигания светодиодом с частотой 2Гц. В итоге светодиод горит дольше, чем нужно (1.240с. против 0.5с.). Также бонусом получил такую фигню, что Hal_delay до запуска шедулера не работает. Гугл говорит тип до запуска шедулера заблокированы все прерывания, а hal delay необходимо прерывание, которое возникает для инкремента тика. Но задержки мне будут нужны для инициализации. В прошлом проекте как-то решил сей вопрос, в этом завис. В чем может быть проблема?

Добавлено after 2 hours 45 minutes 30 seconds:
Все, разобрался, на макетке кварца не было -_-. Отсюда все пошло.
Реклама
Это не хвост, это антенна
Сообщения: 1324
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

Cheeseman писал(а):Но задержки мне будут нужны для инициализации.
А Куб перед компиляцией натыканной в нём конфигурации вообще-то предупреждает, что не хорошо использовать для тиков SysClock или предлагает задействовать какой-нибудь другой таймер. И даже предупреждает, что использовать некоторые его функции в случае использования систика не получится.

Думайте сами, пишите сами, а то уже даже предупреждения Куба не в состоянии прочитать и понять.
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 48
Зарегистрирован: Пн июл 31, 2017 10:53:04

Сообщение Cheeseman »

Хм, а кто-то говорил, что я sysClock использую? Как бы предупреждение это видел. Непонятно, откуда вы эту инфу взяли.
Это не хвост, это антенна
Сообщения: 1324
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

Cheeseman писал(а):Непонятно, откуда вы эту инфу взяли.
Оттуда, что HAL_delay() не работает.

Настройка и запуск таймера, чей обработчик инкрементирует счётчик для HAL_delay(), должна быть _до_ первого вызова функций HAL. Нужно просто найти строки с настройками и перенести их в нужное место. И всех делов-то.

Кстати, после настройки периферии, драйверам которой нужен этот HAL_delay(), можно переключить работу с этим счётчика на RTOS, а таймер освободить для более полезных дел. Для этого нужно дописать пару строк в ядро RTOS.

Я ХАЛ не использую, но в паре проектов использовал драйвер USB из ХАЛ, а он без этих задержек не настраивается, поэтому пришлось делать такой финт, чтобы раз в миллисекунду вызывать HAL_IncTick().
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «ARM»