paskal 1 1 июня, 2016 Опубликовано 1 июня, 2016 · Жалоба Пишу бутлодер для процессора. Связь по СОМ-порту, вернее через переходник USB-COM, хотя это вряд ли что меняет. Итак, связь у меня по UART, а сброс процессора заведен через сигнал RTS. Сначала я по RTS сбрасываю проц. Он находится в состоянии ожидания синхронизации. Синхронизация идет только на скорости 9600. После успешного получения синхропосылки, он переходит в режим приема команд. Я даю команду поменять скорость на 115200 (на 9600 шьется очень медленно). Затем я меняю скорость на компьютере через API SetCommState. И вот тут - сюрприз! При вызове SetCommState он устанавливает выход RTS, процессор сбрасывается, и переходит в начальное состояние ожидания синхро. Отсюда вопрос - как менять скорость СОМ-порта не меняя выхода RTS? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 1 июня, 2016 Опубликовано 1 июня, 2016 · Жалоба При вызове SetCommState он устанавливает выход RTS, процессор сбрасывается, и переходит в начальное состояние ожидания синхро. Так установливайте в SetCommState RTS_CONTROL_DISABLE. Вот и все. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
paskal 1 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба Так установливайте в 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 1 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба К сожалению такое решение порождает другую проблему. Дело в том что я пишу в Delphi Ужас. А GetProcAddress и прямо сделать вызов функции kernel32.dll без безумных борлонячих прокладок и оберток не судьба? Ну или откомпилируйте несколько строк любым вменяемым компилятором и прилинкуйте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться