Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 29.04.2020
Сообщений: 4
1

Как считать данные с com порта и записать их в файл?

27.05.2020, 14:13. Просмотров 260. Ответов 9

Всем привет. Работаю с stm32 микроконтроллером, задача состоит в том что бы в bcb написать программу которая считывает полученные байты из com порта и записывает их в файл, прием в кейле я уже настроил. Подскажите как это сделать. Пока написал только это
C++
1
2
3
4
5
int buf[1000];
int fd;
 
fd = open("F:\builder\keil files\txt1.txt", O_RDWR);
write(fd, buf, 1000);
в кейле код выглядит вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  uint32_t *ptr; 
  ptr = 0;  
uint8_t b;
uint8_t s;   
uint32_t count=0;  
  while(1)
       {    
       HAL_UART_Receive(&huart1, &s,1,100);  
       if(s ==1)
         {    
         for(uint32_t i = 0; i <1000; i++)
            {
            b = *ptr++;   
            HAL_UART_Transmit(&huart1, &b, 1, 100);    
            HAL_Delay(10);
            count++;                
            }
            if(count == 20000) break;
               
         }
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2020, 14:13
Ответы с готовыми решениями:

Как считать данные с файла и записать результат в файл?
Как считать данные с файла и записать результат в файл? #include &lt;iostream&gt; #include &lt;vector&gt;...

Как считать и записать данные из сервлета в обычный текстовый файл?
Помогите, пожалуйста, примерчиком, как считать и записать данные из сервлета в обычный текстовый...

Как считать/записать значение в/из COM-порта?
как считать записать значение в-из COM-порта ?

Как считать данные с com порта?
Подскажите как можно считать побитово значения с com порта? Пользовался библиотекой с GitHub -...

9
locm
27.05.2020, 16:33
  #2

Не по теме:

Хз как это делается в C++ Builder. Я бы сделал так (не C++).

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
If OpenSerialPort(0, "COM4", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
  If CreateFile(0, "F:\builder\keil files\txt1.bin") ; Открыли порт и создали файл.
    
    Repeat
      Count = AvailableSerialPortInput(0)      ; В порт поступлили новые данные.
      If Count>0
        Dim Buff.a(Count)                      ; Буфер под данные.
        ReadSerialPortData(0, @Buff(), Count)  ; Читаем из порта в буфер.
        WriteData(0, @Buff(), Count)           ; Пишем из буфера в файл.
        FreeArray(Buff())
      Else
        Delay(2)
      EndIf
    ForEver
 
    CloseFile(0)
  Else
    MessageRequester("", "Не удалось создать файл")
  EndIf
  CloseSerialPort(0)
Else
  MessageRequester("", "Не удалось открыть порт")
EndIf
End

0
Модератор
8195 / 6067 / 809
Регистрация: 14.02.2011
Сообщений: 21,034
27.05.2020, 17:59 3
BrokenBlazer, при чем здесь Keil если программа нужна на bcb ?
0
2512 / 1557 / 335
Регистрация: 09.09.2017
Сообщений: 6,265
27.05.2020, 18:18 4
Можете взять отсюда ttym.h + ttym.c: https://github.com/COKPOWEHEU/modules
Это реализация работы с COM-портом. Использование достаточно простое:
C
1
2
3
4
5
6
7
ttym_t tty = ttym_open("/dev/ttyUSB0", 9600);
ttym_timeout(tty, 100);
...
char buffer[1000];
ssize_t bytes_read = ttym_read(tty, buf, 10);
...
ttym_close(tty);
0
locm
27.05.2020, 18:40
  #5

Не по теме:

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Это реализация работы с COM-портом. Использование достаточно простое
Под виндой будет работать?

0
COKPOWEHEU
27.05.2020, 23:50
  #6

Не по теме:

locm, а посмотреть в код? Там две разные реализации, одна под Linux, вторая под Windows.
Когда делаешь что-то серьезное, всегда стоит поддерживать переносимость.

0
locm
28.05.2020, 00:56
  #7

Не по теме:

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
locm, а посмотреть в код?
Я посмотрел. Увидел
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
C
1
"/dev/ttyUSB0"
отсюда и вопрос.
На мой взгляд прежде чем читать нужно узнать есть ли данные в порту иначе зависнем до появления данных. Это не всегда допустимо.

0
2512 / 1557 / 335
Регистрация: 09.09.2017
Сообщений: 6,265
28.05.2020, 10:27 8
Цитата Сообщение от locm Посмотреть сообщение
Я посмотрел. Увидел
Ну надо же было что-то указать в качестве примера. Можно было указать COM1, какая разница.
Цитата Сообщение от locm Посмотреть сообщение
На мой взгляд прежде чем читать нужно узнать есть ли данные в порту иначе зависнем до появления данных. Это не всегда допустимо.
Я не нашел простого способа проверки. Вместо этого у меня используется таймаут: задаете 0 миллисекунд и если буфер пуст, получаете 0 или -1 в качестве результата, либо просто число реально считанных байт, если буфер не пуст.
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,113
Записей в блоге: 6
28.05.2020, 13:14 9
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Я не нашел простого способа проверки.
В винде используется ClearCommError которая заполняет структуру COMSTAT имеющую поля cbInQue и cbOutQue в которых число байт в входном и выходном буфере порта.
Что используется в лине и маке не знаю - нечем дизассемблировать функцию AvailableSerialPortInput() под эти платформы.
0
2512 / 1557 / 335
Регистрация: 09.09.2017
Сообщений: 6,265
28.05.2020, 17:36 10
Спасибо за подсказку, но вряд ли воспользуюсь. На практике гораздо чаще встречаются задачи считать ровно Х байт, то есть нужна скорее проверка накопилось ли столько в системном буфере. Если же выбирать из чтения с нулевым таймаутом и проверки наличия байта, первым способом оно реализовывается немного проще.
Вторая задача - чтение строки до символа '\n', тут тоже нужна своя абстракция вокруг низкоуровневых методов, причем сравнимая в обоих случаях.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2020, 17:36

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как считать данные с LPT порта?
Как считать данные с LPT порта?

Как в C++ builder считать данные с COM порта ?
Считываю данные с com порта в консольном проекте все отлично работает!. Но при использовании в...

Как считать данные с СОМ порта
Повторюсь: Народ, как вообще открыть компорт для считывания данных (без коннекта с чем то)и...

Файл: Считать данные из текстового файла и записать их в другой файл, заданный пользователем...
Доброго времени суток. Выполняя задание по программированию столкнулся с проблемой. Необходимо...

Файл: записать в файл данные и считать из него в MessageBox
Здравствуйте, возникла проблема. Надо записать в файл данные и считать с него в MEssageBox. У...

Класс "Комплексное число". Как считать и записать данные в файл?
Надо переделать код программы, чтобы данные шли из входного файла и записывались в выходной Во...


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

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

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