Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
НеСказочник
58 / 46 / 8
Регистрация: 12.11.2012
Сообщений: 356
Записей в блоге: 2
#1

Через HyperTerminal доступна частота COM порта 921600, но в приложении максимальная частота гораздо меньше - C++

31.03.2014, 19:53. Просмотров 2354. Ответов 28

Через HyperTerminal доступна частота COM порта 921600, но когда я пишу на C++ максимальная частота гораздо меньше. Кто знает, как на с++ работать с com портом на частоте 921600, как HyperTerminal.

Добавлено через 39 секунд
сейчас я просто читаю его, как файл.

Добавлено через 7 часов 10 минут
Ну что, никто не знает? Я что единственный кто с COM портом работает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2014, 19:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Через HyperTerminal доступна частота COM порта 921600, но в приложении максимальная частота гораздо меньше (C++):

Критично ли, если частота шины мамки меньше, чем частота шины проца? - Материнские платы
у проца 5.2ГГц а у мамки 4.8 ГТ/с хотя я так понял еденицы измерения тут разные но все же будет ли заметна разница?

Не максимальная частота у ЦП - Процессоры
Впервые сталкиваюсь с подобным. Как бороться?

Максимальная частота процессора - BIOS
Я купил новый 4-х ядерный процессор,мне в магазине сразу выставили максимальную частоту процессора - 3,2 ГГц,но по умолчанию стояло всего...

Максимальная частота процессора Intel - Процессоры
Здравствуйте, может уже кто-то сталкивался с этим процессором и аналогичным вопросом. Перейду сразу к своему вопросу. У меня в ПК стоит...

Максимальная тактовая частота ПЛИС - Программируемая логика
Знает кто как определить максимальную тактовую частоту для ПЛИС. Например, для ПЛИС фирмы Altera Cyclone V?

i7-4770K и максимальная частота памяти - Процессоры
Привет! Собираю такую систему: процик Intel Core i7-4770K Haswell (3500MHz, LGA1150, L3 8192Kb), материнка ASUS Z87-PRO и ОЗУ Corsair...

28
IrineK
Заблокирован
31.03.2014, 21:03 #2
Могу перенаправить вас сюда: http://www.cyberforum.ru/drivers-programming/
1
НеСказочник
58 / 46 / 8
Регистрация: 12.11.2012
Сообщений: 356
Записей в блоге: 2
31.03.2014, 22:41  [ТС] #3
Цитата Сообщение от IrineK Посмотреть сообщение
Могу перенаправить вас сюда: http://www.cyberforum.ru/drivers-programming/
Спасибо, это поможет мне в другом не менее важном деле, но, боюсь, что я не найду там ответа на мой вопрос. Все темы в разделе преимущественно про написание драйверов, а с com портом С++ работает без драйверов . Так что тут как вопрос по с++, а точнее по структуре DCB и методу SetCommState.

дело в том, что константы, задающие частоту com порта кончаются на CBR_115200,CBR_128000,CBR_256000. частот 256000 и 128000 я вообще не нашёл ни в одном описании COM порта. К тому же куда-то делась частота 921600.
0
raxp
10165 / 6551 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
11.04.2014, 00:13 #4
...что вы бабушку лохматите, причем тут язык. Добавьте константы.

Код
..., CBR_256000, $70800, $E1000)
В DCB задаете прямым текстом DCB.BaudRate = 0хE1000, соответствует 921600.
0
НеСказочник
58 / 46 / 8
Регистрация: 12.11.2012
Сообщений: 356
Записей в блоге: 2
11.04.2014, 08:27  [ТС] #5
Цитата Сообщение от raxp Посмотреть сообщение
В DCB задаете прямым текстом DCB.BaudRate = 0хE1000, соответствует 921600.
Так ведь не работает так. Иначе я бы не спрашивал
0
raxp
10165 / 6551 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
11.04.2014, 09:19 #6
Неужели У меня ведь работает, что я делаю не так?

0
НеСказочник
58 / 46 / 8
Регистрация: 12.11.2012
Сообщений: 356
Записей в блоге: 2
11.04.2014, 09:23  [ТС] #7
Цитата Сообщение от raxp Посмотреть сообщение
что я делаю не так?
Ну тогда, скорее что я не так делаю? На С++ я с COM портом не очень, мне проще другую плису с первой заставить через COM общаться, чем с компьютером. Так что может я действительно что-то не так настраиваю.

Добавлено через 48 секунд
Но нужно мне именно с компьютером и, желательно, С++.
0
SatanaXIII
Супер-модератор
Эксперт С++
5618 / 2653 / 246
Регистрация: 01.11.2011
Сообщений: 6,549
Завершенные тесты: 1
11.04.2014, 09:31 #8
Цитата Сообщение от НеСказочник Посмотреть сообщение
константы, задающие частоту com порта кончаются
Так вы же и пишите программу, - добавьте.
(хотя частота действительно редкая. Я думаю тут корень зол в том, что все распространенные куски кода для работы с ком портом писались в те еще времена, когда такая частота была запредельна)

Цитата Сообщение от НеСказочник Посмотреть сообщение
Так ведь не работает так. Иначе я бы не спрашивал
А остальные настройки: стоповые биты, четность?..
0
raxp
10165 / 6551 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
11.04.2014, 09:37 #9
Без понятия, что вы не так делаете, код свой вы не показываете и мне все равно что вам нужно. А у меня это выглядит так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
type
  TBaudRate = (br110, br300, br600, br1200, br2400, br4800, br9600, br14400,
    br19200, br38400, br56000, br57600, br115200, br128000, br256000,br460800, br921600);
 
 
procedure ApplyDCB;
const
  CBaudRate: array[TBaudRate] of Integer = (CBR_110, CBR_300, CBR_600,
    CBR_1200, CBR_2400, CBR_4800, CBR_9600, CBR_14400, CBR_19200, CBR_38400,
    CBR_56000, CBR_57600, CBR_115200, CBR_128000, CBR_256000, $70800, $E1000);
var
  DCB: TDCB;
begin
    FillChar(DCB, SizeOf(TDCB), 0);
    DCB.DCBlength := SizeOf(TDCB);
    DCB.BaudRate := CBaudRate[FBaudRate];
    DCB.ByteSize := Ord(TByteSize(FByteSize)) + 5;
    DCB.Flags := 1 or ($30 and (DTR_CONTROL_ENABLE shl 4))
                   or ($3000 and (RTS_CONTROL_ENABLE shl 12));
    if FParity <> paNone then
      DCB.Flags := DCB.Flags or 2;
    DCB.Parity   := Ord(TParity(FParity));
    DCB.StopBits := Ord(TStopBits(FStopBits));
    DCB.XonChar  := #17;
    DCB.XoffChar := #19;
    SetCommState(FHandle, DCB)
end;
0
НеСказочник
58 / 46 / 8
Регистрация: 12.11.2012
Сообщений: 356
Записей в блоге: 2
11.04.2014, 09:45  [ТС] #10
Цитата Сообщение от raxp Посмотреть сообщение
Без понятия, что вы не так делаете, код свой вы не показываете и мне все равно что вам нужно. А у меня это выглядит так:
простите, но у Вас на Delphi.

А вот мой код, а если точнее тот кусок, в котором я открываю COM порт:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
LPCWSTR comName=_T("COM1");
 
    hCOM=CreateFile(comName,GENERIC_READ |GENERIC_WRITE,0,NULL,OPEN_EXISTING, 0, NULL);
    if (hCOM==INVALID_HANDLE_VALUE)
    {
        printf("Ошибка открытия %s!\n",comName);
        getchar();
        return 1;
    }
    
    dcb.fBinary = true;
    dcb.BaudRate = 921600; //921600
    dcb.fParity= true;
    dcb.fOutxCtsFlow = false;
    dcb.fOutxDsrFlow = false;
    dcb.fDtrControl = DTR_CONTROL_DISABLE;
    dcb.fDsrSensitivity = false;
    dcb.fRtsControl = RTS_CONTROL_DISABLE;
    dcb.ByteSize = 8;
    dcb.StopBits = ONESTOPBIT;
    dcb.Parity = EVENPARITY;
    if ( !SetCommState(hCOM, &dcb))  
    {
        CloseHandle (hCOM);
        printf("Ошибка настройки COM прота.");
        getchar();
        return 1;//выходим из функции с ошибкой
    }
Добавлено через 3 минуты
если вместо
dcb.BaudRate = 921600
написать, скажем
C++
1
dcb.BaudRate = CBR_115200
Добавлено через 13 секунд
то всё работает.

