UART у футабы и должен быть 100000E2. или в "1000009E2" не опечатка?
usart_set_mode(SBUS_PORT, USART_MODE_TX_RX);
usart_set_baudrate(SBUS_PORT, 100000);
usart_set_databits(SBUS_PORT, 9);
usart_set_parity(SBUS_PORT, USART_PARITY_EVEN);
usart_set_stopbits(SBUS_PORT, USART_STOPBITS_2);
usart_set_flow_control(SBUS_PORT, USART_FLOWCONTROL_NONE);
usart_enable_halfduplex(SBUS_PORT);
usart_enable_rx_inversion(SBUS_PORT);
usart_enable_tx_inversion(SBUS_PORT);
прям как есть, как работает. Либо некий баг в опенцм (тогда непонятно, почему HAL работает), либо там долбанные 9 датабит (кстати, проверю-ка еще раз анализатором, что там летит), либо еще один вариант, что я конкретно не догоняю три предложения о работе в half-duplex (хотя сложно там чего-то не догонять). Я обсмотрел clearflight, px4, еще что-то с поддержкой sbus - везде 8E1, но примеров по передаче не видел.
Еще момент - при попытке работать с 8E2 мне приходилось использовать вот такую конструкцию:
/**
* enable Overrun disable while debug?
* USART_ISR_ORE flag
*/
USART_CR3(SBUS_PORT) |= USART_CR3_OVRDIS;
либо "подчищать" каждый раз хвосты в _CR2/_CR3, плюс постоянно фиксировалась "странная" ошибка PE (parity error) при засмотре в шину анализатором. C 9E2 все чуднО работает (как и должно). Еще подумал - half-duplex не при чем, без него аналогичная петрушка (gpio9/10 tx/rx с подтяжкой).
Кстати, сейчас озадачился проверкой аналогичной петрушки, но только на attiny и только разбор кадра sbus, без телеметрии - так вот там тоже работает конструкция 9E2 (через собственную реализацию, правда).