На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS

Дорогие друзья! Поздравляем вас с Новым 2025 годом!

Всем удачи, успеха и благополучия!

msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> Управление выводом TXD COM порта , Нужно сбросить/установить состояние вывода TX
    Работая с COM портом через функцию WINAPI EscapeCommFunction мы можем управлять такими выводами как RTS и DTR. Можно установить их в состояние 1 или сбросить в 0.
    Но мне нужно так же уметь делать в выводом TX до отправки каких-либо данных.
    Это нужно при общении с микроконтроллером в режиме 1-WIRE (где TX и RX объединены), для входа в BOOT LOADER.

    Например, на PureBasic это решается встроенной в него функцией SetSerialPortStatus(#com_port, #PB_SerialPort_TXD, 0) или SetSerialPortStatus(#com_port, #PB_SerialPort_TXD, 1).
    Но в WINAPI не нашёл такого.

    Прошу поделиться знаниями и предложениями по этому вопросу.
      https://learn.microsoft.com/ru-ru/windows/w...se-setcommbreak
      Состояние BREAK для линии TX и есть выдача активного уровня (нуля). Но если речь идет об 1-Wire имени Далласа, который используется в "таблетках" DS1921, термометрах DS18B20 и подобных микросхемах, то в нем нет необходимости "дергать" TX вручную - там достаточно установить соответствующую скорость и передавать либо 0xF0, либо 0x00 на каждый бит в зависимости от его значения (1 или 0). Стартовое условие тоже передается как 0xF0, но на более низкой скорости.
        Dushevny, спасибо, буду смотреть в направлении SETBREAK
        Дёрнуть напрямую TX нужно только один раз при входе в загрузочный режим микроконтроллера. Там суть в том, что бы перейти с низкого на высокий на выводе RESET контроллера (используются RTS или DTR COM порта) при низком MODE (используется TX+RX), и только затем установить MODE в высокий. Вот тут-то и нужно дёрнуть TX напрямую
        А далее уже идёт стандартный (UART) обмен данными по линии контроллера MODE (RX+TX). После согласования скорости, конечно.
          Да, это сработало как нужно:
          resF = EscapeCommFunction(hPort, SETBREAK);
          или
          resF = SetCommBreak(hPort);

          А после необходимой операции на линии вернуть состояние TX обратной функцией.

          Только нужно выставить параметр fAbortOnError = FALSE в структуре DCB, иначе, если там будет true (а у меня так было по умолчанию), то после установки SETBREAK любые манипуляции с СОМ портом будут заблокированы до сброса ошибок функцией ClearCommError.

          Dushevny, большое спасибо.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0255 ]   [ 16 queries used ]   [ Generated: 15.01.25, 12:44 GMT ]