Добавлено через 59 секунд
В с++ CBR_115200 просто равен 115200.
0
SatanaXIII
Супер-модератор
Эксперт С++
5618 / 2653 / 246
Регистрация: 01.11.2011
Сообщений: 6,549
Завершенные тесты: 1
11.04.2014, 09:56 #11
Цитата Сообщение от НеСказочник Посмотреть сообщение
В с++ CBR_115200 просто равен 115200.
В C++ нет CBR_115200. Эта константа просто где-то описана в подключенном файле.
0
raxp
10165 / 6551 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
11.04.2014, 10:03 #12
если вместо
dcb.BaudRate = 921600
написать, скажем
бред, неудивительно, что у вас не получается.

простите, но у Вас на Delphi.
у меня на WinAPI в синтаксисе Delphi и изменяется это элементарнейшим образом.

Эта константа просто где-то описана в подключенном файле.
именно, в windows.h по идее, у меня в windows.pas . В данном случае ее можно просто задать напрямую, CBR_115200 = $1C200 = 0x1C200
0
НеСказочник
58 / 46 / 8
Регистрация: 12.11.2012
Сообщений: 356
Записей в блоге: 2
11.04.2014, 10:13  [ТС] #13
CBR_115200 - у меня и так работает. А вот 921600, который 0xE1000 нет
0
Миниатюры
Через HyperTerminal доступна частота COM порта 921600, но в приложении максимальная частота гораздо меньше  
raxp
10165 / 6551 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
11.04.2014, 12:29 #14
Два раза повторили, что константа CBR_115200 уже прописана, тыкните по ней и посмотрите ее значение.

А вот 921600, который 0xE1000 нет
ваша ОС и среда компиляции? Код выложить не скриншотом и полностью.
0
НеСказочник
58 / 46 / 8
Регистрация: 12.11.2012
Сообщений: 356
Записей в блоге: 2
11.04.2014, 12:32  [ТС] #15
Я уже выкладывал код. Среда Visual Studio 2010. ОС windows 7 и windows 8.

Цитата Сообщение от НеСказочник Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
LPCWSTR comName=_T("COM1");
hCOM=CreateFile(comName,GENERIC_READ |GENERIC_WRITE,0,NULL,OPEN_EXISTING, 0, NULL);
    if (hCOM==INVALID_HANDLE_VALUE)
    {
        printf("Ошибка открытия %s!\n",comName);
        getchar();
        return 1;
    }
dcb.fBinary = true;
    dcb.BaudRate = 921600; //921600
    dcb.fParity= true;
    dcb.fOutxCtsFlow = false;
    dcb.fOutxDsrFlow = false;
    dcb.fDtrControl = DTR_CONTROL_DISABLE;
    dcb.fDsrSensitivity = false;
    dcb.fRtsControl = RTS_CONTROL_DISABLE;
    dcb.ByteSize = 8;
    dcb.StopBits = ONESTOPBIT;
    dcb.Parity = EVENPARITY;
    if ( !SetCommState(hCOM, &dcb))  
    {
        CloseHandle (hCOM);
        printf("Ошибка настройки COM прота.");
        getchar();
        return 1;//выходим из функции с ошибкой
    }
0
11.04.2014, 12:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2014, 12:32
Привет! Вот еще темы с ответами:

Asus eah5550 Максимальная частота только 30 Гц - Мониторы
Windows 7 x64 Видеокарта Asus EAH5550/DI/1GD3(LP) Раньше работало два монитора 19 дюймовых - проблем не было. Появился новый монитор...

Максимальная частота обрабатываемого сигнала на настольном компьютере - Цифровая обработка сигналов
Приветствую, Не знаю насколько корректен мой вопрос, буду приводить конкретные характеристики. Имея обычный настольный компьютер (с...

Какая максимальная частота для процессора Athlon X4 635? - Процессоры
Какая максимальная частота для процессора Athlon X4 635?Мне удалось разогнать до 3,4 ГГЦ с множителем 14,5 и до 3,5 ГГЦ с множителем...

Частота шины памяти и эффективная частота - Оперативная память
При покупке модулей памяти возник вопрос. Какая частота шины памяти? В описании модуля написано Частота работы 133 Мгц и с низу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru