STM32 STM32VL Discovery STM32F100RBT6 (урок 9) USART, практика

| 19.03.2016

STM32 STM32VL Discovery STM32F100RBT6 (урок 9) USART, практика

Main

Общее
USART – Универсальный синхронный – асинхронный приемопередатчик. Это узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. Преобразует передаваемые данные в последовательный вид так, чтобы было возможно передать их по цифровой линии другому аналогичному устройству. Метод преобразования хорошо стандартизован и широко применяется в компьютерной технике.

Передача данных в UART осуществляется по одному биту в равные промежутки времени. Этот временной промежуток определяется заданной скоростью UART и для конкретного соединения указывается в бодах (что в данном случае соответствует битам в секунду). Существует общепринятый ряд стандартных скоростей: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400; 460800; 921600 бод. Скорость (S, бод) и длительность бита (T, секунд) связаны соотношением T = 1/S . Скорость в бодах иногда называют сленговым словом битрейт.
Помимо собственно информационного потока, UART автоматически вставляет в поток синхронизирующие метки, так называемые стартовый и стоповый биты. При приёме эти лишние биты удаляются из потока. Обычно стартовый и стоповый биты обрамляют один байт информации (8 бит), однако встречаются реализации UART, которые позволяют передавать по 5, 6, 7, 8 или 9 бит. Обрамленные стартом и стопом биты являются минимальной посылкой. Некоторые реализации UART позволяют вставлять два стоповых бита при передаче для уменьшения вероятности рассинхронизации приёмника и передатчика при плотном трафике. Приёмник игнорирует второй стоповый бит, воспринимая его как короткую паузу на линии.

Принято соглашение, что пассивным (в отсутствие потока данных) состоянием входа и выхода UART является логическая 1. Стартовый бит всегда логический 0, поэтому приёмник UART ждёт перепада из 1 в 0 и отсчитывает от него временной промежуток в половину длительности бита (середина передачи стартового бита). Если в этот момент на входе всё ещё 0, то запускается процесс приёма минимальной посылки. Для этого приёмник отсчитывает 9 битовых длительностей подряд (для 8-битных данных) и в каждый момент фиксирует состояние входа. Первые 8 значений являются принятыми данными, последнее значение проверочное (стоп-бит). Значение стоп-бита всегда 1, если реально принятое значение иное, UART фиксирует ошибку.

Для формирования временных интервалов передающий и приёмный UART имеют источник точного времени (тактирования). Точность этого источника должна быть такой, чтобы сумма погрешностей (приёмника и передатчика) установки временного интервала от начала стартового импульса до середины стопового импульса не превышала половины (а лучше хотя бы четверти) битового интервала. Для 8-битной посылки 0,5/9,5 = 5 % (в реальности не более 3 %). Поскольку эта сумма ошибок приёмника и передатчика плюс возможные искажения сигнала в линии, то рекомендуемый допуск на точность тактирования UART — не более 1,5 %.
Поскольку синхронизирующие биты занимают часть битового потока, то результирующая пропускная способность UART не равна скорости соединения. Например, для 8-битных посылок формата 8-N-1синхронизирующие биты занимают 20 % потока, что для физической скорости 115 200 бод даёт битовую скорость данных 92 160 бит/с или 11 520 байт/с.

Устройство USARTUSART_Hardware_flow_control_between_two_USARTs

Для обеспечения связи устройств по USART, у нас есть ряд ножек с зарезервированными именами и стандартизированным функционалом.
Tx – Передача данных (ножка передатчика)
По этой линии мы отправляем данные от передающего устройства в принимающее. Из этого следует, что эту ножку необходимо соединить с ножкой Rx на принимающей стороне.
Rx – Прием данных (ножка приемника)
По этой линии мы принимаем данные от передающего устройства. Из этого следует, что эту ножку необходимо соединить с ножкой Tx на отправляющей стороне.
Ck – Синхронизация передачи данных (ножка синхронизации)
Эта ножка нужна для обеспечения синхронной передачи данных. Во время передачи данных, передатчик помимо формирования данных на ножке Tx формирует на ножке Ck стробы синхронизации, нужные для определения моментов, когда приемнику следует считывать данные. Таким образом управление ножкой Ck это работа передатчика, а у приемника эта ножка является входом.
RTS – Request To Send (запрос передачи)(ножка разрешения передачи данных)
Дело в том, что внутреннее устройство подключаемого нами устройства по UART может быть не всегда точно известно. И вполне вероятна ситуация что входной буфер приемника заполнился и принимать уже ничего не может, так как в данный момент хранить данные не где. Для того, чтобы приемник имел возможность сказать передающему устройству : стой!, подожди!, не надо мне слать данные!, нужна эта ножка RTS у приемника, а у передатчика соответственно есть ножка которая называется CTS, которая является входом и соединяется с RTS. Таким образом, передатчик прежде чем передать данные смотрит на ножку RTS приемника, но так как она должна быть соединена с входом передатчика CST, то можно сказать, что происходит опрос состояния входа CST передатчика.
CST - Clear To Send (очищен для передачи)
Собственно вход передатчика, на который необходимо подключить выход передатчика RTS. Если подключенное устройство не выставит на этом входе сигнал готовности приема данных, то передача не начнется.

Где USART в нашем MK (STM32F100RBT6) ?
В нашем микроконтроллере есть несколько USART. USART1 – находится на шине APB2, а два других USART2 и USART3 на шине APB1. В других микроконтроллерах серии можно встретить большее число USART, но можно обнаружить, что у некоторых будет урезанный функционал.USART_mode_configuration
Глядя на картинку ниже, можно определить, какие ножки определенного USART на каком порту находятся. Необходимо не забывать про возможность ремапа, то есть изменение ножки, которую может взять под контроль блок USART.USART_PinsDiscr

USART Примеры
Общее : Мы хотим настроить первый USART в составе микроконтроллера, для передачи данных. У нас есть ПК и преобразователь FTDI + терминальная программа, значит с одной стороны все готово. Для USART в составе микроконтроллера нам надо найти ножки для подключения соответственно к FTDI + не забыть, что земля должна быть общей. Программы написаны с использованием стандартных библиотек, что может быть странным, ведь мы в первой части учили регистры и их биты, но как бы на прямую не используем их. Тут возникает вопрос ведь можно было бы изучать ф-ии стандартной библиотеки и на основе их знать на что способен USART stm32 и как его настроить. Но я считаю такой подход верным, так как изучение регистров есть самое близкое из возможно необходимого расстояния, на которое мы можем подобраться к реальным процессам, протекающим в МК. 

Progect 1 – USART  постоянно отправляет  переменную, которая увеличивается на единичку.
Progect 2 - USART  принимает что-то и это же шлет назад.

Ссылки на комплектующие:
Отладочная плата: STM32VL Discovery (ссылка)
Микроконтроллер: STM32F100RBT6 (
ссылка)
Провод USB :  (ссылка)
Преобразователь USB-UART : FTDI (ссылка)

Макетная плата: (ссылка)
Блок питания на 12V (ссылка)
Преобразователь 12V  в  3,3/5V (ссылка)
Перемычки для макетной платы (ссылка)

Скачать проекты(ссылка)

Progect 1 

Progect 2

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *