|
потеря данных при передаче через UART |
|
|
|
Mar 16 2016, 11:23
|
Группа: Новичок
Сообщений: 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
|
|
|
|
Сообщений в этой теме
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 ViKo 24 Мвыб/с в одноканальном режиме - не впечатляет, ... Mar 18 2016, 14:03 Ruslan1 Цитата(ViKo @ Mar 18 2016, 17:03) 24 Мвыб... Mar 18 2016, 22:06  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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|