Управление потоком между устройством ESP32 и RS323

Я пытаюсь связаться с устройством RS232 с ESP32 (Heltec Wifi/LoRa 32 v2) моя проблема заключается в том, что я не получаю никакого ответа от устройства, делая некоторые исследования, я думаю, что проблема может быть управление потоком, потому что я не использую эти контакты и модули, которые я использовал, также не имеют этих контактов. Знаете ли вы способ, по крайней мере, припаять контакты DB9, чтобы иметь своего рода управление потоком для связи устройств?

, 👍1

Обсуждение

С каким устройством вы пытаетесь общаться?, @StarCat

Также: вы используете конвертер TTL->RS232?, @StarCat

На это можно ответить, только взглянув на лист данных "устройства RS232". Вы можете эмулировать управление потоком RTS/CTS, подключив их к двум неиспользуемым выводам GPIO, а затем позаботиться о них в своем собственном коде при отправке данных туда и обратно. Кроме того, реальный интерфейс RS232 взаимодействует на уровнях сигнала между 3 и 15 В, поэтому, если вы не совсем уверены, что "устройство RS232" отвечает на уровне сигнала менее 3,6 В, вам обязательно понадобится переключатель уровней. Лучше использовать специальный экран RS232 для этого-это единственный ответ, который я могу дать из информации в вопросе., @orithena


1 ответ


1

Вы можете использовать вызовы ESP-IDF, чтобы правильно настроить UART для аппаратной последовательной связи на выводах 4 и 5 (и, возможно, также на других выводах).

В приведенном ниже примере вам просто нужно:

  • назначьте UART_CLIENT_RTS и UART_CLIENT_CTS на нужные вам контакты
  • измените uart_config_t на параметры, соответствующие вашему устройству RS232
  • установите для параметраflow_ctrl значение UART_HW_FLOWCTRL_RTS, UART_HW_FLOWCTRL_CTS, UART_HW_FLOWCTRL_CTS_RTS или UART_HW_FLOWCTRL_MAX
    #define BUFFER_SIZE 1024

    #define UART_CLIENT_TXD  (GPIO_NUM_4)
    #define UART_CLIENT_RXD  (GPIO_NUM_5)
    #define UART_CLIENT_RTS  (GPIO_NUM_?) // Установите это
    #define UART_CLIENT_CTS  (GPIO_NUM_?) // Установите это
    
    uart_port_t uartNum = UART_NUM_1;

    uart_config_t uart_config = { // Установите это
        .baud_rate = 115200,
        .data_bits = UART_DATA_8_BITS,
        .parity    = UART_PARITY_DISABLE,
        .stop_bits = UART_STOP_BITS_1,
        .flow_ctrl = UART_HW_FLOWCTRL_CTS_RTS
    };
        
    uart_param_config(uartNum, &uart_config);
    uart_set_pin(uartNum, UART_CLIENT_TXD, UART_CLIENT_RXD, UART_CLIENT_RTS, UART_CLIENT_CTS);
    uart_driver_install(uartNum, BUFFER_SIZE * 2, 0, 0, NULL, 0);

Связь может осуществляться с помощью различных методов uart_write_* и uart_read_*, как определено в документации.

,