Вступить в клуб →
средняявопросCAN, Modbus и RS-485

Мастер Modbus регулярно получает ответ с битым последним байтом CRC

Ведомое устройство на STM32 отправляет ответ по RS-485 так:

HAL_GPIO_WritePin(DE_GPIO_Port, DE_Pin, GPIO_PIN_SET);
for (size_t i = 0; i < len; i++) {
    while (!(USART2->SR & USART_SR_TXE)) { }
    USART2->DR = frame[i];
}
HAL_GPIO_WritePin(DE_GPIO_Port, DE_Pin, GPIO_PIN_RESET);

Мастер почти всегда видит ошибку CRC: последний байт искажён или отсутствует. Что не так?

  • DE снимается до флага TC — байт ещё в отправке
  • TXE нужно проверять после записи, а не до
  • CRC Modbus считается без последнего байта
  • Выход DE нужно переключать до инициализации UART

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела