0 / 0 / 0
Регистрация: 09.07.2020
Сообщений: 7
1

Проблема искажения данных при использовании ком-порта с четностью, установленной в режим ODD и EVEN

23.08.2021, 13:54. Показов 10306. Ответов 0

Author24 — интернет-сервис помощи студентам
Добрый день. Я пишу программу, которая должна опрашивать микроконтроллер по юарт. Одна из функций - перенастройка настроек юарта через комп. Проблема возникает при переустановке четности от None к ODD и EVEN.

При None данные уходят и приходят корректно.
\1\3\2\1\7\248\22 (байты) - вот это нормальный прием, причем первые три байта фиксированные

При ODD и EVEN они уходят в корректной форме, проходят проверку на микроконтроллере, но на стороне компа прием следующий:
\1\48\1\32\170\170\170 (байты) - фиксированные байты не соответствуют, принято при этом реально 5 байт, последние 2 - буфер по таймауту докладывает последний принятый байт.

Почему так происходит не понятно, ошибка появляется на этапе приема, до этого все данные верны. Режим четности на компе и на микроконтроллере совпадают. Сталкивался ли кто-то с этой проблемой?

Инициализация СOM происходит так:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    hSerial =
        ::CreateFile(sPortName, GENERIC_READ | GENERIC_WRITE, 0, 0,
            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if (hSerial == INVALID_HANDLE_VALUE) {
        if (GetLastError() == ERROR_FILE_NOT_FOUND) {
            return INVALID_HANDLE_VALUE;
        }
        return INVALID_HANDLE_VALUE;
    }
 
    DCB dcbSerialParams = { 0 };
    dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
    if (!GetCommState(hSerial, &dcbSerialParams)) {
        return INVALID_HANDLE_VALUE;
    }
    dcbSerialParams.BaudRate = baudrate;
    dcbSerialParams.ByteSize = ByteSize;
    dcbSerialParams.StopBits = StopBits;
    dcbSerialParams.Parity = Parity;
    dcbSerialParams.fBinary = TRUE;
    dcbSerialParams.fOutxCtsFlow = FALSE;
    dcbSerialParams.fOutxDsrFlow = FALSE;
    dcbSerialParams.fDtrControl = DTR_CONTROL_HANDSHAKE;
    dcbSerialParams.fDsrSensitivity = FALSE;
    dcbSerialParams.fNull = FALSE;
    dcbSerialParams.fRtsControl = RTS_CONTROL_DISABLE;
    dcbSerialParams.fAbortOnError = FALSE;
 
    COMMTIMEOUTS ComTimeouts;
    ComTimeouts.ReadIntervalTimeout = 0;
    ComTimeouts.ReadTotalTimeoutMultiplier = 0;
    ComTimeouts.ReadTotalTimeoutConstant = 100;
    
    if (!SetCommState(hSerial, &dcbSerialParams)) {
        return INVALID_HANDLE_VALUE;
    }
 
    //if (!SetCommTimeouts(hSerial, &ComTimeouts))
    //{
    //}
 
    if (!PurgeComm(hSerial, PURGE_TXCLEAR | PURGE_RXCLEAR))
    {
    }
 
 
    return hSerial;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2021, 13:54
Ответы с готовыми решениями:

Вылет в синий экран при чтении данных из ком-порта
Накидал читалку данных из ком-порта, вроде ничего особенного не делаю, а по истечение минуты...

Переброс данных с ком порта в сеть
Вообщем нужно чтобы устройство подключенное к ком порту. с помощью программы или чего либо еще...

Отображение данных принятых с ком порта (C# windows forms)
Есть контроллер ардуино. Если на него послать через ком порт on контакт 1 будет замкнут, если off...

Ошибка при открытии ком порта
при попытке компиляции выдаёт ошибку: 4 G:\_1codegraf\COM_INIT.h:13 cannot convert 'char*' to...

0
23.08.2021, 13:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2021, 13:54
Помогаю со студенческими работами здесь

Ошибки при настройке ком-порта
Здравствуйте! Я пишу программу для ком-порта. Пытаюсь заполнить структуры DCB. Четность, количество...

Проблема с привязкой связанных данных к ComboBox при использовании EF
Имеется модель данных. В ней 3 таблицы связаны каскадно один ко многим. В данном случае я работаю...

Проблема вывода данных на экран при использовании принтера
Не давно возникла проблема вывода данных на экран вобщем нащел статью "Работа с принтерами в...

Утечки при использовании порта завершения и соккетов
Здравствуйте, уважаемые Гуру! Реализовываю сервер с использованием порта завершения. Всё работает,...

Искажения данных при получении из бд
(MS SQL SERVER) Всем привет, в базед данныхесть два стобца, в обоих столбцах записано &, или...

Odd tag in Exec! Odd tag in Cleanup! Odd tag in CreateGroup! UnityEditor.DockArea:OnGUI()
Здравствуйте, столкнулся с такими ошибками Odd tag in Exec! Odd tag in Cleanup! Odd tag in...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru