-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128

При передачи через UART данные разбиваются по 32 байта

24.10.2025, 10:30. Показов 610. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый день. Столкнулся с проблемой.
С МК STM32F4 через преобразователь интерфейсов UART -> USB CH340 передаю массив из 73 байт включая символ '\n' на ПК и данные обрабатываю в своей программе. Почему то МК разбивает этот массив ровно по 32 байта и между ними втыкает временный интервал хотя этот массив отсылаю через uart не прерывно. Хорошо бы если можно было бы задавать интервал времени между входящими байтам в public class SerialPort : System.ComponentModel.Component при инициализации COM порта в C#.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void TX_UART(UART_HandleTypeDef *uart, char *str_dat)
{
    cout_uart = strlen(str_dat);
    for(uint8_t k = 0; k < cout_uart; k++)
    {
        while(!(huart1.Instance->SR & USART_SR_TC)){;}
         tmp = huart1.Instance->SR;
        uart->Instance->DR = (uint8_t)str_dat[k];
    }
}
 
int main(void)
{
TX_UART(&huart1, ":2222222222222222222222222222222222AAAAAAAAAAAAAAAAAAAAAAAAA33333333333:\n");
}

Кусок кода C# по приёму массива
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
public void COMport_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (COMport != null)
            {
                if (COMport.BytesToRead != 0)         //Проверка на пустой буфер обязательное условие иначе приём данных будет работать не корректно
                {
                    
                    try { Variables.line_read = COMport.Read(Variables.data_read_byte, 0, Variables.data_read_byte.Length); }
                    catch (Exception ex) { return; }
 
                    /*try { str = COMport.ReadExisting(); }
                    catch (Exception ex) { return; }*/
 
 
                    try { BeginInvoke(new ClassDeleg.DataReceivedDeleg(DataReceivedCOM), Variables.data_read_byte, str, Variables.line_read); }
                    catch (Exception ex) { return; }
 
                }
                else if (COMport.BytesToRead == 0)  //счетчик пустых пакетов обязательное условие на корректную работу по приёму
                {
                    Variables.cout_zero_pack++;
                    
                    return;
                }
            }
            else if (COMport == null)
                ScrollableList("listBox1", "ИНФОРМАЦИЯ - Приём данных: (SerialPortCOM) имеет значение NULL");
 
        }
        string[] str_tmp = new string[255];
        int cout = 0;
        public byte DataReceivedCOM(byte[] DataReceived, string str, int line_read)
        {
           Encoding  encDefault = Encoding.Default;
            ScrollableList("listBox1", "Получено из порта " + COMport.PortName.ToString() + "-->> " + encDefault.GetString(DataReceived));
            COMport.DiscardInBuffer();
            Array.Clear(DataReceived, 0, line_read);
            return 255;
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.10.2025, 10:30
Ответы с готовыми решениями:

STM32F4 ADC + DMA при передачи 1 байта входит в прерывания через 1 бит
Доброго времени - столкнулся с проблемкой Синий луч - данные Желтый луч - строб Красный луч...

прием байта с UART ATtiny2313
Делаю вот что: #define F_CPU 8000000UL #include &lt;avr/io.h&gt; #define baud 51 // параметр...

UART загружает только 4 байта
На базе PIC24, Пытаюсь организовать загрузку из ESPданных через UART , ,отправляемых на AT-команды...

12
Эксперт .NET
 Аватар для Rius
12876 / 7539 / 1652
Регистрация: 25.05.2015
Сообщений: 22,910
Записей в блоге: 14
24.10.2025, 10:33
Цитата Сообщение от MechanicVV Посмотреть сообщение
Почему то МК разбивает этот массив ровно по 32 байта
Вы уверены, что именно STM32, а не USB-UART мост или его драйвер?
Есть подтверждение осциллографом/лог.анализатором?
0
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128
24.10.2025, 10:41  [ТС]
Rius, Точно надо бы проверить лог. анализатором. СПС за подсказку. Фигово будет если это CH340 делает такую бяку.
0
Эксперт .NET
 Аватар для Rius
12876 / 7539 / 1652
Регистрация: 25.05.2015
Сообщений: 22,910
Записей в блоге: 14
24.10.2025, 11:01
Это не бяка, а буфер, с ним надо уметь жить.

https://github.com/felHR85/UsbSerial/issues/94

Добавлено через 2 минуты
SO (ссылки запрещены):
LX08H whit chip CH341 only receive when buffer contains 32 bytes

My problem is that when I use serial in LX08H, I only read data when 32 bytes have been sent, if more than 32 are sent, only the first 32 are received and the rest are left in some buffer until 32 bytes are completed. How can I receive bytes one at a time?
Добавлено через 7 минут
Для полноты картины опробуйте мосты FTDI, Prolific, Silabs. Возможно, для вашего случая иной мост подойдёт лучше.
1
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128
24.10.2025, 11:01  [ТС]
Rius, всё вопрос решён. Да верно это гадкий CH340 разбивает по 32 байта. Попробовал через Virtual COM Port USB тот что в самом МК без проблем вся строка приходит без задержек.
0
Эксперт .NET
 Аватар для Rius
12876 / 7539 / 1652
Регистрация: 25.05.2015
Сообщений: 22,910
Записей в блоге: 14
24.10.2025, 11:03
Virtual COM Port USB
Это что за зверь? Смотрите на используемый в нём чип.
0
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128
24.10.2025, 11:07  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Это что за зверь?
Это программное решение от HAL. Эмуляция COM порта через USB в STM32.
0
Эксперт .NET
 Аватар для Rius
12876 / 7539 / 1652
Регистрация: 25.05.2015
Сообщений: 22,910
Записей в блоге: 14
24.10.2025, 11:12
А, STM32 USB CDC.
Там, помнится, используется стандартный драйвер винды.
У него другие, свои приколы.
0
58 / 183 / 31
Регистрация: 14.02.2013
Сообщений: 1,639
24.10.2025, 19:54
Цитата Сообщение от Rius Посмотреть сообщение
У него другие, свои приколы.
Очень много жрёт ROM, больше вроде не замечено.
0
Эксперт .NET
 Аватар для Rius
12876 / 7539 / 1652
Регистрация: 25.05.2015
Сообщений: 22,910
Записей в блоге: 14
24.10.2025, 20:07
Не пойму как очистить массив строк
0
58 / 183 / 31
Регистрация: 14.02.2013
Сообщений: 1,639
24.10.2025, 20:10
Цитата Сообщение от Rius Посмотреть сообщение
Не пойму как очистить массив строк
Если это не стёб то вопрос решён.
0
312 / 70 / 5
Регистрация: 19.07.2024
Сообщений: 369
04.11.2025, 11:55
Цитата Сообщение от Rius Посмотреть сообщение
Для полноты картины опробуйте мосты FTDI, Prolific, Silabs. Возможно, для вашего случая иной мост подойдёт лучше.
Любой USB-UART передаёт пакетно. Иначе невозможно, так как USB - пакетный интерфейс.
Макс. размер пакета можно посмотреть в USB-дескрипторе переходника.

Нужно код писать так, чтобы это не влияло на его работоспособность через USB-UART.
0
58 / 183 / 31
Регистрация: 14.02.2013
Сообщений: 1,639
04.11.2025, 20:59
Цитата Сообщение от jcxz Посмотреть сообщение
Нужно код писать так, чтобы это не влияло на его работоспособность через USB-UART.
Да это я понял и написал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.11.2025, 20:59
Помогаю со студенческими работами здесь

Передача 4 байт по UART через прерывание
Пробую передать четыре байта по UART из прерывания. При первой попытки байты передаются нормально...

Прием и передача серии байт по UART
while(USORT_GetFlagStatus(USORT1, USORT_FLAG_RXNE) == RESIT); tmp = USORT_ReceiveData( USORT1 );...

передача по UART 8 байт
Добрый день всем! Задача такая: - передать 8 байт в контроллер - распределить по регистрам -...

Сообщения для 2 UART выводятся в 1 UART, STM32F103C8T6
Почему может неправильно работать uart? Подключил 1 uart к пк через usb/uart переходник, а второй к...

UART<->UART
Всем доброго времени суток! Есть два модуля - Ble-модуль на STM32WB55 и центральный модуль на...


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

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

Новые блоги и статьи
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Javaican 05.11.2025
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала. . .
Mapped types (отображённые типы) в TypeScript
Reangularity 03.11.2025
Mapped types работают как конвейер - берут существующую структуру и производят новую по заданным правилам. Меняют модификаторы свойств, трансформируют значения, фильтруют ключи. Один раз описал. . .
Адаптивная случайность в Unity: динамические вероятности для улучшения игрового дизайна
GameUnited 02.11.2025
Мой знакомый геймдизайнер потерял двадцать процентов активной аудитории за неделю. А виновником оказался обычный генератор псевдослучайных чисел. Казалось бы - добавил в карточную игру случайное. . .
Протоколы в Python
py-thonny 31.10.2025
Традиционная утиная типизация работает просто: попробовал вызвать метод, получилось - отлично, не получилось - упал с ошибкой в рантайме. Протоколы добавляют сюда проверку на этапе статического. . .
C++26: Read-copy-update (RCU)
bytestream 30.10.2025
Прошло почти двадцать лет с тех пор, как производители процессоров отказались от гонки мегагерц и перешли на многоядерность. И знаете что? Мы до сих пор спотыкаемся о те же грабли. Каждый раз, когда. . .
Изображения webp на старых x32 ОС Windows XP и Windows 7
Argus19 30.10.2025
Изображения webp на старых x32 ОС Windows XP и Windows 7 Чтобы решить задачу, использовал интернет: поисковики Google и Yandex, а также подсказки Deep Seek. Как оказалось, чтобы создать. . .
Passkey в ASP.NET Core identity
stackOverflow 29.10.2025
Пароли мертвы. Нет, серьезно - я повторяю это уже лет пять, но теперь впервые за это время чувствую, что это не просто красивые слова. В . NET 10 команда Microsoft внедрила поддержку Passkey прямо в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru