Находясь в отпуске, решил таки дать ума STM32-микроконтроллеру STM32F103C8T6, именуемому в народе голубой таблеткой (BluePill). В перспективе эта плата должна применяться в одном из проектов по модификации ретро-компьютера. А чтобы с платой можно было удобно работать, нужна хорошая среда разработки, она же IDE.
Поначалу я, как заядлый Qt-шник, решил разобраться, как можно работать с этой платой из хорошо знакомой мне среды QtCretor. И это приключение затянулось надолго... В конце концов я с этим вопросом разобрался, но в результате пришлось удостовериться, что особого изящества и удобства сопровождать Embedded-проект в Qt Creator не получится. Одно только то, что для старта проекта все равно потребуется проприетарная среда разработки STM32CubeIDE, переводит всю эту затею в весьма сомнительное удовольствие.
Поэтому я решил искать дальше, и попробовал связку Microsoft Visual Studio Code IDE + PlatformIO. Продукт от компании Microsoft, что интересно, бесплатен и имеет открытый код, распространяемый по лицензии MIT. А плагин PlatformIO тоже разрабатывается открытым сообществом. Так как я уже использовал VS Code в своем проекте Retrogram для написания шейдеров, то эта среда разработки уже была мне знакома. Оказалось, что достаточно добавить плагин PlatformIO, и получается современная и мощная среда Embedded-разработки, в которой все работает из коробки, даже отладка.
Так как моя плата STM32F103C8T6 оказалась китайской репликой, то пришлось немного поковыряться в настройках, но в конце концов все заработало. Чтобы не забыть, что и где пришлось настраивать, я написал статью:
Настройка VS Code + PlatformIO для программирования и отладки STM32F103 под Linux
Имея в руках такой прекрасный инструмент, можно было начать разбираться непосредственно с самим контроллером. Для реализации проектов необходимо было понять, какую максимальную скорость переключения пина можно получить на такой STM-ке. Попробовав несколько методов и разные библиотеки, я получил скорость (период переключения) равный 60нс (да, наносекунд). Сам код я тоже записал, чтобы не забыть:
Пример быстрого ногодрыганья на BluePill STM32F103C8T6 через CMSIS
Да, Embedded-разработка на ARM оказалась куда сложнее чем на AVR. Но, все проблемы рано или поздно решаемы. А наличие инструментов с открытым исходным кодом дает возможность не завязывать разработку на проприетарные решения, работу с которыми в любой момент могут заблокировать корпорации.