-
Все API функции работают со скоростью COM порта не более 256К
а гипертерминал работает вплоть до 921600. Собственно вопрос: как добиться понимания WIN API скоростей больше 256К или как это делает гипертерминал (т.е. фактически он должен быть написан минуя WIN API)
-
точно не работают? как проверяли?
-
> а гипертерминал работает вплоть до 921600.
а там не бит в сек? тогда это = 112.5К.
-
to RWolf очень просто написал простейшую прогу на API запустил и проверил на 115200 работает потом подключил к терминалу платку на Cortex M3 и на скорости 921600 отладил все проблемы и тогда решил написать прогу обработки на дельфях. установил в DCB.BaudRate = 921600 и получил ошибку начал разбираться и дошел до функции GetCommProperties(CHandle, CommProp);
которая возвращает возможности порта а там засада больше чем 128К скорость драйвера виндовоза не может быть и соответственно не позволяет ее установить. в инете пишут о драйверках которые позволяют увеличить скорость но или я тупой или это все гавно. Вот собственно в чем проблема может кто сталкивался
-
непохоже, чтобы гипертерминал использовал что-то, кроме стандартного API для работы с последовательными портами, у hypertrm.dll в таблице импорта только стандартные функции.
можно помониторить системные вызовы на предмет передаваемых гипертерминалом аргументов — возможно, это прояснит, каким образом ему удаётся открыть порт на скорости 900 кбод.
моё мнение — если такие скорости действительно нужны, нужно смотреть в сторону USB.
-
com проще и он есть здесь и сейчас и на компе и на Crtex:) а с USB надо разбираться а это время. А к вопросу помониторить если вкратце это как и чем? Хотя он стандартные функции может вызывать для стандартных же вещей а инициализацию порта проводить свими средствами вероятность маленькая но так может быть.
-
API Monitor, например.
-
доигрался с разными USB конверторами и выяснилась такая штука у меня три порта родной - №2 и конверторы №3 и №4 так вот функция GetCommProperties(CHandle, CommProp); возвращает CommProp.dwMaxBaud и dwSettableBaud следующие значения
№2 00020000 100067FFF
№3 10000000 100067FF9
№4 10000000 100066B70
отсюда вывод если dwMaxBaud = 10000000 значит порт позволяет пользователю устанавливать произвольную скорость (старшая единичка) а нули говорят об отсутствии ограничения а в случае с портом №2 нельзя установить произвольную скорость порта (только фиксированную) и ограничение по скорости в 115200. dwSettableBaud говорить о возможности установить стандартную скорость (не более 128К) побитно это так с младшего BAUD_075 = $00000001,BAUD_110 = $00000002,BAUD_134_5 = $00000004,BAUD_150 = $00000008,BAUD_300 = $00000010,BAUD_600 = $00000020,
BAUD_1200 = $00000040, BAUD_1800 = $00000080, BAUD_2400 = $00000100, BAUD_4800 = $00000200, BAUD_7200 = $00000400, BAUD_9600 = $00000800;
BAUD_14400 = $00001000,BAUD_19200 = $00002000,BAUD_38400 = $00004000;
BAUD_56K = $00008000,BAUD_128K = $00010000,BAUD_115200 = $00020000;
BAUD_57600 = $00040000; BAUD_USER = $10000000;
-
спасибо за общение. в очередной раз понял тщательней надо доки читать и правильно интерпретировать результаты опытов :)
-
да к стати забыл сказать что терминал тупо показывает стандартный набор скоростей и проверяет возможность установки порта с этой скоростью только в момент подключения порта, а это происходит с большой задержкой после нажатия ок причем кнопик применить вообще ничего не проверяет
-
В доках к USB-COM конверторам как правило пишут максимальную скорость. Также сталкивался с "кривыми" конверторами, которые не держали заявленную макс. скорость...
-
Win API определяет скорости только до CBR_256000
-
-
> Также сталкивался с "кривыми" конверторами, которые не держали
> заявленную макс. скорость...
Есть очень большая зависимость от шума транзисторов на конвертере и качества кабелей. Да и на конвертерах написано "ДО", а не "зуб даю".
> Win API определяет скорости только до CBR_256000
Ну так const CBR_512000=512000; и всё.