Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Поменять скорость порта не меняя выхода RTS
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
paskal
Пишу бутлодер для процессора. Связь по СОМ-порту, вернее через переходник USB-COM, хотя это вряд ли что меняет.
Итак, связь у меня по UART, а сброс процессора заведен через сигнал RTS.
Сначала я по RTS сбрасываю проц. Он находится в состоянии ожидания синхронизации. Синхронизация идет только на скорости 9600. После успешного получения синхропосылки, он переходит в режим приема команд. Я даю команду поменять скорость на 115200 (на 9600 шьется очень медленно). Затем я меняю скорость на компьютере через API SetCommState. И вот тут - сюрприз! При вызове SetCommState он устанавливает выход RTS, процессор сбрасывается, и переходит в начальное состояние ожидания синхро.
Отсюда вопрос - как менять скорость СОМ-порта не меняя выхода RTS?
zltigo
QUOTE (paskal @ Jun 1 2016, 19:38) *
При вызове SetCommState он устанавливает выход RTS, процессор сбрасывается, и переходит в начальное состояние ожидания синхро.

Так установливайте в SetCommState RTS_CONTROL_DISABLE. Вот и все.

paskal
Цитата(zltigo @ Jun 2 2016, 00:34) *
Так установливайте в SetCommState RTS_CONTROL_DISABLE.

К сожалению такое решение порождает другую проблему. Дело в том что я пишу в Delphi, а там в структуре DCB нет поля fRtsControl, сама структура DCB какая то урезанная - вот описание в модуле windows.pas:
Код
type
  _DCB = packed record
    DCBlength: DWORD;
    BaudRate: DWORD;
    Flags: Longint;
    wReserved: Word;
    XonLim: Word;
    XoffLim: Word;
    ByteSize: Byte;
    Parity: Byte;
    StopBits: Byte;
    XonChar: CHAR;
    XoffChar: CHAR;
    ErrorChar: CHAR;
    EofChar: CHAR;
    EvtChar: CHAR;
    wReserved1: Word;
  end;
  {$EXTERNALSYM _DCB}
  TDCB = _DCB;
  DCB = _DCB;
  {$EXTERNALSYM DCB}

А нет ли другого способа менять скорость? Такого чтоб не затрагивал другие настройки. Может через DeviceIOControl например?
zltigo
QUOTE (paskal @ Jun 6 2016, 20:04) *
К сожалению такое решение порождает другую проблему. Дело в том что я пишу в Delphi

Ужас. А GetProcAddress и прямо сделать вызов функции kernel32.dll без безумных борлонячих прокладок и оберток не судьба?
Ну или откомпилируйте несколько строк любым вменяемым компилятором и прилинкуйте.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.