Забулдыга @shell4692
Разработчик
Information
- Rating
- Does not participate
- Location
- Россия
- Registered
- Activity
Specialization
Backend Developer, Embedded Software Engineer
Lead
Java
OOP
SQL
Linux
English
Spring Boot
Hibernate
Git
C++
Programming microcontrollers
Ломаю голову, что с этим всем делать дальше. Дисководов нет, дискет нет, жёсткие диски тоже старьё… Если реанимировать его в первозданном виде, нет ресурсов. Если доставать FPGA и делать на нём всю обвязку и эмуляцию старого оборудования на современный VGA стандарт и SDкарты, тогда теряется весь шарм и ностальгия по старине.
Переразводить плату — это очень смелое решение. Ваши успехи заслуживают глубочайшего уважения.
Какой контроллер, какой IDE и какие методы выбирать? Здесь не может быть какого-то истинно правильного метода. Каждый выбирает в меру своих познаний и опыта в данном вопросе, а также на основе параметров проекта, который он выполняет.
Насчёт «гибко настраиваемой» периферии я полностью с Вами согласен, но сложность, на мой взгляд, всё же имеется. И она проистекает не только из обилия функция (хотя бы того же I2C), а из алгоритмов её использования (согласно Справочному руководству). В каждом семействе не только различаются регистры одной и той же периферии, а также различны и действия, которые нужно совершить для получения желаемого результата. Кроме того, чем ближе к регистрам, тем менее переносимой становится прошивка.
В частности, по сравнению с Atmel контроллерами, у которых периферия в разных семействах работает по схожему принципу, в stm32 очень существенно различаются регистры, правила инициализации и текущая работа с одним и тем же периферийным модулем. Вплоть до того, что в разных семействах, один и тот же периферийный модуль может находиться на разных шинах.
CubeMX был сделан не просто так — он был сделан, чтобы вынести работу с периферией в HAL и абстрагироваться от неё. Структура HAL во многом напоминает PerLib. Не готов утверждать, что это хорошоее решение, однако оно как нельзя лучше демонстрирует, что «не всё так гладко в Датском королевстве».
А насчёт сложностей, они обычно возникают не при мигании светодиодами, а где-то при написании, к примеру, многопоточного приложения, в котором на одной шине I2C1 висят LCD1602 экран (через расширитель порта PCF8574T), просто расширитель порта PCF8574T для клавиатуры, ds2482s-100, который опрашивает 5 термодатчиков ds18b20, а на шине I2C2 висят, например 3-4 других модуля с другими МК (к примеру 30й серии). При этом также используется USART1 для управления несколькими блоками по RS485 и протоколу MODBUS. И всё это в одном единственном stm32 (правда f103).
Я не в коем случае не посягаю на Ваше право строить логику изложения, коллега, прошу меня великодушно простить за (может быть) излишнюю настойчивость. :)))
Если уж действительно обучать ИМЕННО stm32, наверное, нужно знакомить читателя не с битовыми операциями, а с общей архитектурой? Нужно показать, из чего она состоит, в какие группы объединяется периферия, какие шины её соединяют и какая схема тактирования этих шин. Также неплохо особенно подчеркнуть, что в Stm32 процессорное ядро является не монолитным, а входит в общий кластер периферии как модуль.
Говоря о тактировании, хорошо бы упомянуть про RCC, без понимания работы которого нет смысла вообще связываться с stm32. И почему бы, на этапах ознакомления с общей архитектурой, не использовать PeripheralLibrary, которая как раз позволяет сосредоточиться на функциональности периферии, общих принципах её работы, а не на деталях программирования регистров?
Опять же, самая главная книга при работе с stm32 это Reference manual. Почему бы не указать людям ссылку на источник?
Кстати, использование CMSIS для новичков, это довольно сложный способ вхождения в тему. Есть гораздо более простые вещи, например, библиотека Peripheral Library, которая является надстройкой над CMSIS и предлагает простые и удобные функции работы с очень запутанной периферией контроллера, без надобности (на первом этапе) вникать в структуры периферийных регистров и карты их полей. Ну, или более современный вариант, вроде CubeMX.
На мой взгляд, самым «вкусным» контроллером 30й серии stm является ИМХО stm32f030f4p6. Имея встроенный генератор на 8МГц, который раскачивается ФАПЧем до 48МГц и корпус TQFP20, он очень красиво становится на адаптер TQFP->DIP и занимает всего лишь пару квадратных сантиметров на бредборде. На него запросто можно уместить 10-15 поточное приложение, которое будет иметь некую структуру драйверов и сервисов.
Кроме того, Лего открыла для публичного использования ev3 sdk, так что у меня в планах освоить написание модулей и прикрутить к ev3 разные ардуиновские причиндалы, которых у меня навалом.
Если сын освоит/осилит свифт, это будет огромный успех… скрестил пальцы на удачу.
Там почти 3/4 книги примеры в Playground. В XCode тоже есть игровая площадка. Так что компилировать ничего не нужно.
Теперь успешно осваиваем книгу с огромным интересом.
Хочу заметить, что при переводах для ребёнка, все термины, которые нужно запоминать именно в их английском представлении, нужно уточнять в произношении и переводе. Например, если в тексте встречается тип String, я пишу в скобках его произношение и перевод («СТРИНГ»-«СТРОКА»). Также, я сделал скриншоты интерфейса Xcode и все надписи на английском снабдил комментариями с переводом и произношением. Это даёт просто потрясающий результат — ребёнок видит английский интерфейс (нет Xcode на русском) и всё понимает.
В дальнейших планах, после освоения обычного языка, прежде чем переходить ко второй книжке “iOS Programming: The Big Nerd Ranch Guide 6th Edition”, нужно будет познакомиться с основными алгоритмами. Например, сортировка «пузырёк» или создание односвязных и двусвязных списков.
Надеюсь, что мой опыт будет кому-то полезен.