STM32. CMSIS #4. TIMx - делаем точную задержку через таймер TIM3
Вставка
- Опубліковано 22 кві 2021
- Скачать PVS-Studio для проверки своего можно бесплатно на:
pvs-studio.com/nr_download
Топ 5 мифов о статическом анализе:
• Топ 5 мифов о статичес...
Официальная страничка ВКонтакте:
pvsstudio_rus
Знакомимся с таймерами и пробуем использовать TIM3 вместо SysTick по документации и начинаем его программировать для получения необходимого точного значения задержки между двумя любыми процессами для замещения использования системного таймера - SysTick (Функции HAL_Delay()). Проверяем запрограммированное значение по осциллографу и обязательно статическим анализатором кода. Готовый проект можно скачать по ссылке:
github.com/nr-electronics/CMS...
__________________________________________________
Вы можете помочь каналу через Яндекс-деньги:
money.yandex.ru/to/4100115727...
или через банковскую карту:
4377 7237 6190 5714
__________________________________________________
Класс! Все подробно и интересно!! Ждём-с продолжения! Спасибо Вам.
Спасибо. Продолжения будет много, может не так часто правда.
Большое вам спасибо за подробные уроки! Помогли разобраться.
Пожалуйста! Я рад этому.
Большое спасибо за видео.
На здоровье.
Тема CMSIS очень интересна!!!! Есть ли возможность рассмотреть фичи таймера TIM1 ?
Там столько фич в TIM1, что придется делать отдельную ветку. Думаю TIM1 подробнее рассмотрим уже на HAL. До конца пока не определено.
@@NRelectronics ХОЛ не то.... , интерес именно к регистрам и ЦМСИС)
Да я то понимаю интерес))
Ваши дефайны, очень похожи, как сделано в LL для куба.
Ну они чистые с CMSIS. В библиотечке я показывал, а какие свои написал так как думал и написал...
Спасибо за урок. CMSIS иногда очень актуален.
Планируете по I2C сделать урок с каким нибудь датчиком?
CMSIS будет актуален всегда. Да, с I2C и датчиком планирую видео.
@@NRelectronics отлично, ждем! я своими силами I2C не смог запустить на F737--м, повторный старт никак не проходит.
На F7 надо отдельно смотреть, так не скажу. Но эти семейства сильно разные, как по новизне так и по фичам.
почему для tim3_cnt не использовать enum?
существует ли информация (видео, книги) как архитектурно грамотно разрабатывать приложения под МК? ваш подход выглядит как очень сложно поддерживаемый в будущем.
что касается работы с МК, очень подробное и понятное объяснение, спасибо!
В чем сложность, По-моему всё наглядно и понятно. Можно в крайнем случае в отдельный сияние вынести. Такую цель в видео обычно не ставлю, так как важны инициализации и алгоритмы.
Спасибо за оценку, стараюсь, меня где поправляют я тоже учусь, богов нет.
Расскажите об использовании watchdog таймеров
Ок, как-нибудь.
Переменная tim3_cnt в данном случае не нужна. Достаточно проверить состояние вывода в регистре и изменить на противоположное.
Реализовать можно по разному.
@@NRelectronics Можно, но не нужно. Зачем вам лишние переменные и лишняя работа контроллера? Ресурсы контроллера нужно беречь. Почитайте "История одного байта".
Слышал я давно про эту историю)) Но тут получается прошивка менее одного килобайта. Ресурсов хватает с запасом.
Обьясните плиз. Если "TIM3->DIER |= TIM_DIER_UIE;" регистр описан в документации, то откуда и и что это "NVIC_EnableIRQ (TIM3_IRQn);" ???
TIM3->DIER |= TIM_DIER_UIE - После того как таймер достигнет своего максимального значения необходимо что бы он уведомил об этом контроллер прерываний, для этого разрешим генерацию событий. В библиотеке CMSIS.
NVIC_EnableIRQ (TIM3_IRQn) - включить прерывания по таймеру 3.
В регистр ARR необходимо записывать значение на единицу меньше, в вашем случае 9999
есть разные примеры в сети по его применению, в моем случае:
..."TIM3->ARR , который соответствует значению Period"... и оно посчитанное в "WRITE_REG(TIM3->PSC, 7199);"
Зачем в TIM3_IRQHandler нужна проверка SR? Разве функция уже не вызывается по событию?
Мы попадаем по прерыванию в TIM3_IRQHandler, и если поднят флаг, мало ли, всегда его сбрасываем, чтобы не попасть опять в прерывание после выхода из него.
@@NRelectronics Спасибо)
проверка конечно же не нужна! необходимо сразу сбросить флаг и всё. вы всё верно предположили, функция обработчик прерывания как раз и вызывается по этому событию