Доброе время суток уважаемые.
Опять вопрос, про избитое, но он меня в тупик поставил…
Использую ATMega2560 (описание платы здесь
http://electronix.ru/forum/index.php?showtopic=44112&hl= ).
При использовании UART1 (преобразователь CP2102) принимаю и отправляю строку по такому коду, см.ниже, (немного переработанный код из примера 2UARTLCD). Все гуд, работает корректно. На других UARTах стоит блютуз модуль UARTDNG105 (радиоудлинитель 232ого висит на UART2), RS-232 (MAX2323 на UART3), приемопередатчики на 433МГц (RXM-433LR, TXM-433LR+ANT433-SP, по 2 штуки висят на UART2,3) все размыкается переключателями.
Проблема в том, что код корректно работающий для CP2102 (UART1), не работает на других UARTах. Точнее так. Блютуз модуль отсылает строки корректно, но при принятии строки и отсылки ее обратно, принимается 2605(как строка), независимо от того сколько байт я послал в мк 1 или 10… Причем если смотреть количество принятых байтов (rx_counter1), то счетчик адекватен (показывает что принято столько, сколько послано…).
При использовании RS-232 то же самое, отсылается нормально, счетчик адекватен, но при отсылки принятой строки получаю 2605.
При использовании 433МГц один работает на прием, другой на передачу, сигнал у приемника нормальный, мощность передатчика тоже задана. Получаю опять 2605, счетчик адекватен.
Повторюсь, вывод данных из Меги нормально проходит, прием в буфер меги тоже, видимо засада в чтении из буфера меги в строку UART_reciver_buffer.
При использовании getchar, putchar принимается <0>.
Соответственно, думаю заморочка в использовании команды gets(UART_reciver_buffer,rx_counter1);
char UART_reciver_buffer[100]; //буфер для приема с UART
………
………
poutput=USART1;
if (rx_counter1!=0) //Если счетчик принятого не пуст
{
delay_ms(100); //Ждем пока все запишется в буфер приемника gets(UART_reciver_buffer,rx_counter1); //Читаем строку, длинна определяется с помошью счетчика принятых данных.
printf("%s\r\n",UART_reciver_buffer); //Вывод принятой строки на UART
}
Но где здесь ошибка не уразумею, или я не прав?
Подскажите в каком направлении копать?