|
Связь с компом через UART |
|
|
|
May 6 2008, 14:36
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Этот вопрос меня интересует с двух сторон. Во-первых, как работать с UART? И второе: как работать с COM-портом из программы в Windows? По первому у меня вобщем-то есть определённая литература и даже примеры. Но вот второе вызывает затруднение. Точнее, даже не сама работа с портом, а мне не ясно, что будет происходить на выводах порта при записи в него байта. Скажем, я открыл порт через CreateFile и записываю в него последовательность, скажем из 32 байт, через WriteFile. Что при этом будет происходить на выводе TxD? Или мне можно этим не заморачиваться, т.к. об этом позаботится UART? И ещё одно: как считывать данные из МК? Ясно, что функцией ReadFile, но как определить момент, в который начнётся передача?
|
|
|
|
|
May 6 2008, 14:57
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
Цитата(TarasG @ May 6 2008, 17:36)  Этот вопрос меня интересует с двух сторон. Во-первых, как работать с UART? И второе: как работать с COM-портом из программы в Windows? По первому у меня вобщем-то есть определённая литература и даже примеры. Но вот второе вызывает затруднение. Точнее, даже не сама работа с портом, а мне не ясно, что будет происходить на выводах порта при записи в него байта. Скажем, я открыл порт через CreateFile и записываю в него последовательность, скажем из 32 байт, через WriteFile. Что при этом будет происходить на выводе TxD? Или мне можно этим не заморачиваться, т.к. об этом позаботится UART? И ещё одно: как считывать данные из МК? Ясно, что функцией ReadFile, но как определить момент, в который начнётся передача? По первой стороне - открываем соответствующий раздел меги посвящённый уарту и читаем.. По второй стороне - ну воспользуйтесь поиском - там море инфы и примеров .... А если по теме - при записи WriteFile - ваши данные опустяться на уровень драйверов винды и они уже будут коммандовать парадом, но советую заморачиваться. Там есть есчё IO_CONTROL - типа ф-ции которыми можно достучаться до настроек порта - можете оперировать ими... На счёт момента - там по ходу можно или поллингом или как в мегах - аналог интерупта - при приходе в буфер драйвера инфы - можно чтото сотворить.. ДаФно было - могу порыться дома - посмотреть...
|
|
|
|
|
May 6 2008, 15:42
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(TarasG @ May 6 2008, 18:36)  ... Что при этом будет происходить на выводе TxD? Или мне можно этим не заморачиваться, т.к. об этом позаботится UART?... можно не заморачиваться, а вот скорости лучше подобрать...внимательней на кварцы, делители и т.д.. сначала запускаете передача из МК, ловля на писюке... так просче, если где то напортачите в настройках...обратно уже на автомате, почти..т.к. природу буферизации нуна будет подумать..т.е. скорость передачи это одно, а выемка и обработка каждого байтика - это другое... удачи Вам (круглый)
|
|
|
|
|
May 7 2008, 17:57
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Попробовал что-то сделать. При соединениее "входа" и "выхода" МК он свои данные получает. При аналогичном соединении комп тоже свои данные получает. А вот при соединении компа и МК - глухо. Скорость поставил одинаковую, все настройки (бит чётности, количество стоп-битов и т.п.) тоже одинаково. Но не хотят видеть ни в какую  Хоть из МК в комп, хоть из компа в МК - даже прерываний не генерируется. Микросхема RS-232 100% рабочая, т.к. свои данные принимаются даже через неё как МК, так и компом...
|
|
|
|
|
May 7 2008, 18:17
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Цитата(vetal @ May 7 2008, 21:04)  Отключите на ПК управление потоком. Если Вы имеете ввиду настройки порта в Диспетчере устройств, то там оно выключено. А если из программы, то подскажите как  Если что, структура DCB задана следующим образом: Код mDCB.BaudRate = CBR_9600; mDCB.ByteSize = DATABITS_8; mDCB.fParity = TRUE; mDCB.Parity = EVENPARITY; mDCB.StopBits = ONESTOPBIT; mDCB.fBinary = TRUE; mDCB.fOutxCtsFlow = FALSE; mDCB.fOutxDsrFlow = FALSE; mDCB.fDtrControl = DTR_CONTROL_DISABLE; mDCB.fDsrSensitivity = FALSE; mDCB.fNull = FALSE; mDCB.fRtsControl = RTS_CONTROL_DISABLE; mDCB.fAbortOnError = FALSE; mDCB.fOutX = FALSE; mDCB.fInX = FALSE;
Сообщение отредактировал TarasG - May 7 2008, 18:23
|
|
|
|
|
May 7 2008, 19:31
|

