STM32 UART send broken frames
Problem was in UART pin configuration: it needed to be pulled up instead of open drain:
GPIO_InitTypeDef pin = {                                                   
      .Pin        = SERVO_PIN,                                                 
      .Mode       = GPIO_MODE_AF_PP,                                           
      .Pull       = GPIO_PULLUP,                                               
      .Speed      = GPIO_SPEED_FREQ_HIGH,                                      
      .Alternate  = UART_AF,                                                   
};                                                                         
HAL_GPIO_Init(SERVO_PORT, &amp;pin);