AVR для начинающих. Урок 9. UART.

Автор: | 20.09.2016

UART микроконтроллеров AVR.

Одним из самых распространенных протоколов взаимодействия микроконтроллера с внешними устройствами является UART(Universal Asynchronous Receiver-Transmitter) — Универсальный асинхронный приёмопередатчик. Данный протокол аппаратно реализован в большинстве микроконтроллеров AVR, что позволяет разработчику не вдаваться в особенности реализации данного интерфейса. Для его использования достаточно настроить всего несколько регистров!

Рассмотрим кратко принцип работы UART.

Данный протокол является последовательным, то есть данные идут строго друг за другом, что в некоторой мере ограничивает скорость работы. Так как протокол является асинхронным, приемник и передатчик должны работать строго на одной частоте, которую необходимо настроить ещё до начала работы.

При передаче байта передатчик изначально выставляет логический 0 на выводе TX(Transmitter). Это так называемый старт-бит, означающий начало передачи. После этого передатчик выставляет биты передаваемого байта через определенные промежутки времени, заданные частотой. Далее может быть передан бит четности, который служит для проверки качества передачи. Когда переданы все биты, выставляется стоп-бит, то есть логическая 1 на линии передачи. Число стоп-битов может быть различным:1; 1,5; 2.

Огромным плюсом данного интерфейса является возможность его использования для настройки связи с ПК. Для этого необходимо изготовить UARTRS232 или UARTUSB переходники, основанные на микросхемах MAX232 и FT232RL соответственно.

Подробнее о переходниках здесь.

За работу с UART(на самом деле USART, однако, для нас это сейчас не важно) отвечают следующие регистры:

UDR — Регистр данных UART. При передаче в него записываются данные, которые необходимо отправить, а при чтении — принятые данные. Всё просто.

UCSRA — Регистр контроля и статуса UART. Рассмотрим биты данного регистра подробнее:

  • RXC (Receive Complete) — флаг окончания приема данных. Устанавливается в 1 при наличии несчитанных данных и сбрасывается в 0 по окончании приема данных.
  • TXC (Transmit Complete) — флаг окончания передачи данных. Сбрасывается в 0 по окончании передачи данных и устанавливается в 1 при наличии непереданных данных.
  • UDRE (Data Register Empty) — флаг, означающий готовность регистра UDR получать новые данные. Когда UDRE равен 1, регистр UDR пуст и готов к приему новых данных.
  • FE (Frame Error)флаг ошибки фрейма.
  • DOR (Data OverRun) — флаг переполнения регистра данных.
  • PE (Parity Error)флаг ошибки четности
  • U2X — бит, позволяющий увеличить скорость передачи вдвое. При записи 1 в данный бит предделитель тактовой частоты модуля UART уменьшается вдвое, что позволяет вдвое увеличить скорость передачи данных.
  • MPCM мультипроцессорный режим коммуникации.

UCSRB Регистр контроля и статуса UART.

  • RXCIE (RX Complete Interrupt Enable) — Бит, разрешающий или запрещающий генерацию прерывания по окончании приема. При записи 1 в данный бит прерывание по окончании приема разрешено, при записи 0 — запрещено.
  • TXCIE (TX Complete Interrupt Enable) — При записи 1 в данный бит прерывание по окончании передачи данных разрешено, при записи 0 — запрещено.
  • UDRIE (Data register empty Interrupt Enable) — Бит, разрешающий или запрещающий возникновение прерывания по флагу UDRE.
  • RXEN (Reciever Enable) — Запись 1 в данный бит включает приемник UART модуля, запись 0 — выключает.
  • TXEN (Transmitter Enable) — Запись 1 в данный бит включает передатчик UART модуля, запись 0 — выключает.
  • UCSZ2 (Character Size) — В паре с битами UCSZ1 и UCSZ0 задает число передаваемых бит.То есть мы можем передавать не только побайтно, но и по 5,6,7,8,9 бит.
  • RXB8 (Receive Data Bit 8) — 9 бит принимаемых данных при передаче по 9 бит. Должен быть считан перед операциями с регистром UDR.
  • TXB8 (Transmit Data Bit 8) — 9 бит отсылаемых данных при передаче по 9 бит. Должен быть записан перед записью других бит в UDR.

UCSRС Регистр контроля и статуса UART.

  • URSEL(Register Select)— бит выбора между регистрами UCSRC и UBRRH. Слегка странный бит, однако, достаточно запомнить, что при записи в него 1, работа происходит с регистром UCSRC, а при записи 0 — с регистром UBRRH. То есть последующие биты будут записаны в соответствующий регистр.
  • UMSEL (Mode Select) — при записи 1 в данный бит происходит синхронная передача данных, а при записи 0 – асинхронная.
  • UPM0,UPM1 (Parity Mode) — Данные биты позволяют настроить контроль четности передаваемых данных.
  • USBS(Stop Bit Select) — Данный бит позволяет выбрать число стоп-битов. При записи 1 в данный бит число стоп-битов станет равно 2, а при записи 0 — 1.
  • UCSZ1,UCSZ0 (Character Size) — В совокупности с битом UCSZ2 регистра UCSRB данные биты позволяют выбрать число передаваемых бит.
Читайте также  AVR. Языки программирования.

  • UCPOL Данный бит позволяет настроить, по какому фронту будет происходить обмен данными при синхронном режиме передачи. При работе в асинхронном режиме передачи необходимо установить данный бит в 0.

Регистры UBRRL и UBRRH отвечают за настройку скорости работы приемопередатчика. Следует помнить, что при работе с регистром UBRRH бит URSEL должен быть равен 0.

Для получения необходимой скорости работы UART значение UBRR(Пары регистров UBRRH и UBRRL) рассчитывается по следующей формуле:

UBRR = (Fosc/(B*16))-1

Где,

Fosc — частота работы микроконтроллера (Гц).

B — необходимая скорость работы UART (Бит/сек).

Например, необходимо настроить скорость передачи 9600 бит/ сек при работе микроконтроллера на частоте 8 МГЦ(8000000 Гц).

UBRR = (8000000/(9600*16))-1 = 51.083333

Округляем до целого числа, то есть до 51.И уже данное число записываем в регистры UBRRL:UBRRH.

Урок получился достаточно объемным, поэтому практическую реализацию протокола UART на микроконтроллерах AVR рассмотрим в следующем уроке.

Спасибо за внимание!

Другие уроки цикла.


Любое копирование, воспроизведение, цитирование материала, или его частей разрешено только с письменного согласия администрации MKPROG.RU. Незаконное копирование, цитирование, воспроизведение преследуется по закону!

AVR для начинающих. Урок 9. UART.: 3 комментария

  1. Уведомление: SIM800L. Подключение по UART. AT команды | MKPROG.RU

  2. Алексей

    Здравствуйте,уважаемый DamiKK
    Спасибо за Ваши интересные уроки.Внятно,понятно и доходчиво.
    Есть проблема. Два контроллера ATMega16a не могу связать по аппаратному УАРТ.Рыл Интернет,пробовал разные команды,а интерфейс молчит.Вчера целый день потратил.Замучался…
    Может Вы мне как спец поможете решить проблему? Если да,дайте знать на мейл и я опишу
    подробности проекта.УАРТ не программировал и опыта никакого.
    Спасибо за ответ.
    С ув. Алексей

    1. DamiKK Автор записи

      Здравствуйте!
      Контроллеры сидят на общей земле?

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

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