Гуру
     
Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553

|
Цитата А если из программы, то подскажите как Оно выключено. mDCB.fDtrControl = DTR_CONTROL_DISABLE; mDCB.fRtsControl = RTS_CONTROL_DISABLE; Правильно сказали - для начала надо на гипертерминале отладиться.
|
|
|
|
|
May 7 2008, 19:34
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Гипертерминал тоже ничего не видит  Настройки выставляю как в МК (см. код выше), нажимаю на устройстве кнопку, после чего должна быть отправка данных в ПК. Но на терминале пусто  Аналогично МК не реагирует на комп...
Сообщение отредактировал TarasG - May 7 2008, 19:43
|
|
|
|
|
May 7 2008, 20:24
|
Профессионал
    
Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960

|
Цитата(vetal @ May 7 2008, 23:31)  Правильно сказали - для начала надо на гипертерминале отладиться. Для отладки гипертермил - это худшее, что есть. Возимите лучше терминальную программу от Moxa http://www.moxa.com/drivers/pcommlite/win2k/PComm2K_V1.3.zip(программа PComm Terminal Emulator) С ней по крайне мере ясно, что происходит с CTS и DSR Цитата(TarasG @ May 7 2008, 23:34)  Гипертерминал тоже ничего не видит  Настройки выставляю как в МК (см. код выше), нажимаю на устройстве кнопку, после чего должна быть отправка данных в ПК. Но на терминале пусто  Аналогично МК не реагирует на комп... Возмите осциллограф и посмотрите, что приходит на ногу RxD меги при прередачи с РС последовательности 5-рок. Аналогично посмотрите, что на ноге TxD меги при непрерывной передачи пятерок. По длительности импульсов можно определить без проблем скорость, и понять все ли в порядке.
|
|
|
|
|
May 7 2008, 21:33
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Цитата(vvs157 @ May 7 2008, 23:24)  Для отладки гипертермил - это худшее, что есть. Возимите лучше терминальную программу от Moxa http://www.moxa.com/drivers/pcommlite/win2k/PComm2K_V1.3.zip(программа PComm Terminal Emulator) С ней по крайне мере ясно, что происходит с CTS и DSR Аналогично  Передачи нет ни в одном направлении Цитата(vvs157 @ May 7 2008, 23:24)  Возмите осциллограф и посмотрите, что приходит на ногу RxD меги при прередачи с РС последовательности 5-рок. Аналогично посмотрите, что на ноге TxD меги при непрерывной передачи пятерок. По длительности импульсов можно определить без проблем скорость, и понять все ли в порядке. Завтра попробую. А 5-ки вы имеете ввиду 0х55? Прошу прощения, проблема решилась. Глупая была ошибка, хоть и не совсем по мое вине. Распайку микросхемы ST232 я взял из журнала, а там оказались перепутаны TxD и RxD  Вобщем, в меня приёмник соединялись с приёмником, а передатчик с передатчиком. А при соединении самого с собой всё работало. Я это 2 раза проверил (распайку), но опять же с журналом. А когда стал осцилографом, то заметил, что при подаче сигналов сразу в двух направлениях, на одной ноге ничего непроисходит, а на другой появляются бессмысленные импульсы, похожие на смесь двух сигналов. Сейчас всё нормально работает на скоростях до 57600, чего более чем достаточно. Всем спасибо за помощь, ещё раз извините
Сообщение отредактировал TarasG - May 7 2008, 20:39
|
|
|
|
|
May 8 2008, 10:49
|

Участник

Группа: Новичок
Сообщений: 72
Регистрация: 25-02-08
Пользователь №: 35 378

|
Цитата(777777 @ May 8 2008, 12:56)  Работать с ним сравнительно просто: открываешь файл с именем "COM1" (или какой нужно) с помощбю функции CreateFile, но предварительно читаешь в MSDN про эту функцию, а также про структуру DCB... Спасибо, это я уже всё нашел. Сейчас буду пробовать, главное что по железу всё работает. Цитата(777777 @ May 8 2008, 12:56)  Но дело не в этом, а в том, что если ты разрабатываешь новое устройство, то с COM-портами лучше не связываться - их и так уже нет ни в одном компьютере, а скоро даже USB-конвертер не достанешь. Оно то так, но в моём случае работает как раз обратное. Дело в том, что устройство будет соединяться с очень старым компом (класса Pentium 133), где USB даже не пахнет. И соединять придётся скорей всего с LPT портом, т.к. COM занят мышью. Кроме того, там уже протянут кабель (используется для связи с мини-АТС), который подключается как раз к 25-выводному порту (на другом конце 9-выводный).
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|