Введение
Embedded-разработка — это не только код, но и железо, где ошибка может стоить сожжённого микроконтроллера или недель отладки. AI-ассистенты уже умеют разбирать даташиты, генерировать конфигурации периферии и даже подсказывать, почему I2C-шина не работает. Но слепо доверять им нельзя: неверный совет по питанию или таймингам легко превратит плату в кирпич.
В этой подборке — 10 проверенных промтов, которые я использую в работе с STM32, ESP32 и Arduino. Каждый промт содержит контекст, пример запроса и разбор, где ИИ экономит часы, а где ошибётся. Все примеры основаны на реальных сценариях из практики IoT-разработки.
1. Разбор даташита и выжимка по регистрам
Проблема: 1000-страничный PDF с описанием регистров, а нужен только один бит для настройки тактирования.
Промт:
"Ты — эксперт по микроконтроллерам STM32. Вот выдержка из даташита (вставь текст). Объясни, как настроить тактирование от HSE с PLL на 72 МГц для STM32F103. Укажи конкретные регистры, биты и последовательность действий. Приведи пример кода на C."
Пример: Для STM32F103 настройка PLL включает RCC_CFGR. AI выдаёт:
- Включить HSE: RCC_CR |= RCC_CR_HSEON;
- Дождаться HSERDY.
- Настроить PLL: RCC_CFGR
|= (PLLMUL << 18) | (PLLSRC);
- Включить PLL, дождаться готовности, переключить SW.
Где ошибётся: может перепутать биты для разных серий (F1 vs F4). Всегда сверяйтесь с reference manual.
2. Генерация кода инициализации периферии
Проблема: ручное написание кода для I2C, SPI, UART отнимает время.
Промт:
"Сгенерируй код инициализации I2C1 для STM32F401 на частоте 400 кГц, используя HAL. Тактирование — 84 МГц. Выведи функцию MX_I2C1_Init и объясни параметры."
Пример: AI выдаёт структуру с ClockSpeed = 400000, DutyCycle = I2C_DUTYCYCLE_2, OwnAddress1 = 0. И поясняет, что для 400 кГц нужно правильно задать CCR и TRISE.
Где ошибётся: может не учесть, что для разных APB частот формулы отличаются. Проверяйте расчёт вручную.
3. Отладка I2C: почему устройство не отвечает
Проблема: датчик BME280 не определяется по I2C.
Промт:
"У меня STM32 и датчик BME280, I2C не работает. Вот код инициализации и осциллограмма (описание). Что может быть не так? Предложи пошаговую диагностику."
Пример: AI предлагает проверить подтягивающие резисторы (4.7к), адрес устройства (0x76 или 0x77), наличие ACK, тайминги. Часто проблема в отсутствии подтяжки.
Где ошибётся: может советовать неверные адреса. Всегда смотрите даташит.
4. Оптимизация энергопотребления ESP32
Проблема: батарейное устройство на ESP32 быстро разряжается.
Промт:
"ESP32 работает от Li-Ion аккумулятора. Как снизить энергопотребление в deep sleep? Напиши пример кода с пробуждением по таймеру и отключением Wi-Fi. Укажи ожидаемый ток."
Пример: AI предлагает использовать esp_deep_sleep_start() с таймером, отключение Wi-Fi и Bluetooth, понижение частоты. Ток в deep sleep ~10 мкА.
Где ошибётся: может не упомянуть, что некоторые пины подтянуты к питанию, что увеличивает ток. Проверяйте схему.
5. Расчёт делителя напряжения для АЦП
Проблема: нужно измерить напряжение батареи 12В на АЦП STM32 (макс 3.3В).
Промт:
"Рассчитай делитель напряжения для измерения 0-12В на АЦП STM32 с опорным напряжением 3.3В. Сопротивления должны быть стандартными. Учти входное сопротивление АЦП."
Пример: AI предлагает R1=100к, R2=33к, что даёт коэффициент 0.248. Максимальное напряжение на АЦП 2.98В.
Где ошибётся: может не учесть входное сопротивление АЦП (обычно 50к), что исказит показания. Добавьте буферный усилитель.
6. Написание драйвера для SPI-устройства
Проблема: нужно написать драйвер для SPI flash W25Q64.
Промт:
"Напиши драйвер для SPI flash W25Q64 на C для STM32 HAL. Реализуй функции чтения ID, стирания сектора, записи и чтения страницы. Учти тайминги."
Пример: AI выдаёт функции с командами 0x9F (ID), 0x20 (сектор), 0x02 (страница), 0x03 (чтение). Указывает задержки.
Где ошибётся: может перепутать команды для разных чипов. Сверяйтесь с даташитом.
7. Отладка UART: приём мусора
Проблема: по UART приходят неправильные данные.
Промт:
"STM32 принимает данные по UART, но они искажены. Скорость 115200, 8N1. Что проверить? Предложи диагностику."
Пример: AI советует проверить тактирование (HSE vs HSI), точность baud rate, наличие помех, правильность настройки GPIO (AF mode). Часто проблема в неправильной частоте тактирования.
Где ошибётся: может не учесть, что при использовании HSI погрешность больше. Используйте внешний кварц.
8. Генерация кода для работы с FreeRTOS
Проблема: нужно создать задачи для чтения датчиков и отправки данных.
Промт:
"Создай две задачи FreeRTOS для STM32: одна читает датчик по I2C каждые 100 мс, другая отправляет данные по UART. Используй очереди для передачи данных. Приведи код."
Пример: AI создаёт задачи vTaskSensor и vTaskUART, очередь xQueue, семафоры. Указывает приоритеты.
Где ошибётся: может не учесть размер стека для задач. Увеличьте при необходимости.
9. Оптимизация кода Arduino для снижения размера
Проблема: скетч не влезает в память Arduino Uno.
Промт:
"Мой скетч для Arduino Uno занимает 95% памяти. Как оптимизировать? Предложи конкретные шаги: замена библиотек, использование PROGMEM, отказ от String."
Пример: AI советует заменить SoftwareSerial на аппаратный UART, использовать F() макрос для строк, избегать динамической памяти.
Где ошибётся: может предложить несовместимые библиотеки. Проверяйте совместимость.
10. Поиск причины сброса ESP32
Проблема: ESP32 периодически перезагружается.
Промт:
"ESP32 перезагружается каждые несколько минут. Как найти причину? Предложи методы диагностики: чтение причины сброса, логи, проверка питания."
Пример: AI советует вывести esp_reset_reason(), проверить напряжение питания (должно быть 3.3В), добавить конденсатор по питанию.
Где ошибётся: может не упомянуть про броски напряжения при передаче Wi-Fi. Добавьте конденсатор 100 мкФ.
Заключение
AI-ассистенты становятся незаменимыми в embedded-разработке, но требуют критического мышления. Используйте промты как отправную точку, всегда проверяйте код и схемы на реальном железе. Помните: ИИ не заменит осциллограф и мультиметр. Экспериментируйте, но не сжигайте платы! Делитесь своими промтами в комментариях.
Комментарии