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

 
 
> STM32F051K8 передача данных с UART1 на UART2 и обратно, мост между UART-ами
Alla_student
сообщение Aug 13 2016, 07:18
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 5-04-11
Пользователь №: 64 146



Здравствуй All!

Необходимо написать программную поддержку передачи данных между встроенными портами UART1 и UART2 STM32F051.

Алгоритм такой:
1. Прием данных с порта UART1 микроконтроллера, он подключен к PC, который всегда является мастером и запрашивает данные с устройства, которое подключено к порту UART2 микроконтроллера.
2. Загрузка принятых данных с UART1 в буфер1 256 байт, принятый пакет всегда меньше.
3. Передача данных из буфера1 в UART2.
4. Ожидание ответа внешнего устройства подключенного к UART2, и после получение данных в другой буфер2, то же 256 байт, иначе выход по таймауту 10 сек.
5. Передача данных из буфера2 в UART1 в сторону PC.

PS: Скорость передачи на портах UART1 и UART2 разная!

Я понимаю, что надо использовать прерывания, но запуталась с флагами, и пока ничего рабочего не получается. С DMA просто боюсь связываться.
В конференциях аналогичного ничего рабочего не нашла.
Буду признательна, если кто нибудь объяснит и даст пример рабочего кода для этой задачи.

С уважением. Вечный студент Алла.

Сообщение отредактировал Alla_student - Aug 14 2016, 05:34
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adnega
сообщение Aug 14 2016, 06:55
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Я бы сделал реализацию кольцевого FIFO-буфера. Создал бы два экземпляра - на прием и на передачу.
Далее все просто:
1. При приеме символов из UART1 помещал бы их в первый буфер.
2. При приеме символов из UART2 помещал бы их во второй буфер.
3. При наличии символов в первом буфере и готовности передатчика UART2 выбирал бы их оттуда и записывал в UART2.
4. При наличии символов во втором буфере и готовности передатчика UART1 выбирал бы их оттуда и записывал в UART1.

Пример реализации кольцевого FIFO-буфера:
CODE
//-----------------------------------------------------------------------------
// void sp_tx_push(sSERIAL_PORT *port, const BYTE x)
//-----------------------------------------------------------------------------
void sp_tx_push(sSERIAL_PORT *port, const BYTE x)
{
int tmp_t;
port->tx_buf[port->tx_t] = x;
tmp_t = port->tx_t + 1;
if(tmp_t >= port->tx_size) tmp_t -= port->tx_size;
if(tmp_t != port->tx_b) port->tx_t = tmp_t;
}

//-----------------------------------------------------------------------------
// BYTE sp_tx_pop(sSERIAL_PORT *port)
//-----------------------------------------------------------------------------
BYTE sp_tx_pop(sSERIAL_PORT *port)
{
BYTE x;
if(port->tx_b == port->tx_t) return 0;
x = port->tx_buf[port->tx_b];
port->tx_buf[port->tx_b++] = 0;
if(port->tx_b >= port->tx_size) port->tx_b -= port->tx_size;
return x;
}


Опрос флагов UART, запись и чтение регистра данных UART, инициализация UART - тривиально.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alla_student   STM32F051K8 передача данных с UART1 на UART2 и обратно   Aug 13 2016, 07:18
- - RabidRabbit   По-моему, с таким алгоритмом и прерываний не требу...   Aug 13 2016, 18:54
|- - toweroff   Цитата(RabidRabbit @ Aug 13 2016, 21:54) ...   Aug 13 2016, 20:26
||- - TSerg   Цитата(toweroff @ Aug 13 2016, 23:26) ну ...   Aug 13 2016, 20:29
|- - Alla_student   Цитата(RabidRabbit @ Aug 13 2016, 22:54) ...   Aug 14 2016, 05:32
- - x893   Алгоритм работы раскрыт не полностью. 1. Что проис...   Aug 14 2016, 08:35
|- - Alla_student   Цитата(x893 @ Aug 14 2016, 12:35) Алгорит...   Aug 14 2016, 15:30
|- - RabidRabbit   Цитата(Alla_student @ Aug 14 2016, 19:30)...   Aug 14 2016, 16:36
|- - adnega   Цитата(RabidRabbit @ Aug 14 2016, 19:36) ...   Aug 14 2016, 17:00
|- - Alla_student   Цитата(adnega @ Aug 14 2016, 21:00) Т.к. ...   Aug 14 2016, 20:33
|- - adnega   Цитата(Alla_student @ Aug 14 2016, 23:33)...   Aug 14 2016, 22:35
|- - Alla_student   Цитата(adnega @ Aug 15 2016, 01:35) Обычн...   Aug 16 2016, 06:32
|- - adnega   Цитата(Alla_student @ Aug 16 2016, 09:32)...   Aug 16 2016, 08:19
- - RabidRabbit   Цитата(adnega)Т.к. скорости разные, то предположим...   Aug 14 2016, 17:28
|- - adnega   Цитата(RabidRabbit @ Aug 14 2016, 20:28) ...   Aug 14 2016, 18:08
- - x893   Доктору без анализов трудно помочь больному. Так ж...   Aug 16 2016, 10:18


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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 01:52
Рейтинг@Mail.ru


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