Электронная нагрузка на STM32. Программирование. Задачи FreeRTOS.

  Рет қаралды 18,687

Vladimir Medintsev

Vladimir Medintsev

Күн бұрын

Рассказывается о том, как разрабатывалась электронная нагрузка для мастерской. Микроконтроллер STM32F051. Программирование с использованием операционной системы FreeRTOS.
Канал в телеграмм - t.me/vladimir_...
Канал Яндекс.Дзен - zen.yandex.ru/...
Канал на RuTube - rutube.ru/chan...
Канал на KZbin - / vladimirmedintsev
------------------------------------------
Если вы хотите поддержать автора канала номер карты Сбер:
2202-2023-2480-4008
------------------------------------------
Электронная нагрузка на STM32. Зачем нужна. Схемотехника и конструкция. - • Электронная нагрузка н...
Электронная нагрузка на STM32. Программирование на Qt. Ответы на вопросы - • Электронная нагрузка н...
STM32 ADC. Основные приемы работы. Примеры кода и настройки. - • STM32 ADC. Основные пр...
STM32 + Nokia1202 Сборка и программирование. - • STM32 + Nokia1202 Сбор...
Схема электронной нагрузки - yadi.sk/d/E9Nc...
Исходные коды к этому видео - yadi.sk/d/I0yO...

Пікірлер: 97
@fly8r358
@fly8r358 4 жыл бұрын
Крайне полезный для вникающих в RTOS материал. Узрел почти все ключевые моменты, которые почерпнул в документации на саму RTOS. Особенно порадовало, что сразу показано как работать с очередями и таймерами ОС. Владимир, спасибо!
@SaihoS1
@SaihoS1 4 жыл бұрын
Очень понравился дизайн экрана. Удобно, логично и лаконично, красиво. У вас отличный вкус.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Спасибо.
@iqubik
@iqubik 4 жыл бұрын
Спасибо! Вы очень внимательно и детально даёте инфу о итеративной разработке. Буду повторять через пару недель
@MrASmitt
@MrASmitt 4 жыл бұрын
Я сначала не понял как дребезг кнопок решается, а потом как понял и охренел! это же гениально!!
@sleeply4cat
@sleeply4cat 3 жыл бұрын
мне не нравится. Один раз считается негативное значение - и привет, двойное нажатие.
@admin_of_youtube
@admin_of_youtube 4 жыл бұрын
супер! все классно, особенно подача материала. вот никто, никто не делает шрифт больше, чтоб можно было комфортно смотреть издалека, а не упираться носом в монитор. а тут в очередной раз вижу заботу о зрителях. жаль ролик всего полчаса идет, такое можно смотреть целыми днями. спасибо за старания!
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Спасибо.
@Ololoshize
@Ololoshize 3 жыл бұрын
Спасибо за обработку дребезга кнопок, очень изящно.
@RadioTexnik
@RadioTexnik 4 жыл бұрын
Владимир, классное видео для новичков и не только! Всё очень понятно, каждый почерпнёт для себя полезную мысль! А на то, о чём будут писать так называемые "эксперты" не стоит обращать внимания и отвлекаться на это. Лайк!)
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Спасибо.
@leon11235
@leon11235 4 жыл бұрын
Нужная штука, были мысли создать что-то похожее. Буду следить за развитием проекта)
@serjkp
@serjkp 4 жыл бұрын
Ценность данного видео даже не в том, что показан весь путь дизайна изделия (наверняка все применяют этот же метод по-блочной проверки железа и генерации кода), а именно в рассказе о принципе построения РТОСного приложения. С одной стороны жаль, что выбран мелкий камень и пришлось ужаться в три таска, а хотелось бы посмотреть, как организовывать более широкое использование РТОСа (с мютексами и семафорами). С другой стороны, сразу идет акцент на бережливом использовании имеющихся ресурсов и способов их экономии. Годный контент.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Большое спасибо.
@mail_robot1609
@mail_robot1609 2 жыл бұрын
Тасков на этом камне можно хоть двадцать запустить. Парень просто не шарит
@user-tz2zg3so2v
@user-tz2zg3so2v 4 жыл бұрын
Большое спасибо
@user-jl7et8gx5u
@user-jl7et8gx5u 4 жыл бұрын
Спасибо
@SevenNightdreemVeryPavlovny
@SevenNightdreemVeryPavlovny 2 жыл бұрын
Владимир, здравствуй! Я примерно так же делаю, но для кнопок использую прерывание из которого даю семафор на выполнение задачи обработки кнопок, жалко мне так просто задачку крутить) а ещё бесяво постоянно freertos отдавать системный таймер, проще было бы в настройках отдать любой другой из доступных.
@-Darkweider
@-Darkweider 4 жыл бұрын
Спасибо, надеюсь проект будет развиваться. Хорошо бы кидать лог в UART. В csv ну или OpenFormat для LogView
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Будет еще только одно видео про разное технологическое типа вопросы - ответы по этому устройству.
@maksv24
@maksv24 4 жыл бұрын
Довольно интересно когда проест доводится до конца, от А до Я. Хотелось бы услышать Ваш опыт и какие то наработки в плане архитектуры и логики написания кода (без ОС). Очень много статей по синтаксису и регистрам МК, а вот алгоритмов, как правильно или как рационально писать код, общих практик довольно мало. Для примера, пишу я библиотеку для парсинга данных из UART, как мне правильней, прерывания запихать в библиотеку, или вынести все в отдельные файлы, а в библиотеке какие то колбеки просто реализовать. Как бы путей реализации много и написать говнокод проблем не составляет проблем. А вот именно информации по логике и нормальных практик довольно мало. Так же интересно как один и тот же код применять на разные железные исполнения для примера всем известный (github.com/betaflight/betaflight) ядро одно, а хардварного исполнения множество)). буду рад если кто то в комментариях также поделится статьями и своими наработками). PS. У Вас нет случаем TELEGRAM канала для живого общения? )
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Я не особый любитель этих вот всех социальных штучек типа телеграмма и ватсапа. Они много времени отнимают. А его, времени нету совсем. Если что важное, то есть электронная почта.
@fly8r358
@fly8r358 4 жыл бұрын
Для контроллеров АВР я для себя выбрал путь конечных автоматов(еще называется SWITCH технология). Суть не далека от RTOS, только чуть проще. С софтварными таймерами и очередью сообщений. Можете посмотреть мою структуру кода здесь github.com/fly8r/co2_semaphore . Не уверен, что прям лучший вариант, но мне подходит идеально на АВРах. Также сейчас портанул подход на STM32, чтобы в небольших проектах и на мелких контроллерах не таскать RTOS. Почитать подробнее можно тут www.kit-e.ru/articles/circuit/2006_11_164.php , есть еще эта же статья в PDF, но с ходу не нашел где.
@kalobyte
@kalobyte 4 жыл бұрын
я тоже все жду, пока кто-то сделает уроки алгоритмов _ правильного _ написания кода под контроллер полно роликов про мигание светодиодами, но никто толком не может скать, как он пишет код ит почему именно так, а не этак и что будет, если в будущем надо будет добавить плюшки а то может статься так, что надо будет с нуля все переписать и еще у многих код нечитаемый, все навалено в кучу проще говоря - каждый говорит и показывает, как пользоваться дрелью, молотком или как сделать топор, но никто не показывает, как он построил дом и насколько надежный этот дом получился некоторые строят сараи, а у некоторых эти сараи кривые и вход через окно
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
@@kalobyte Никто такие видео не делает по той причине что нечего сказать. Одну и ту же задачу я и мои коллеги пишут совершенно по разному. Кто-то из нас делает это более эффективно, кто-то менее. Но все сильно меняется от задачи к задаче. Типичный пример. У нас была задача когда контроллер реагировать должен был на текстовые команды с консоли. Мой коллега начал писать целый язык, реально интерпретатор команд. Красивейший и настолько же сложнейший код. Только программист поймет какая там была красота и универсальность подхода. Но убил он на этот кусок кода около месяца и параллельно я спасая проект написал всего сотню строк просто анализируя регулярные выражения. С точки зрения программирования у меня - дерьмо, у коллеги - шедевр. С точки зрения заказчика - мой код работает на 300 шт. контроллерах, а его код у нас в архиве лежит ждет следующего случая. Вот и как тут кого-то учить.
@kalobyte
@kalobyte 4 жыл бұрын
​@@VladimirMedintsev а разве нет устоявшихся проверенных архитектурных решений? ну например чтобы предсказать, что твой код не зависнет или не заглючит после 100500 часов работы? вот я как быдлоадмин вижу, что работает себе прога, работает, а по достижению какого-то объема данных оно или тормозить начинает, или глючит и зависает или вот виндовс сервер работает ,а потом у него в логах ошибки начинаются появляться и вроде никто ничего не делал а откуда ошибки?
@ibrag2012
@ibrag2012 4 жыл бұрын
В STMмках приємно працювати з математикою (чого справді не вистачає в AVRках).
@fendyrony3264
@fendyrony3264 4 жыл бұрын
Уважаемый Владимир, сделайте пожалуйста видео по зарядному устройству с ручными режимами установки и электронной нагрузкой. Спасибо.
@Insideus2786
@Insideus2786 4 жыл бұрын
Спасибо за интересное видео! И коль уж оно обучающее, то следует отметить, что использовать разные типы библиотек (это я о каше из HAL и CMSIS) не есть хорошо.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Я аж поперхнулся. Нельзя же так блин... Почему нельзя кашу делать? Кто так завещал перед смертью?
@Insideus2786
@Insideus2786 4 жыл бұрын
@@VladimirMedintsev Я не написал, что нельзя. Можно всё, но зачем? Зачем нужно писать часть функций через CMSIS, когда вы уже перешли на HAL. Дяди разработчики придумали функцию HAL_TIM_SetCompare вместо TIM->CCR1, а вы ей не пользуетесь. Им же обидно. Но это дело каждого конечно :)
@aleximperror8775
@aleximperror8775 4 жыл бұрын
Владимир, а почему вы использовали таймер для запроса АЦП, почему не воспользовались кольцевым буфером в дма?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Встречный вопрос - а зачем?
@aleximperror8775
@aleximperror8775 4 жыл бұрын
Ну как, таймер - лишняя нагрузка на процессор и память, а так за вас все сделает дма, один раз выделили 2 байта и забираете от туда значение по мере надобности.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Ах вот вы о чем... Ну так я же сказал и не один раз что программа показанная в ролике сделана специально в обучающих целях, чтобы показать как можно работать с FreeRTOS. Видимо я как-то это не правильно донес до народа. Чтобы показать какие средства есть в составе ОС. Потому что какое-то время назад был ролик про программные таймеры в FreeRTOS. А с другой стороны микроконтроллер загружен только на 17% и от того, что я его нагрузку уменьшу менее чем на 1% ничего не изменится. Ну вообще ничего. Потому что программный таймер отнимает всего около 12/1000 каждого тика или примерно 1,3 миллисекунды каждую секунду процессорного времени. Ну это короче даже менее 1 процента тут оптимизировать нечего. Микроконтроллер просто отдыхает... Ему тактовую можно смело до 8 МГц уменьшать без существенного увеличения загрузки.
@aleximperror8775
@aleximperror8775 4 жыл бұрын
Нет, я понял, что видео демонстрационное, но закольцованный дма тут напрашивается сам собой, тем более, что памяти у вас было впритык. Да и показать начинающим, что так можно сэкономить как минимум память было бы здорово. Да, спасибо вам за ваши видео - реально офигенные!
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Спасибо.
@maddocrusmad464
@maddocrusmad464 4 жыл бұрын
А можно ли такой нагрузкой, нагружать например светодиодный драйвер. По идее драйвер сам делает стабилизацию по току и надо нагружать падением напряжения? Как реализована в вашей электронной нагрузке стабилизация по напряжению, это шим?
@maddocrusmad464
@maddocrusmad464 4 жыл бұрын
По настройкам в CubeMX это ЦАП.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Можно.
@maddocrusmad464
@maddocrusmad464 4 жыл бұрын
@@VladimirMedintsev , нет ну расскажите секрет как происходит регулирование по напряжению. Например есть драйвер стабилизация на 0,7 А. И этот драйвер нужно погонять с падением напряжения на 45 В и на 60 В. В чем секрет работы логики вашей схемы? А то я не буду показывать, там пару строчек. Блин я уже раздразнился🤔
@fait0n
@fait0n 4 жыл бұрын
Для хоббийного проекта нормально, а так использование RTOS избыточно. Если по каким-то причинам потребуется усложнение проекта, то для стабильной работы RTOS уже может не хватить ресурсов МК. Тут либо брать более жирный pin to pin совместимый МК, или переписывать проект без использования RTOS.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
По вашему с FreeRTOS создаются только хоббийные проекты? Каких конкретно ресурсов может не хватить? А если немного оптимизировать?
@mail_robot1609
@mail_robot1609 2 жыл бұрын
Я и на 030 ртос запускал... Задач на 5 по моему с семафорами и телеграммами. И норм
@ilhitindustries7499
@ilhitindustries7499 4 жыл бұрын
Расскажите пожалуйста как вы применяете законы Ома и Кирхгофа на практике.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Как правило закон Ома я использую для того, чтобы определить ток протекающий через резистор. Потом хотелось бы умножить ток, на падение напряжения на этом резисторе и найти рассеивающуюся мощность. Но... как правило я не успеваю это сделать и резистор бесславно сгорает. Но я не отчаиваюсь и повторяю эти опыты. А правило Кирхгофа почти то же самое но для более сложных цепей. Там шанс успеть вроде бы и больше, но вычислений тоже прибавляется.
@aisonaison2877
@aisonaison2877 3 жыл бұрын
Владимир, приветствую! Подскажите пожалуйста, как называются такие энкодеры и где их найти? мне очень понравился Ваш проэкт, хочу повторить его. Но цены на 051 чипы сейчас неоправданно высоки. Если я поставлю другой чип, с какими сложностями я столкнусь? Знания в СТМ нулевые. Програмирование АВР немного знаю.
@VladimirMedintsev
@VladimirMedintsev 3 жыл бұрын
Энкодеры проще искать на алиэкспресс. Просто поищите по ключевым словам "5 way button". Вбейте в поиск на алиэкспресс и будет вам счастье.
@MrVitemk
@MrVitemk 4 жыл бұрын
Вы не могли бы выложить схему в виде изображения или pdf.
@nikolayafrin6836
@nikolayafrin6836 4 жыл бұрын
А можно платку купить с прошитым контроллером?
@OverCurrent
@OverCurrent 4 жыл бұрын
Владимир, помогите решить загадку, на вас одна надежда. Имеется плата 6-канального вольтмера на Stm32f103c8t6(самопал). Проблема в том,что не работает АЦП, Вообще ничего не пишет в переменную. При том, что этот же код на китайском Blue Pill работает. МК заведомо исправен(перепаивал с того же Blue Pill). 500 раз перепроверил разводку и пайку. МК, кварц с конденсаторами, кондеры на питании, бут0 на массе и разъем для программирования. На AVDD 3.3 присутствует. Может будут какие идеи?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
считывайте не ножки а vref и температуру и тем самым проверяйте что АЦП работает, если вы эти значения прочитаете значит аналоговое питание и АЦП работают. Значит проверять альтернативные функции ножек и сами ножки что на них что-то есть. Если АЦП не работает то смотреть что он в своих регистрах пишет чего ему не так, проверять тактирование и питание.
@iwh1te340
@iwh1te340 4 жыл бұрын
По какому принципу запущено ацп? Если через dma и используется последний куб и кейл, проверте инициализацию, сначала блок dma, потом ацп. Если наоборот, то работать не будет
@cezis666
@cezis666 4 жыл бұрын
Hello Vladimir, Can you update tutorial for ADC using FreeRTOS. There is some things changed lately with HAL libraries as for example HAL_ADCEx_Calibration is no longer a part of HAL library. I wanted to use your code for my project but I really struggle to do so, because even calling ADC to start in DMA mode using FreeRTOS timer is not possible because after one conversion it stops and FreeRTOS timer stops even though scheduler keeps running. So weird things going on, can you help us by clarifying this new HAL using STM32CubeIDE? I really appreciate your work, thanks !
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
I hope that this video will settle a couple of your issues - kzbin.info/www/bejne/mqipn6Rpra-lb9E
@cezis666
@cezis666 4 жыл бұрын
@@VladimirMedintsev I made it through another solution using interrupts and its callback, thanks. Another thing that bothers me is that apparently there is no VREFINT_CAL values for F446, also for F1 series controllers. Maybe you know how to proceed without these values? Is it correct to use vrefint_cal value from datasheet instead of in memory written value during manufacturing? If so, the correct formula would be then VDD = (3.3 *1.24)/ vrefint_raw ? Thanks
@cezis666
@cezis666 4 жыл бұрын
I am not sure, but by scrolling through datasheets few times I found the address of calibration value while PDF search gave no such results. So now it works. :)
@user-ss1sq7yt8c
@user-ss1sq7yt8c 4 жыл бұрын
лайткоин майнер управление 40 чипами построено на этом контролере,можете по этой теме рассказать что нибудь
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Это коммерческая информация.
@ra0sms
@ra0sms 4 жыл бұрын
Сколько в итоге осталось свободной памяти на МК?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Оперативной больше килобайта, флэш - половина
@michal621
@michal621 4 жыл бұрын
на счет интерфейса для железяки.... не пробовали использовать дисплеи типа aliexpress.ru/item/32460257277.html?spm=a2g0s.8937460.0.0.2b392e0eB93MBA там управление идет по последовательному интерфейсу, а за красивости отвечает своя внутренняя программа, ну и плюс интерфейс делаешь в мастере. Хочу взять себе 5" дисплейчик попробовать.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
1. Ваша ссылка ведет в никуда. 2. Эти экраны вообще не плохо подходят для промэлектроники, когда надо сделать по быстрому шкафчик с управлением дизелем или там линией расфасовки сахара. Там они незаменимы. А для прочих разработок дорого и не целесообразно.
@kalobyte
@kalobyte 4 жыл бұрын
это избыточно, когда пишеш под контроллер в том экране контроллер такой, что весь код этой нагрузки туда бы влез и еще осталось такие экраны действительно ставят в шкафы (если бы у них была бы еще рамка накладная) управление там по юарту или рс485
@ooo.coreltd6416
@ooo.coreltd6416 4 жыл бұрын
А есть вот это всё в виде статьи, которую читать?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Нет, статьи нету.
@user-zi1hf6xn2w
@user-zi1hf6xn2w 4 жыл бұрын
Поберегите автора, он и так старается регулярно баловать слушателей разными жизненно важными примерами. Нужно поблагодарить за ценные знания и опыт.
@alexpetrov521
@alexpetrov521 4 жыл бұрын
@@user-zi1hf6xn2w Как минимум человек может не слышать.
@TheMrdryn
@TheMrdryn 4 жыл бұрын
Почему решили взять f051?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Цена
@serjkp
@serjkp 4 жыл бұрын
@@VladimirMedintsev А у нас F100C8 самый дешевый - в розницу полтора бакса без НДС
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
@@serjkp Я не буду врать, сейчас на бегу не помню, но вот эти F051 я покупал на LCSC на какой-то распродаже и они там точно очень бюджетно стоили.
@_xDriver_
@_xDriver_ 4 жыл бұрын
а почему CubeMX а не CubeIDE ?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Потому, что CubeMX это конфигуратор, который позволяет вам сделать проект под любую среду программирования (IDE), а CubeIDE это и есть среда программирования со встроенным конфигуратором. Т.к. я собирался в этом проекте использовать Keil, я соответственно не мог сделать проект в CubeIDE.
@tayrus2622
@tayrus2622 4 жыл бұрын
Не оскудеет рука дающего
@mail_robot1609
@mail_robot1609 2 жыл бұрын
Это не фриртос, это cmsisrtos
@k_s_corp
@k_s_corp 4 жыл бұрын
Вы че?! какой кеил??? У STM уже давно своя среда есть на базе куба...
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Чо, правда? А как называется?
@koskop
@koskop 4 жыл бұрын
@@VladimirMedintsev STM32CubeIDE
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
@@koskop Кэп вы ли это? На канале даже видео про эту IDE есть :-)
@koskop
@koskop 4 жыл бұрын
@@VladimirMedintsev не видел, просто ответил на вопрос) П.С. я тут недавно
@gintarasbaranauskas2035
@gintarasbaranauskas2035 4 жыл бұрын
@@koskop STM32CubeIDE ещё слишком "зелёная", для серьёзных задач пока негодитса.
@user-rx4rp5yb5j
@user-rx4rp5yb5j 4 жыл бұрын
Вы очень любите RTOS - скажите а как можно использовать RTOS если нужно быстродействие и время реакции намного выше чем 1 миллисекунда. Например оптический датчик и по его сигналам нужно вращать шаговый двигатель. От оптического датчика импульсы идут ~20000 в секунду. Я так понимаю что в таком проекте вообще нельзя использовать RTOS даже для банального вывода на дисплей или опрос клавиш - т.к. RTOS блокирует основной цикл - и в нем нельзя ничего написать, а если не писать osDelay() в событии задачи - то эта задача никогда не вернет управление в другие задачи. Т.е. RTOS это игрушка превращающая быстродействующий микроконтроллер в операционную систему с быстродействием - "выполним сегодня-завтра"???
@albertziatdinov1373
@albertziatdinov1373 4 жыл бұрын
Добрый день, я сам не сильно глубокий специалист, но поверхностно знаю, что для таких целей лучше применять FPGA, а уже с него данные передаются на обычный комп, ну или промышленный ПК, если он идет для монтажа в шкаф или стойку. А там уже в винде или линуксе оперируют с этими данными. МК не очень подходят для критических быстродействий.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Давайте все-таки отделять мух от котлет. Использование ОС ни коим образом не мешает выполнению быстрых процессов. Более того, даже утверждение про блокировку основного цикла.... так себе выражение. Почему? Ну хотя бы потому, что у прерываний есть приоритеты. Более того, реально быстрые реакции только и возможно получить грамотно используя механизм прерываний. Например возникает прерывание от энкодера и вы в обработчике этого прерывания используя таблицу даете определенное воздействие на двигатель. Это никак не мешает работать операционной системе и последняя в свою очередь никак не мешает функционировать механизму прерываний. Ну это было во-первых. А во-вторых не в каждом случае надо использовать ОС. Например, если у вас микроконтроллер просто получает команды, проверяет энкодер и выдает управляющее воздействие на двигатель, то тут нет потребности в многозадачности и следовательно нет потребности в ОС. С другой стороны, если как в данном видео есть процессы с разной загруженностью и разным периодом выполнения, то программировать без ОС становится просто неудобным и нецелесообразным. Так, что вопрос собственно даже не в том надо или не надо использовать ОС, а в том, насколько продуман общий алгоритм программируемого вами процесса и как наиболее эффективно вы спланировали использование возможностей предоставляемых вами микроконтроллером.
@user-rx4rp5yb5j
@user-rx4rp5yb5j 4 жыл бұрын
@@VladimirMedintsev - я просто пытаюсь свой опыт из AVR перенести в STM32. В AVR нельзя было в прерывании написать что-то большое - т.к. пока прерывание не закончилось - то все прерывания станут в очередь, даже те у которых приоритет выше. Поэтому все прерывания приходилось писать очень короткими - банально присваиваем переменой значение, а другой в переменной-флаге указываем что переменная обновилась, а все расчеты и действия делаем в основном цикле - иначе отгребаем проблемы, которые очень трудно отловить. В AVR основной цикл останавливается, если сработало прерывание и продолжится после того как прерывание окончилось. В STM32 как работает это все вышеизложенное - я до сих пор не нашел описания - видел что пишут что одно прерывание может прерваться другим прерыванием - в чем я ну очень сильно сомневаюсь. Не зная этих азов лезть в ОС вообще не стоит - ибо для меня вообще было шоком - когда я увидел что пауза в одном потоке не останавливает другие потоки - ибо как они это сделали я даже подумать не могу - в AVR такое точно невозможно. А ОС - это конечно сладкая конфетка, но вот не хотелось бы отгрести снова непонятных проблем из-за ОС. Ибо основной цикл при использовании ОС точно не работает - я проверял, один поток (задачу) ОС можно сделать бесконечным циклом, если не возвращать управление в ОС, но тогда другие потоки останавливаются. Т.е. по сути при использовании ОС у нас нет ничего быстродействующего, кроме самих прерываний, но вот как они себя поведут, если прерывание еще не окончилось, а настала очередь нового прерывания - оно сработает когда?
@SevenNightdreemVeryPavlovny
@SevenNightdreemVeryPavlovny 2 жыл бұрын
@@user-rx4rp5yb5j Нужно взять любой мк STM 32, скачать cubeIDE благо дело теперь всё встроенно внутрь, скачать pdf Курниц freertos, скачать freertos reference manual под вашу версию и спокойно осваивать шаг за шагом, вы найдете всё ответы на свои вопросы) ну и наловитесь глюков естественно)
@user-rx4rp5yb5j
@user-rx4rp5yb5j 2 жыл бұрын
@@SevenNightdreemVeryPavlovny я и нашел - в топку этот freertos - его используют дилетанты.
@gintarasbaranauskas2035
@gintarasbaranauskas2035 4 жыл бұрын
Как вижу для GPIO всё ещё используете HAL. Очень рекомендую LL, очень :)
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Смотрим функцию изменения состояния GPIO вывода в библиотеке HAL: if (PinState != GPIO_PIN_RESET) { GPIOx->BSRR = (uint32_t)GPIO_Pin; } else { GPIOx->BRR = (uint32_t)GPIO_Pin; } В библиотеке LL для установки одна функция, для сброса пина другая, но суть не меняется: WRITE_REG(GPIOx->BSRR, PinMask); и WRITE_REG(GPIOx->BRR, PinMask); write_reg это макрос и он ни на что в коде не влияет. Внимание!!! Вопрос. Чем отличается HAL от LL что вы очень очень рекомендуете? И это не шутка, регистры одни и те же, как-то по другому с ними обращаться не получится.
@gintarasbaranauskas2035
@gintarasbaranauskas2035 4 жыл бұрын
@@VladimirMedintsev Ну ненадо "бить ниже пояса". Если уж цитируете функцию, так цитируйте её полностъю, а не только избранные строки :) В библиотеке LL абсолютное множество команд состоит из одной строки, а в HAL - везде по несколько. И конечно же GPIO_INIT. В LL - несколко елементарных команд , а в HAL - это просто "монстр". Всё это влияет и на количество кода, и на быстродеиствие. Проверьте осциллографом сколько времени занимает "подёргать" выводом в HAL и LL. Разница - ощутимая.
@samirmamedov6627
@samirmamedov6627 4 жыл бұрын
Спасибо.
Running With Bigger And Bigger Feastables
00:17
MrBeast
Рет қаралды 214 МЛН
English or Spanish 🤣
00:16
GL Show
Рет қаралды 18 МЛН
Секрет фокусника! #shorts
00:15
Роман Magic
Рет қаралды 85 МЛН
Сделал очередного МОНСТРА на 1500W !!!
11:59
Как остановят YouTube | ТСПУ и DPI | Cоздатель GoodbyeDPI
27:30
GPIO STM32 Схемотехника портов ввода-вывода
13:06
Running With Bigger And Bigger Feastables
00:17
MrBeast
Рет қаралды 214 МЛН