// Общий SBUS-слой: упаковка кадра и вывод инвертированного SBUS на провод // (USART1 TX = PA9, 100000 бод, 8E2, TXINV). Единственный владелец всего, что // идёт на драйвер колёс — используется и TX (локальный провод), и RX. // См. docs/protocol.md. #pragma once #include static const uint16_t SBUS_MID = 1024; // нейтраль всех каналов // Флаги в байте 23 SBUS-кадра (см. docs/protocol.md). static const uint8_t SBUS_FLAG_FRAME_LOST = 0x04; // bit2 static const uint8_t SBUS_FLAG_FAILSAFE = 0x08; // bit3 // Заполнить ch[16] нейтралью (все каналы 1024). void sbusNeutral(uint16_t ch[16]); // Упаковать 16 каналов (0..2047) в стандартный 25-байтовый SBUS-кадр. // flags идёт в байт 23 (bit2=frame_lost, bit3=failsafe). void sbusPack(uint8_t out[25], const uint16_t ch[16], uint8_t flags = 0); // Инициализация USART1 для вывода инвертированного SBUS. void sbusUartInit(); // Передать готовый 25-байтовый кадр на провод (блокирующе, таймаут 20 мс). void sbusSendFrame(const uint8_t frame[25]);