реклама на сайте
подробности

 
 
> потеря данных при передаче через UART
Andrey_C
сообщение Mar 16 2016, 11:23
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 16-03-16
Пользователь №: 90 882



Добрый день! Помогите пожалуйста разобраться в следующем:

С микроконтроллера на внешнее устройство через UART с частотой около 2 Гц уходят наборы управляющих команд. Общий объем данных в одном наборе около 1500 байт.
При передаче происходит потеря данных, например: из этих 1500 байт может сначала послать сколько-то байт данных, потом сколько нибудь пропустит и дослать оставшиеся ;
либо может передать часть данных,и начать передавать набор с начала.
сначала отключил все прерывания(изначально отправлялось по таймеру), убрал все вызовы функций опроса датчиков,клавиатуры.
В итоге просто запихал все в массив,который обхожу в цикле и все равно что-то не получается локализовать причину такого поведения программы.
Заранее благодарю.
код прилагаю:

CODE

#include "stm32f10x.h"
#include <stdio.h>
#include <string.h>
char KUKU[]="GR SF 1\r\nGR T 20 0 x1\r\nGR SC WHITE\r\nGR L 408 270 408 200 0\r\nGR L 408 290 408 310 0\r\n\
GR L 408 310 408 360 1\r\nGR L 398 280 378 280 0\r\nGR L 378 280 328 280 1\r\nGR L 418 280 438 280 0\r\nGR L 438 280 488 280 1\r\n\
GR SC WHITE\r\nGR R 670 1 760 46 1\r\nGR B 660 11 670 36\r\nGR B 680 5 760 42\r\nGR SF 1\r\nGR T 20 550 -60°C\r\nGR SF 1\r\n\
GR T 300 550 Азимут: -1°\r\nGR SC WHITE\r\nGR L 20 416 31 433 0\r\nGR L 31 433 42 444 0\r\nGR L 42 444 53 452 0\r\n\
GR L 53 452 64 458 0\r\nGR L 64 458 75 463 0\r\nGR L 75 463 86 466 0\r\nGR L 86 466 97 469 0\r\nGR L 97 469 108 472 0\r\n\
GR L 108 472 119 474 0\r\nGR L 119 474 130 476 0\r\nGR L 130 476 141 478 0\r\nGR L 141 478 152 479 0\r\nGR L 152 479 163 480 0\r\n\
GR L 163 480 174 481 0\r\nGR L 174 481 185 483 0\r\nGR L 185 483 196 485 0\r\nGR L 196 485 207 486 0\r\nGR L 207 486 218 487 0\r\n\
GR L 218 487 229 488 0\r\nGR L 229 488 240 489 0\r\nGR L 240 489 251 489 0\r\nGR L 251 489 262 490 0\r\nGR L 262 490 273 491 0\r\n\
GR L 273 491 284 491 0\r\nGR L 284 491 295 492 0\r\nGR L 20 500 295 500 0\r\nGR SF 0\r\nGR L 20 500 20 505 0\r\nGR T 20 507 1\r\n\
GR L 64 500 64 505 0\r\nGR T 64 507 2\r\nGR L 108 500 108 505 0\r\nGR T 108 507 3\r\nGR L 152 500 152 505 0\r\nGR T 152 507 4\r\n\
GR L 185 500 185 505 0\r\nGR T 185 507 5\r\nGR L 207 500 207 505 0\r\nGR T 207 507 6\r\nGR L 229 500 229 505 0\r\nGR T 229 507 7\r\n\
GR L 251 500 251 505 0\r\nGR T 251 507 8\r\nGR L 273 500 273 505 0\r\nGR T 273 507 9\r\nGR L 295 500 295 505 0\r\nGR T 295 507 10\r\n\
GR SC WHITE\r\nGR C 700 500 50 0\r\nGR L 700 500 699 450\r\nGR SF 1\r\nGR T 691 450 c\r\nGR T 691 525 ю\r\nGR T 730 486 в\r\nGR T 655 486 з\r\nGR D\r\n";


void UART1_Send(char *ch);
void Init_all(void);
void TfmInit(void);
void cmd_delay(void);

int main(void)
{
volatile uint32_t i;

__enable_irq();
//инициализация процессора
Init_all();
//Инициализация модуля
TfmInit();

while (1)
{
for(i=0;i<0x28676C;i++);//тупим
UART1_Send(KUKU);
cmd_delay();

}
}


void TfmInit(void)
{
volatile uint32_t i;
for(i=0;i<0x1ffffff;i++);//пауза-ждем инициализации внешнего устройства
UART1_Send ("GR D\r\n");//
cmd_delay();
UART1_Send ("GR CS\r\n");//
cmd_delay();
UART1_Send ("GR D\r\n");//
cmd_delay();
UART1_Send("D SET REG 19 0\r\n");//
cmd_delay();
UART1_Send("D SET REG 17 0\r\n");//
cmd_delay();
UART1_Send("D SET REG 20 0\r\n");//
cmd_delay();
UART1_Send("D SET REG 18 0\r\n");//
cmd_delay();
UART1_Send("D SET REG 4 215\r\n");//
cmd_delay();

}

void UART1_Send(char *ch)
{
unsigned int len,i;
char *p = ch;


while (*p)
{
while( (USART1->SR & USART_SR_TXE) == 0);

USART1->DR = *p; p++;

}
while((USART1->SR & USART_SR_TC) == 0);
USART1->SR &= ~USART_SR_TC;
}

void cmd_delay(void)
{
volatile int delay;
delay=0x7ff;
while(delay!=0)delay--;

}

void Init_all(void)
{

GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

///////////////////////////////////////////////////////////////////////////////////////////
// INIT PERIPHERAL CLOCK
///////////////////////////////////////////////////////////////////////////////////////////
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);



///////////////////////////////////////////////////////////////////////////////////////////
// PORTA 9:10 RxTx USART1
///////////////////////////////////////////////////////////////////////////////////////////
/* Configure USART1 Rx as input floating */
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
// GPIO_Init(GPIOA, &GPIO_InitStructure);


/* Configure USART1 Tx as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
///////////////////////////////////////////////////////////////////////////////////////////
// - BaudRate = 57600 baud
// - Word Length = 8 Bits
// - One Stop Bit
// - no parity
// - Hardware flow control disabled (RTS and CTS signals)
// - Receive and transmit enabled
//
///////////////////////////////////////////////////////////////////////////////////////////
USART_InitStructure.USART_BaudRate = 57600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx;

/* Configure USART1 */
USART_Init(USART1, &USART_InitStructure);

USART_Cmd(USART1, ENABLE);

}


Сообщение отредактировал Andrey_C - Mar 16 2016, 11:25
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Mar 18 2016, 14:03
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



24 Мвыб/с в одноканальном режиме - не впечатляет, USB уже не посмотришь. Хотя, по соотношению цена/качество хорош. Как игрушке, не нарадуешься. Сам не имею, надо купить, думаю.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Mar 18 2016, 22:06
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(ViKo @ Mar 18 2016, 17:03) *
24 Мвыб/с в одноканальном режиме - не впечатляет, USB уже не посмотришь. Хотя, по соотношению цена/качество хорош. Как игрушке, не нарадуешься. Сам не имею, надо купить, думаю.

Это не игрушка, а действительно очень качественный продукт с очень качественным софтом (понятно, что китайцы тут не причем- они дешевого клона сделали).
само собой, им езернет и юсб наблюдать не получится, и еще много чего не получится.
Но вот все низкочастотное, начиная с USART и I2C и заканчивая низкоскоростными SPI (несколько мегагерц) - отлично. Причем главное- в софте, он действительно отличный, с автоматическим декодированием протоколов (SPI, UART, I2C- показывает и байты тоже, а не только уровни).

Незаменимая штука если ошибка нерегулярная, а спать хочется. Я на нем как-то 8-канальный логгер "собрал" за 10 минут, оставил на выходные, а в понедельник уже разбирался, кто когда что передал, с полной синхронизацией между каналами, он очень длинные файлы умеет делать (Сейчас глянул- два мегасемпла по 8 каналам может больше пяти дней собирать). Но я больше чем на три дня не оставлял, и семплировал поменьше.

Цитата(Сергей Борщ @ Mar 18 2016, 16:43) *
Ссылку на самый достойный из дешевых лог. анализаторов на Али кто-нибудь подскажет?

Они все- Saleae logic. Если предлагают что-то с другим софтом- не советую, должно быть 24MHz совместимое с saleae (китайцы часто это название фирмы-разработчика не упоминают в описании лота, только по картинкам софта ниже в описании можно понять что это оно).
недавно покупал 16-каналку от того же разработчика, 28 зеленых, еще в продаже
а 8-каналки на али давно покупал, ссылки уже не работают.
они все выглядят как этот или этот

обязательно купите нормальные захваты, это еще 2 бакса за десяток щупов с проводами (8 каналов + 2 земляных)

Кстати, оригинал уже "прокачали" до 100 мегасемплов и даже до 500, надо же с китайскими копипастерами конкурировать sm.gif
ViKo, это специально для Вас, обещают даже декодирование нужного USB. Если цена оригинала не смущает (600 угадайте чего) sm.gif
Цитата
Sixteen digital inputs, sixteen analog inputs (shared with digital channels)
Maximum Sample Rates Digital: 500 MSPS @ 4 channels, 100 MSPS @ 16 channels (USB 3.0 required)
Analog: 50 MSPS @ 3 channels, 12.5 MSPS @ 13 channels, 6.25 MSPS @ 16 channel
Bandwidth Digital: 100 MHz square wave when sampling at 500 MSPS
Analog: 5 MHz when sampling at 50 MSPS
Trigger Edge or pulse width trigger
Software Cross-platform Windows, Mac and Linux support
Supported Protocols Serial, SPI, I2C, Atmel SWI, Biss-C, CAN, DMX-512, HD44780, HDLC, I2S, JTAG, LIN, MDIO, MIDI, Manchester, Modbus, 1-Wire, PS/2 Keyboard & Mouse, SMBus, SWD, Synchronous Parallel, USB, UNI/O

Но там хитрости с буферизацией, мне кажется что они эти сотни мегасемпл буферизируют, соответственно терабайт записать не смогут.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Andrey_C   потеря данных при передаче через UART   Mar 16 2016, 11:23
- - KRS   Попробуйте для начала скорость UART уменьшить, нап...   Mar 16 2016, 11:45
- - Andrey_C   Сейчас попробую, а можете объяснить взаимосвязь? ...   Mar 16 2016, 12:09
|- - KRS   Цитата(Andrey_C @ Mar 16 2016, 15:09) Сей...   Mar 17 2016, 07:56
- - SasaVitebsk   Терминал может некоторые символы проглатывать. Счи...   Mar 16 2016, 13:12
- - Andrey_C   Спасибо за ответ! Управление потоком естествен...   Mar 16 2016, 13:22
- - alag57   Цитата(Andrey_C @ Mar 16 2016, 16:23) Код...   Mar 16 2016, 14:24
|- - scifi   Цитата(alag57 @ Mar 16 2016, 17:24) Когда...   Mar 16 2016, 14:29
|- - Kabdim   Цитата(alag57 @ Mar 16 2016, 17:24) Когда...   Mar 16 2016, 15:18
|- - alag57   Цитата(Kabdim @ Mar 16 2016, 20:18) 0 под...   Mar 16 2016, 18:07
- - Aaron   ЦитатаПри передаче происходит потеря данных, напри...   Mar 17 2016, 07:02
|- - jcxz   Цитата(Aaron @ Mar 17 2016, 13:02) Если э...   Mar 17 2016, 08:06
|- - Andrey_C   Цитата(jcxz @ Mar 17 2016, 11:06) Для иск...   Mar 17 2016, 14:10
|- - Ruslan1   Цитата(Andrey_C @ Mar 17 2016, 17:10) уже...   Mar 17 2016, 21:50
- - KRS   А у Вы вообще с UART ранее работали на таком желез...   Mar 17 2016, 08:21
- - esaulenka   Попробуйте другую FT232 (или какой-то другой адапт...   Mar 17 2016, 08:53
- - SasaVitebsk   Добавлю ещё одно, к сказанному Ruslan1. Вероятност...   Mar 18 2016, 06:44
- - ViKo   Прежде, чем искать программные косяки, убедитесь, ...   Mar 18 2016, 06:52
|- - Ruslan1   Цитата(ViKo @ Mar 18 2016, 09:52) Прежде,...   Mar 18 2016, 12:14
|- - rx3apf   Цитата(Ruslan1 @ Mar 18 2016, 15:14) Кста...   Mar 18 2016, 13:09
- - Сергей Борщ   Раз все кинулись оказывать моральную поддержку, по...   Mar 18 2016, 06:53
|- - Ruslan1   Цитата(Сергей Борщ @ Mar 18 2016, 09:53) ...   Mar 18 2016, 11:58
|- - Obam   Цитата(Ruslan1 @ Mar 18 2016, 15:58) Эх м...   Mar 18 2016, 12:07
|- - Сергей Борщ   Цитата(Ruslan1 @ Mar 18 2016, 13:58) Наск...   Mar 18 2016, 13:43
|- - Gorby   Цитата(Ruslan1 @ Mar 18 2016, 13:58) Эх м...   Apr 8 2016, 11:24
|- - Ruslan1   Цитата(Gorby @ Apr 8 2016, 14:24) Блин...   Apr 8 2016, 20:00
|- - SasaVitebsk   Цитата(Ruslan1 @ Apr 8 2016, 23:00) Я мно...   Apr 11 2016, 07:41
|- - AHTOXA   Это вам повезло просто. Вот, ознакомьтесь.   Apr 11 2016, 08:55
|- - Ruslan1   Цитата(AHTOXA @ Apr 11 2016, 11:55) Это в...   Apr 11 2016, 13:27
|- - AHTOXA   Цитата(Ruslan1 @ Apr 11 2016, 18:27) Если...   Apr 11 2016, 15:00
||- - Ruslan1   Цитата(AHTOXA @ Apr 11 2016, 18:00) Потом...   Apr 11 2016, 19:43
||- - AHTOXA   Цитата(Ruslan1 @ Apr 12 2016, 00:43) Если...   Apr 12 2016, 03:51
||- - Ruslan1   Цитата(AHTOXA @ Apr 12 2016, 06:51) У вас...   Apr 12 2016, 11:15
|- - KnightIgor   Цитата(Ruslan1 @ Apr 11 2016, 14:27) Но в...   Apr 12 2016, 10:33
||- - HardEgor   Цитата(Ruslan1 @ Mar 19 2016, 04:06) обяз...   Mar 19 2016, 11:41
|- - arhiv6   ЦитатаСсылку на самый достойный из дешевых лог. ан...   Mar 19 2016, 08:02
- - ViKo   Да, на официальном сайте я уже изучил вдоль и попе...   Mar 19 2016, 07:36
- - esaulenka   (раз уж взялись оффтопить...) Руслан, а как этот ...   Mar 19 2016, 08:49
- - PeterBr   Демонстрационный код работы USART STM32. Пример ко...   Apr 8 2016, 00:51
- - картошка   Если используешь FTDI и WIN7. Бросай FTDI в топку....   Apr 8 2016, 11:04


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 20:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.0143 секунд с 7
ELECTRONIX ©2004-2016