Stm32 с чего начать изучение...

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18759
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

кстати, я ведь тебе говорил: не пиши в личку! я ведь тоже могу нарушить приличия и выложить ЛС в паблик.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18759
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ну, коллеги, смотрите: пользователь Rapra пишет мне в ЛС угрозы физической расправы, поэтому если вдруг что со мной случится - имейте ввиду, свидетелями будете. это, кстати, и для админов-модераторов информация.

удалять это сообщение не рекомендую, я все равно заскриню.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Вымогатель припоя
Сообщения: 570
Зарегистрирован: Пн фев 16, 2026 17:30:02

Сообщение Rapra »

А что, через ЛС - это "физическая расправа"? Блин, Рома, не будь таким трусом! Я ж говорю - давай в ЛС обсудим наши разногласия, а НЕ ЗДЕСЬ! Че ты ссышь то? По ЛС - это безопасно и дистанционно, без "физического контакта".
То есть, в интернете на форуме ты не боишься оскорблять людей, а как люди хотят с тобой поговорить вне форума, по телефону или в ЛС, чтобы не выносить срачь на общее обозрение - ты сразу голову в песок по-страусинному.
Эх, Ромка-Ромка, ну ты и трус :))
Последний раз редактировалось Rapra Вт июн 30, 2026 21:01:46, всего редактировалось 1 раз.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18759
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

даже не знаю, зачем я тебе отвечаю... видимо, глупею... ты себя, чтоли, оскорбленным человеком посчитал? двойная ошибка.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Сообщения: 570
Зарегистрирован: Пн фев 16, 2026 17:30:02

Сообщение Rapra »

Ну так ответь НЕ ЗДЕСЬ, А В ЛС. Иль че, тебе нужны зрители? Глупо это, Ромка, и не по-мужски. Давай, отвечай в ЛС, а не здесь. Здесь давай прекратим этот срачь.
Реклама
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

ARV писал(а): пользователь Rapra
В какую тему не зайди- везде Rapra. Какой он вездесущий, как барбос во всех темах отметился. Его очень много на этом сайте.

Лично я к ARV симпатий не испытываю, но тот случай, когда понимаю человека и прошу модераторов ограничить частоту публикаций Rapra, а ещё лучше дать ему возможность помолчать недельку.
Реклама
Вымогатель припоя
Сообщения: 570
Зарегистрирован: Пн фев 16, 2026 17:30:02

Сообщение Rapra »

Да без проблем. Радиокот уже и так загнулся стопицот раз. Небольшая потеря :)) Напугали ежа голой жопой. Меня до этого 7 лет не было здесь. Так что это всё фигня, ребзя.
Друг Кота
Аватара пользователя
Сообщения: 25497
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

ARV писал(а): Вт июн 30, 2026 20:25:16 только если тебя сейчас посадить "голенького" за комп - ты не сможешь ничего сделать без рефмануалов, поскольку все равно не помнишь наизусть все эти кошмарные регистры и их назначение...
Их не нужно помнить наизусть. Нужно ПРИМЕРНО помнить функционал периферии.
Главное не код. Главное СХЕМА. Вначале создается структурная схема аппаратной части реализуемого алгоритма и в этой схеме находится периферия МК. Затем уже пишутся драйверы периферии под созданную схему.
Изучение рефмануала состоит не из заучивания названий регистров - это вообще ничего не дает. Задача изучения - открыть для себя ДЛЯ ЧЕГО в периферийных модулях создана та или иная фича. Как ее можно полезно использовать. Какие бывают приемы взаимодействия с этой периферией. И тогда при написании кода не потребуется рыться в рефмануале, а всего лишь целенаправленно посмотреть нюансы и имена регистров и бит в них. При наличии какого-никакого опыта регистры и биты смотреть не требуется. Достаточно всплывающих подсказок в редакторе IDE по полям указателей на структуры и полям структур.
Как пример.
Иногда нужно смотреть таблицы возможных соединений таймеров мастер/слейв, иногда нужно смотреть какие каналы ДМА на какой шине сидят или таблицу реквестов ДМА если эта таблица фиксированная.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18759
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ решил Америку открыть...
Но вот на счет всплывающих подсказок явно погорячился... Скажем, я-то ими могу пользоваться, т.к. они всплывают на функциях HAL вместе с "самодокументирующими" комментариями, но если HAL-ом не пользоваться, то от этого и следа не останется... Просто поля структуры мало что скажут без рефмануала под рукой. Имхо.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25497
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

ARV писал(а): Вт июн 30, 2026 22:51:35 Просто поля структуры мало что скажут без рефмануала под рукой. Имхо.
Говорят ОБО ВСЕМ. Я же сказал, подсказки помогают, если есть какой-никакой опыт.
Кстати, я часто перехожу в тело функций библиотеки (SPL), чтобы посмотреть поле структуры.
Саму библиотеку я не использую, патамушта она заметно ограничивает функционал периферии и создает избыточный код, который порой мешает. Предпочитаю однородный стиль написания кода. То есть, если библиотека не всегда пригодна, я не буду ее использовать и все пишется на регистрах. За исключением некоторых функций CMSIS.
u37
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Пн май 01, 2017 20:01:45

Сообщение u37 »

tonyk, вы неправильно оцениваете котекст.
В этой теме 1 юзер задался целью вбросить [] в вентилятор. Причем, это единственная цель его существования, разбрасывание [].
И здесь не важны ни задачи, ни способы, а основной упор ведется на подпор аргументов, которые вроде-бы правильные (вот, вы же на них купились), но используются исключительно для поставления [] в неизменных количествах.
Есть хорошая поговорка - троля не кормить - почему о неё никто не вспомнил?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18759
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

КРАМ, опыт, по сути, и есть память. Чем чаще вы используете, скажем, DMA, тем лучше держатся в вашей голове названия битиков и регистров. Но тем скорее забываются те, которые не используются, например, UART. Опыт приходит со временем и практикой, но у начинающего еще нет ни того, ни другого за плечами, и в этом случае получение практического результата быстро требует использования готового... Что, конечно, отдаляет момент крепкого запоминания важных битиков... Но это не сильно мешает.

Я пришёл к выводу, что погоня за оптимальностью кода, чтобы ничего там не мешало, это или крайне редко необходимо, или продиктовано ЧСВ программера. Ну вот я пока не могу представить, чем хуже запуск DMA халом против запуска конкретным битом регистра? Десятком лишних команд? И что, в чем ужас? Вот только не надо аргументов вроде "каждый байт флеша на счету и каждый тик тактовой важен" - это если и бывает важно (на этапе Запуска то!!!), то в одном случае из миллиона, и намеренно готовить начинающего именно к этому случаю весьма неразумно. Это примерно, как дециметры - все их учат в первом классе, и никто не использует ни разу в жизни. Кроме авторов учебников.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 704
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди террористов

Сообщение linux_rulezz »

КРАМ писал(а): Вт июн 30, 2026 23:01:29Кстати, я часто перехожу в тело функций библиотеки (SPL), чтобы посмотреть поле структуры.
Саму библиотеку я не использую, патамушта она заметно ограничивает функционал периферии и создает избыточный код, который порой мешает. Предпочитаю однородный стиль написания кода. То есть, если библиотека не всегда пригодна, я не буду ее использовать и все пишется на регистрах. За исключением некоторых функций CMSIS.
На мой взгляд, opencm3 более приличная в плане реализации различных вспомогательных функций. Конечно, ее тоже нельзя использовать: оверхед адский + вместо трех-четырех документов (rm, datasheet, errata и иногда тот или иной appnote) придется еще и мануал на библиотеку читать.

Вот странно, что до сих пор никто на шаблонах и прочих прелестях c++26 не сделал для STM32 свой "hal", который имел бы 0 оверхеда (в отличие от вызова функций, заполнения структур и прочей дичи).

P.S. Еще достаточно много дичи я встречал в "библиотеках", которые вроде как чуть ли не "стандарт". Взять ту же adafruit: такая там дичь в коде иной раз, что просто диву даешься!
P.P.S. По мере разработки у любого разработчика накапливается уйма всяких "кирпичиков", как, скажем, мой stm32samples - сборник "строительного материала" для новых проектов. Сесть и вот так "с нуля" написать что-то под МК приходится очень редко. В основном, если это - разительно другое семейство (скажем, так у меня было при переходе с "голого" DMA на DMAMUX; а еще USB OTG я пока никак не "окучил", CDC и HID под device у меня есть, а под OTG пока не было нужды). Вот, недавно стал с STM32G431 баловаться. Как побалуюсь, возьмусь за F407 — там OTG, и можно будет попробовать расширить мой "USB сниппет" под них.
Кстати, под ПК я в конце-концов свои "сниппеты" оформил в отдельную библиотеку, постепенно расширяя ее функционал. Очень удобно: как только обнаруживаю какой-то баг, мне нужно лишь библиотеку подправить, а не 100500 всяких демонов, которые бы пользовались этим кодом методом "копипасты".
Последний раз редактировалось linux_rulezz Ср июл 01, 2026 09:16:49, всего редактировалось 1 раз.
Windows must die!
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18759
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

linux_rulezz писал(а): Ср июл 01, 2026 09:09:44 до сих пор никто на шаблонах и прочих прелестях c++26 не сделал для STM32 свой "hal"
порог вхождения в "прелести" С++ намного выше, чем в Си. соответственно, HAL++ будет во много раз менее популярен... думаю, причина в этом.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Сообщения: 580
Зарегистрирован: Вт окт 01, 2024 15:22:33

Сообщение Adrift »

ARV писал(а): Ср июл 01, 2026 07:01:41Я пришёл к выводу, что погоня за оптимальностью кода, чтобы ничего там не мешало, это или крайне редко необходимо, или продиктовано ЧСВ программера. Ну вот я пока не могу представить, чем хуже запуск DMA халом против запуска конкретным битом регистра? Десятком лишних команд? И что, в чем ужас?
Удивительно, но еще в 2017 году вы, будучи любителем выжимающим последние крохи производительности из AVR, уже предвидели подобное развитие событий )
ARV писал(а):если вдруг мне подвернется какой-то коммерческий проект, решить который будет проще на ARM, я поступлю ровно так, как все ARM-исты: я возьму готовое и быстро-быстро добыдлокодю до нужного. ни о какой оптимизации я и не начну даже задумываться - не для того ARM придуман.
Опытный кот
Аватара пользователя
Сообщения: 704
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди террористов

Сообщение linux_rulezz »

Что-то вроде "hal на С" можно написать при помощи макросов и true inline функций. Без необходимости на каждый чих вызывать отдельную функцию.
Лично меня устраивает разработка "в стиле CMSIS". Все равно с инициализацией периферии один раз разобрался, а потом таскай себе этот сниппет туда-сюда с минимальными исправлениями под требующуюся задачу (скажем, где-то USART нужно строго по DMA и rx, и tx; где-то можно rx на прерываниях сделать; где-то, где убогий модбас нужен, требуется по прерыванию IDLE определять конец пакета и т.д., и т.п.). Тот же ШИМ: где-то просто нужно эмулировать ШИМом ЦАП, а где-то, как с сервиками, работать строго на определенной частоте, меняя в определенных пределах длительность активного импульса.
Windows must die!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25497
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

ARV писал(а): Ср июл 01, 2026 07:01:41 Чем чаще вы используете, скажем, DMA, тем лучше держатся в вашей голове названия битиков и регистров. Но тем скорее забываются те, которые не используются, например, UART.
Еще раз. НЕ НУЖНО запоминать названия регистров и и их битовых полей. Вообще не нужно.
У меня сейчас в продакшен несколько совершенно разных платформ МК. Зачем мне грузить память названиями?
Гораздо эффективнее помнить ПРИНЦИПЫ. Когда помнишь принципы, то любой битик с ожидаемым функционалом найдется в даташите буквально за минуту. Даже если этот даташит видишь в первый раз.
ARV писал(а): Ср июл 01, 2026 07:01:41 Я пришёл к выводу, что погоня за оптимальностью кода, чтобы ничего там не мешало, это или крайне редко необходимо, или продиктовано ЧСВ программера. Ну вот я пока не могу представить, чем хуже запуск DMA халом против запуска конкретным битом регистра? Десятком лишних команд?
Причем тут ЧСВ?
У меня в проектах ДМА очень часто запускается другим ДМА. Иногда почти синхронно запускается два или три канала ДМА, но вручную.
Зачем мне разнобойный стиль кода? В чем проблема написать три строки в регистрах вместо идиотской функции, которая половину своего тела занимается выбором канала ДМА из входного аргумента?
И еще один важный момент. Код должен поддерживаться не только автором этого кода. Поэтому, чем меньше документации участвует в тексте исходника, тем проще тому, кто разбирается в коде после тебя. Рефмануал, даташит и эррата ОБЯЗАНЫ быть освоены. В них нюансы функционала и конкретные физические параметры МК. На этом фоне разного рода HAL-ы выглядят избыточной сущностью, которая требует изучения наряду с первичными документами на МК.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18759
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Adrift писал(а): Ср июл 01, 2026 09:40:28 Удивительно, но еще в 2017 году вы, будучи любителем выжимающим последние крохи производительности из AVR, уже предвидели подобное развитие событий
так это вы мне в плюс или минус записываете? ;)
linux_rulezz писал(а): Ср июл 01, 2026 09:45:00 Что-то вроде "hal на С" можно написать при помощи макросов и true inline функций. Без необходимости на каждый чих вызывать отдельную функцию.
а вот тут другой угол, о который можно убиться: макросы Си настолько убогие, что практически 90% идей реализовать невозможно. макросы древнейшего asm51 были круче в сотни раз: там былы директивы повтора, сканирования по списку и т.п.!
на макросах построена FreeRTOS - и я словил занятный косяк: в одном файле вызов функции компилируется успешно, а в другом - ссылка на функцию не найдена (линкером)! оказалось, то была не функция, а макрос а-ля функция, обертка, в итоге там, где был нужный файл заголовка, макрос разворачивался, а где я забыл заголовок добавить, это воспринималось, как функция...

это я к тому, что во всем нужна мера...
linux_rulezz писал(а): Ср июл 01, 2026 09:45:00 Лично меня устраивает разработка "в стиле CMSIS".
не знаю, что за стиль... но сам поступаю в чем-то так же, как вы:
- сначала периферия Кубом и HAL-ом
- потом оборачивание этого безобразия в свои функции с параметрами
- потом отказ от HAL там, где он слишком геморный (например, при дрыгоноге)
- потом, если надо, оптимизация HAL для лучшего понимания и соответствия моим хотелкам.

в итоге получается некая заготовка, (почти) готовая к всему... минус в том, что при переходе к другому камню многое ломается, т.к. HAL в некоторых местах не полностью изолирован от низа... в части инициализации это вообще практически всегда так.
КРАМ писал(а): Ср июл 01, 2026 10:06:12 Когда помнишь принципы, то любой битик с ожидаемым функционалом найдется в даташите буквально за минуту.
ну так я это и говорил - с чем вы спорите? не помнишь - без даташита беспомощен. помнишь - между разными МК будешь беспомощен... принцип DMA и из института помню/знаю, но конкретная реализация все равно загадка в каждом случае. и избыточный HAL меня спасает.

вы выигрываете исключительно несколько микросекунд при ваших извратах с DMA за счет отказа от "избыточных" функций. если для вашего проекта это критично - так и правильно, но разве нужно всем так делать?! запуск DMA и его перенастройка в большинстве применений происходят в "безопасные" моменты времени работы устройства, когда любые издержки в микросекунды совсем не страшны.
КРАМ писал(а): Ср июл 01, 2026 10:06:12 Поэтому, чем меньше документации участвует в тексте исходника, тем проще тому, кто разбирается в коде после тебя.
это большой плюс HAL - он для всех одинаков
КРАМ писал(а): Ср июл 01, 2026 10:06:12 На этом фоне разного рода HAL-ы выглядят избыточной сущностью, которая требует изучения наряду с первичными документами на МК.
а вы пробовали сами, или это теория? благодаря избыточности как раз и достигается минимум погружения в ерраты и изучения прочих документов. издержки - см. выше - ничтожные, эффективность и сопровождаемость - высокая. так что, имхо, это ОЧЕНЬ разумный подход. Особенно для НАЧИНАЮЩИХ.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 704
Зарегистрирован: Пн сен 15, 2025 08:43:23
Откуда: Маленький СССР посреди террористов

Сообщение linux_rulezz »

Конечно, сишные макросы - не идеал, но очень даже нормально работают. Вот так - через макросы - я упростил задачу разбора текстового протокола на МК. От cpp там только constexpr'ы (для вычисления хэшей команд на стадии компиляции), которые в С, к сожалению, еще не завезли.
За фриртос ничего не скажу: я категорически против использования RTOS там, где на конечных автоматах легко реализовать задачу (т.е. вообще везде на "обычных" одноядерных микроконтроллерах без MMU).
О HAL от STM32 ничего хорошего сказать не могу. На мой взгляд, получилось убожество даже хуже, чем SPL. Даже opencm3 значительно лучше (хоть тоже убога).
Ну и "портируемость" HAL на разные серии МК — вообще наглая ложь. Невозможно абсолютно идентичный код запустить на STM32F103 и STM32G431… Хотя бы из-за разительных архитектурных различий. Ну и тогда какой смысл вникать в документацию HAL, если CMSIS требует чтения лишь RM, datasheet и errata? А в случае HAL к этим трем присоединяется еще и документация на самого этого...
Windows must die!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1920
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

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

Лично от отказа использования HAL -> CMSIS имеет только плюсы (скорость выполнения, ненужные проверки, "короткий" код, мало памяти и т. д.) Ну, правда - с потерей времени (помню, например, сколько времени у меня уходило на загрузку 256 байт по I2C). Но оно того стоит.
Последний раз редактировалось veso74 Ср июл 01, 2026 12:03:59, всего редактировалось 1 раз.
Контактная информация:
Ответить

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