Win API последовательный порт нужно ждать после инициализации

У меня есть следующая проблема. У меня есть устройство с последовательным портом, которое должно общаться с компьютером. На самом деле это плата Arduino Due, но я не думаю, что это связано.

Я использую CreateFile, чтобы открыть порт, а затем установить параметры с помощью GetCommState ()&SetCommState () и GetCommTimeouts ()&SetCommTimeouts ().

Порт открыт правильно — проблем нет. Но в этот момент я хочу проверить, подключено ли устройство. Поэтому я отправляю конкретное сообщение. Устройство должно реагировать определенным образом, чтобы я знал, что оно подключено.

Теперь к проблеме: Работает только если поставить Sleep (1000) после создания порта (до отправки запроса на квитирование). Похоже, что WinAPI нужно некоторое время, прежде чем он сможет начать использовать порт. Поскольку решение Sleep не пригодно для использования, мне нужно найти альтернативу …

От это не работает Я имею в виду время ожидания ReadFile. Время ожидания истекает, даже если время ожидания составляет около 5 секунд — обратите внимание, что интервал ожидания составляет всего одну секунду. Похоже, запрос на рукопожатие даже не отправлен. Если я установлю тайм-аут на 1 секунду и интервал сна на одну секунду, это работает. Если я установлю тайм-аут на 5 секунд, но нет сна, это не сработает. Видишь проблему?

Я собираюсь попробовать NetworkMonitor, но я уверен, что проблема не с устройством …

0

Решение

Хорошо, я мог бы поискать немного больше, прежде чем отправлять этот вопрос.

Дело в том, что Arduino перезагружается, когда вы открываете соединение с вашего ПК.

Когда вы используете терминал, вы сначала подключаетесь и пишете через несколько секунд, чтобы у платы Arduino было достаточно времени для загрузки, и вы этого не заметите. Вот что меня смутило достаточно, чтобы написать вопрос.

Для этого есть 3 решения, только 2 из которых имеет смысл упомянуть:

1) решение, которое я использовал, не зная всего этого (подождите около секунды, пока плата снова загрузится …)
2) вы отключаете автосброс, изменяя вашу плату Arduino

Оба они глупы, если вы спросите меня, для этого должен быть переключатель или переменная flash …

0

Другие решения