Читать данные из последовательного порта - PullRequest
5 голосов
/ 30 июля 2009

Как мне прочитать данные с последовательного порта, используя C? а потом опять передавать данные в модем? Я использую кабель RS 232 для последовательной связи ...

Ответы [ 5 ]

6 голосов
/ 30 июля 2009

Много полезной информации о работе с последовательными портами как на ПК, так и на конце устройства можно найти на сайте Яна Аксельсона для книги Последовательный порт завершен .

Фактическое взаимодействие с портом будет зависеть от платформы. В * nix большинства версий вы открываете устройство с именем что-то вроде /dev/ttya и используете read(), write() и ioctl() для чтения, записи и настройки порта.

В Windows вы открываете файл с именем COM1 (или \\.\COM1 в некоторых разновидностях) с помощью функции CreateFile(), а затем настраиваете его и довольны такими функциями, как SetCommState() и DCB структура. Детали в общих чертах похожи на то, что вам нужно делать в * nix, но организованы совершенно иначе. Всю дискуссию о настройке и использовании COM-портов можно найти по адресу MSDN .

На встроенном устройстве вы будете либо напрямую обращаться к аппаратным регистрам UART , либо взаимодействовать с ОСРВ. В любом случае, по сути, нет способа сделать код на устройстве доступным для широкого использования.

2 голосов
/ 30 июля 2009

Во встроенном мире ваш компилятор будет иметь некоторый механизм (обычно специфичный для компилятора), который позволяет ему получать доступ к аппаратным регистрам, которые используются для реализации функции последовательного порта, либо внутри устройства, либо во внешней памяти или подключенном устройстве ввода-вывода. Эти определения регистров часто предоставляются производителем инструмента или процессора, и тогда это просто случай записи значений управления конфигурацией в регистры последовательного порта для установки его режима работы и последующего чтения данных из регистра буфера приема tje.

Звучит просто, но в списке рассылки MSP-430 вопросы программирования USART являются самой распространенной темой.

2 голосов
/ 30 июля 2009

Прежде всего, это очень зависит от используемой вами ОС.

Для * nix типа вы обычно открываете устройство с последовательным портом, как обычный файл (например, / dev / ttyS0), и начинаете чтение или запись из него. Что касается Windows, я могу дать вам совет по поиску надежной библиотеки, потому что последовательная связь Windows может быть настоящим кошмаром. Более того, могут быть некоторые различия между старыми версиями Windows и никогда.

Лично, потому что я пользователь wxWidgets, я использую wxCTB. Вы должны найти библиотеку, которая подойдет для IDE, которую вы используете.

некоторые бесплатные ссылки;) www.robbayer.com/files/serial-win.pdf www.lookrs232.com/com_port_programming/

1 голос
/ 27 августа 2009

Чтобы расширить ответ Яна, типичный встроенный компилятор c будет иметь директиву компилятора или оператор, параметры которого управляют настройками, такими как скорость передачи, и который связывает UART (или другое оборудование ввода-вывода) с потоком. Вы можете указать имя потока (если у вас более одного последовательного порта) или использовать значения по умолчанию. Затем вы можете получить доступ к последовательному порту с помощью обычных подпрограмм с символами, и при получении каждого символа произойдет прерывание. Таким образом, ваша процедура прерывания читает каждый символ и помещает его в буфер.

0 голосов
/ 30 июля 2009

На земле Windows вам лучше найти библиотеку, которая заставляет всю магию происходить.

Лично я использую Borland C ++, чтобы собрать небольшую утилиту для общения с моим оборудованием (загрузчики, конфигурация и тестирование), и я очень доволен TurboPower Async Professional Library , которая работает как в Delphi и BCC и является открытым исходным кодом (Mozilla Public License 1.1).

...