Промышленное устройство на STM8 с Modbus с нуля. Весь код и инструменты — внутри.

В этом курсе вы не просто напишете "мигающий светодиод". Вы с нуля разработаете прошивку для полевого устройства, которое:

  • Работает в промышленной сети Modbus RTU через RS-485.

  • Построено на базе доступного STM8S003F3P6.

  • Написано в профессиональной среде IAR Embedded Workbench.

Я раскрою архитектурные секреты и практические приемы, которые обеспечивают стабильную работу "в поле". Все инструменты для старта — бесплатны. Готовы заглянуть под капот коммерческого продукта?

Для STM8 существует библиотека абстракции Standard Peripheral Library, которая ускоряет создание кода, но в этом цикле уроков я буду разрабатывать код без этой библиотеки, дабы хорошо изучить работу STM8 на низком уровне, вникнуть в процессы и попробовать посвятить в них и вас, читатель. Это, прежде всего, большая исследовательская деятельность. Надеюсь, она станет увлекательной.

Tags: ,

Нумерация версий компьютерного программного обеспечения указывает на изменения в продукте, и хотя единой схемы нет, чаще всего используются форматы с тремя или четырьмя числами: Мажорная.Минорная.Патч (A.B.C), где мажорная версия указывает на кардинальные изменения, минорная — на добавление нового функционала, а патч — на исправление ошибок. 

Для прошивок (микропрограмм) не делают большого количества сборок, поэтому такое понятие как patch здесь не используется. Или, если быть точнее, и нововведения и исправления ошибок будут приращивать минорное число (номер сборки).

В таких средах разработки как Keil и ему подобных, для нумерации версий прошивок (сборок ПО) мы часто вписываем ручками определения, например:

#define FW_VER 0x0105 // Версия прошивки
#define FW_BUILD 0x2510 // Год и месяц сборки

И эта нумерация рутинная. Иногда даже пропускаешь этот момент. А в имени выходного файла вообще нет этой информации. Приходится потом так же ручками переименовывать myfirmware.hex в myfirmware_1.05_20251030.hex, чтобы передать его людям. 

Это решение для автоматизации нумерации версий и именования файлов прошивок на примере программы keil uVision. Для вас не составит труда адаптировать это решение для других сред (eclipse, IAR, etc.)

Приветствую вас, читатель! В этой статье я хотел бы немножко рассказать о бюджетных микроконтроллерах серии CH32V003 с ядром RISC-V2A от Nanjing Qinheng Microelectronics Co., Ltd и о том, как я до них "докатился". Этого производителя мы знаем по широко известным микросхемам CH340 (USB-UART), CH341 (USB-GPIO), CH552G (8051 МК с USB). Хоть статья и пишется в конце 2025 года, однако CH32V003 совсем не новинка. Еще в 2022 году мой коллега Марат уже что-то на них делал, а в 2023 мы с Евгением даже заказали несколько отладочных плат на Aliexpress. В те "голодные" годы (был кризис чипов), этот микроконтроллер был очень заманчивым, его стоимость была 24 рубля за полноценные 32 бита и богатство периферии! Так, для справки, в конце 2023 года цена на популярные STM32F030F4P6 подскочила до 130 рублей, а за STM32F407VET6 просили чуть больше 2000 руб.

Мы купили таки себе отладочные платы CH32V003F4P6 дабы освоить эти камни и дать миру много дешевых конкурентоспособных изделий.. Но не дали. Ни в 2023, ни в 2024. Не до них было: то работы полно, то просто страшно сесть и "убить" несколько дней на "учебу ради учебы". А вот в 2025 году возникла реальная потребность в них. И тут хочешь, не хочешь - осваивай.

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

Защита происходит так: программа при запуске проверяет, есть защита или нет, если ее нет, то она установится. И так первый запуск устройства автоматически защитит прошивку. Установить RDP (Readout protection) Level 1 STM32F1 на CMSIS можно следующим образом:

«Не забывайте кормить собаку, иначе она начнет кусаться». В микроконтроллерах STM32 присутствует сторожевой таймер, так называемый Watch Dog. Полное название IWDG (Independent watchdog или независимый сторожевой таймер). Ваша программа должна то и дело обращаться к этому таймеру и пополнять его значение, это называется Feed Watchdog (покормить сторожевого пса), иначе контроллер перезапустится. 

Ядро микроконтроллера тактируется одним из высокочастотных генераторов (HSI или HSE), часы реального времени тактируются низкочастотным генератором LSE, а сторожевой таймер тактируется независимым встроенным RC генератором на 40 кГц (LSI) через делитель частоты.

Это проверенная временем надежная система защиты устройства от зависания.

Микроконтроллер может зависнуть от

  • Радиации
  • Мощной электромагнитной помехи
  • Проблемного кварца
  • На морозе
  • При очень высокой влажности
  • Кригово прорагмного кода