Страница 1 из 1
Stm32 freeRTOS Hal_delay + ошибки во времени
Добавлено: Ср июн 14, 2023 13:30:50
Cheeseman
Всем привет, сел делать проект на stm32h743. Шаблон проекта сгенерил кубом. В кубе включил только RTOS и тактирование. Создал простенькую задачу мигания светодиодом с частотой 2Гц. В итоге светодиод горит дольше, чем нужно (1.240с. против 0.5с.). Также бонусом получил такую фигню, что Hal_delay до запуска шедулера не работает. Гугл говорит тип до запуска шедулера заблокированы все прерывания, а hal delay необходимо прерывание, которое возникает для инкремента тика. Но задержки мне будут нужны для инициализации. В прошлом проекте как-то решил сей вопрос, в этом завис. В чем может быть проблема?
Добавлено after 2 hours 45 minutes 30 seconds:
Все, разобрался, на макетке кварца не было -_-. Отсюда все пошло.
Re: Stm32 freeRTOS Hal_delay + ошибки во времени
Добавлено: Чт июн 15, 2023 06:28:48
tonyk
Cheeseman писал(а):Но задержки мне будут нужны для инициализации.
А Куб перед компиляцией натыканной в нём конфигурации вообще-то предупреждает, что не хорошо использовать для тиков SysClock или предлагает задействовать какой-нибудь другой таймер. И даже предупреждает, что использовать некоторые его функции в случае использования систика не получится.
Думайте сами, пишите сами, а то уже даже предупреждения Куба не в состоянии прочитать и понять.
Re: Stm32 freeRTOS Hal_delay + ошибки во времени
Добавлено: Чт июн 15, 2023 10:49:00
Cheeseman
Хм, а кто-то говорил, что я sysClock использую? Как бы предупреждение это видел. Непонятно, откуда вы эту инфу взяли.
Re: Stm32 freeRTOS Hal_delay + ошибки во времени
Добавлено: Пт июн 16, 2023 06:21:56
tonyk
Cheeseman писал(а):Непонятно, откуда вы эту инфу взяли.
Оттуда, что HAL_delay() не работает.
Настройка и запуск таймера, чей обработчик инкрементирует счётчик для HAL_delay(), должна быть _до_ первого вызова функций HAL. Нужно просто найти строки с настройками и перенести их в нужное место. И всех делов-то.
Кстати, после настройки периферии, драйверам которой нужен этот HAL_delay(), можно переключить работу с этим счётчика на RTOS, а таймер освободить для более полезных дел. Для этого нужно дописать пару строк в ядро RTOS.
Я ХАЛ не использую, но в паре проектов использовал драйвер USB из ХАЛ, а он без этих задержек не настраивается, поэтому пришлось делать такой финт, чтобы раз в миллисекунду вызывать HAL_IncTick().