8-900-374-94-44
[email protected]
Slide Image
Меню

Usart stm32f103: STM32 USART. STM32 программирование — Avislab

Содержание

Программирование STM32. Часть 16: USART — DiMoon Electronics

Многие из тех, кто имел какое-либо дело с микроконтроллерами, например, с PIC и AVR, знают про такую вещь, как UART. Universal asynchronous receiver transmitter — универсальный асинхронный приемопередатчик встроен как периферийное устройство в любой современный МК, причем в некоторых МК он представлен не в единственном экземпляре. Так же есть некоторая путаница в том, что есть UART, а что есть USART. Universal synchronous asynchronous receiver transmitter (USART) — универсальный синхронный/асинхронный приемопередатчик полностью повторяет функциональность UART, который работает в асинхронном режиме, и включает еще и синхронный режим. В этом случае связь между двумя устройствами USART немного напоминает интерфейс SPI: кроме сигналов RX и TX, добавляется еще один: CK, по которому идет тактовый сигнал от ведущего модуля USART, к ведомому. В данной статье мы рассмотрим самый простой и востребованный случай, а именно обычный асинхронный режим работы USART в микроконтроллере stm32f103c8.

Предыдущая статья здесь, все статьи цикла можно посмотреть тут: http://dimoon.ru/category/obuchalka/stm32f1.

Введение

В микроконтроллере stm32f103c8 встроено 3 модуля USART, которые можно достаточно гибко настраивать под свои нужды. Из особенностей можно выделить следующие:

  • полный дуплекс;
  • возможность работы в полудуплексном режиме по одному проводу;
  • дробное задание делителя скорости USART. Это позволяет настроить скорость передачи с нулевой ошибкой на «неудобных» для USART кварцевых резонаторах;
  • настраиваемый размер передаваемых данных 8 или 9 бит;
  • настраиваемое количество стоп-бит;
  • возможность работать с DMA;
  • разные примочки для работы с ИК-портом (IrDA), со смарт-картами и т.д.

Описание работы USART

В рамках данной статьи мы коснемся только таких понятий, как формат передаваемых данных (количество бит, контроль четности, стоп-биты) и прерывания USART. Все, что связанно с аппаратным контролем потока, ИК-портом, смарт-картами, синхронным режимом и т.

д. мы опустим. Так же пока не будем изучать работу USART совместно с DMA.

Итак, поехали! 😉

Для начала давайте взглянем на блок-схему USART-а:

Рис. 1. Блок-схема USART

Выглядит ужасающе ? Давайте разберемся с основными моментами.

Сдвиговые регистры и регистры данных

Основная часть любого последовательного интерфейса передачи данных — это сдвиговой регистр. В USART-е их 2: один на передачу (Transmit Shift Register), другой на прием (Receive Shift Register). Каждый из этих сдвиговых регистров имеет свой буферный регистр данных: Transmit Data Register (TDR) и Receive Data Register (RDR).

Для того, чтобы отправить слово данных в USART (намеренно говорю «слово», а не «байт», так как размер слова может быть 8 или 9 байт), нужно его загрузить в регистр передачи TDR. После записи в TDR это значение «провалится» в сдвиговой регистр передатчика и процесс передачи будет запущен. Стоит обратить внимание, что как только значение из TDR было отправлено в сдвиговой регистр, в TDR можно загрузить еще данные, которые будут там ждать окончания передачи из сдвигового регистра.

Таким образом, у нас есть как бы буфер на 2 слова: одно находится в сдвиговом регистре, другое в TDR, что позволяет передавать данные по USART сплошным потоком без пауз между соседними передачами.

Подобным образом выполняется и прием данных. После получения данных сдвиговым регистром приемника, они попадают в регистр RDR, и приемник тут же готов к приему следующего слова данных. Здесь у нас тоже есть как бы буфер на 2 слова, одно в сдвиговом регистре, другое в RDR. Таким образом, мы имеем возможность производить прием сплошного потока данных без пауз между соседними передачами.

В STM32F103C8 регистры TDR и RDR не доступны напрямую программно. Для этих целей служит регистр DR (Data register). При операции записи в DR записанное значение попадает в регистр TDR, а при чтении из DR будет прочитано значение RDR. То есть, прием и передача данных со стороны прошивки будет выглядеть как обращение к одному и тому же регистру DR.

Флаги и прерывания

В модуле USART микроконтроллеров STM32 есть достаточное количество разнообразных флагов и прерываний, с помощью которых мы можем очень удобно реализовать процесс обмена данными как на прерываниях, так и методом опроса регистров.

Давайте кратко ознакомимся с некоторыми интересными флагами. Рассмотрим процесс передачи данных. Если регистр передатчика TDR пуст, и в него можно записать очередное слово, то в регистре статуса будет установлен в 1 специальный флаг TXE (Transmit data register empty). Стоит отметить, что установка флага TXE в 1 вовсе не означает окончание процесса передачи данных. TXE говорит только о том, что можно записать очередное значение в регистр передатчика.

Для того, чтобы убедится в окончании передачи данных по ножке Tx, есть другой флаг в регистре статуса: TC (Transmission complete). Он устанавливается только в случае, если передача данных завершена и нет очередных данных в регистре передатчика для загрузки в сдвиговой регистр (установлен флаг TXE). Флаг TC может быть полезен при реализации интерфейса RS485, когда направление драйвера интерфейса можно переключить только после завершения передачи данных.

Перейдем к приему данных. В регистре статуса есть флаг RXNE (Read data register not empty). Он устанавливается в 1, если в буфере приемника есть новые данные.

Кроме того, при установке в 1 одного из рассмотренных флагов, есть возможность разрешить генерацию прерывания USART, что очень полезно при передаче данных через прерывания.

Форматы передачи данных

Модуль USART поддерживает настройку следующих параметров передачи данных:

  • количество бит данных (8 или 9)
  • контроль четности (нет, even, odd)
  • количество стоп-битов (0.5, 1, 1.5, 2)

Тут стоит отметить одну особенность при обмене данными с использованием контроля четности. Пусть у нас выбрано 8 бит данных, 1 стоп-бит, то, если мы не используем контроль четности, то формат кадра USART будет таким:

  • старт-бит; 8 бит данных; стоп-бит

Но, если использовать контроль четности, что таким:

  • старт-бит; 7 бит данных; 1 бит четности; стоп-бит

Иными словами, если мы хотим настроить передачу данных вида «8 бит данных + бит четности», то мы должны длину слова выбрать не 8, а 9 бит.

В одном своем проекте сталкивался с таким приколом, вроде как все правильно настроил, а приемная сторона ну ни как не хотела принимать данные. Разобрался при помощи осцилла и вдумчивого изучения мануала.

Скорость передачи

Те, кто работал с микроконтроллерами AVR, знают про специальные частоты резонаторов, удобные для работы с UART-ом. В микроконтроллерах STM32 USART имеет более хитрую реализацию, что позволяет получать нулевое отклонение скорости передачи от стандартных значений при работе от самых обычных кварцев, например, 8 МГц (в таблице ниже указаны частоты шин с использованием PLL):

Рис. 2. Ошибка генерации скорости передачи данных для стандартных значений скоростей

Это достигается путем дробной установки коэффициента деления скорости передачи. Регистр установки коэффициента деления BRR состоит из 2-х частей: DIV_Mantissa и DIV_Fraction. Оба эти значения образуют число с фиксированной запятой: VAL = DIV_Mantissa,DIV_Fraction. Однако, формулы и правила расчета значений DIV_Mantissa и DIV_Fraction, представленные в мануале, очень запутанные, поэтому, упростив эти выкладки получаем следующую формулу для вычисления значения BRR:

BRR = (uint16_t)(BUS_FREQ / BAUD)

BUS_FREQ — частота тактирования модуля USART (частота шины)

BAUD — скорость передачи в бодах.

К слову, в мануале на другие микроконтроллеры STM32, к примеру на STM32F030, формула для вычисления приведена сразу в удобоваримом виде:

 

Порты ввода-вывода

Давайте выясним, к каким выводам GPIO подключены USART-ы в микроконтроллере STM32F103C8. Открываем Datasheet, находим Таблицу 5: Medium-density STM32F103xx pin definitions. В ней представлено следующее:

Для USART1:

  • TX: PA9, Remap PB6
  • RX: PA10, Remap PB7

Для USART2:

Для USART3:

Для USART1 доступен remap выводов TX и RX на другие порты ввода-вывода, если выводы по-умолчанию заняты.

Теперь обратимся к разделу 9.1.11 GPIO configurations for device peripherals в Reference manual, для того, чтобы понять, как нужно настраивать порты ввода-вывода для работы с USART:

Для самого простого режима полного дуплекса без аппаратного управления потоком нам понадобятся только выводы TX и RX. Остальные выводы можно использовать как обычные порты GPIO.

Итак, настройка будет следующей:

  • TX: режим альтернативной функции, тип выхода push-pull или открытый коллектор
  • RX: вход без подтяжки или с подтяжкой вверх

Как работать с GPIO можно почитать тут.

Регистры USART

Status register (USART_SR) — регистр статуса

TXE: регистр передатчика пуст. Этот бит устанавливается аппаратно, когда содержимое регистра передатчика TDR (TDR не доступен напрямую из программы, но туда попадают данные при записи в USART_DR) было передано в сдвиговой регистр. Если в USART_CR1 был установлен бит разрешения прерывания TXEIE, то в этот момент генерируется запрос прерывания USART. TXE сбрасывается при записи значения в регистр данных USART_DR.

TC: передача завершена. Этот бит устанавливается аппаратно, если UART завершил передачу данных, при этом бит TXE установлен в единицу. Этот бит может быть полезен для реализации интерфейса RS485 для переключения направления драйвера RS485. Если в регистре USART_CR1 установлен бит TCIE, то генерируется прерывание USART при установке бита TC. Бит TC сбрасывается следующей программной последовательностью: чтение регистра USART_SR с последующей записью в регистр USART_DR. Кроме того, бит TC можно сбросить записью в него значения 0, но это рекомендуется производить только в режиме совместной работы с DMA.

RXNE: регистр приемника не пуст. Этот бит устанавливается в единицу, когда содержимое сдвигового регистра приемника передается в регистр данных USART. Если в регистре USART_CR1 установлен бит RXNEIE, то генерируется запрос прерывания USART. Бит RXNE сбрасывается при чтении регистр данных USART_DR. Кроме того, RXNE можно сбросить записью в него значение 0, но это рекомендуется производить только в режиме совместной работы с DMA.

ORE: ошибка переполнения. Устанавливается в 1, если данные в сдвиговом регистре приемника готовы к передаче в регистр данных, но при этом установлен бит RXNE. Иными словами, мы уже получили очередной байт по USART, но еще не прочитали предыдущий. Если в регистре USART_CR1 установлен флаг RXNEIE, то генерируется запрос прерывания USART. Бит ORE сбрасывается следующей программной последовательностью: чтение регистра USART_SR с последующим чтением регистра USART_DR.

 

Data register (USART_DR) — регистр данных

DR[8:0]: данные. Этот регистр содержит 2 теневых регистра: TDR и RDR. При чтении из DR будет прочитано значение регистра данных приемника RDR, при записи в DR значение будет записано в регистр данных передатчика TDR. Если используется контроль четности (бит PCE в регистре USART_CR1 установлен в 1), то при записи в DR значение старшего бита будет игнорироваться, так как при передаче он будет заменен битом четности. При приеме с включенным контролем четности старший бит будет содержать бит четности.

 

Baud rate register (USART_BRR) — регистр скорости передачи данных USART

Регистр BRR содержит коэффициент деления, который задает скорость передачи данных по USART.

BRR = (uint16_t)(BUS_FREQ / BAUD)

где BUS_FREQ — частота шины, на которой висит данный USART

BAUD — желаемая скорость передачи данных.

 

Control register 1 (USART_CR1) — регистр конфигурации 1

UE: включить USART.

  • 0: предделители USART и его выходы отключены
  • 1: USART включен

M: длина слова данных. Этот бит определяет длину передаваемых данных. Устанавливается и очищается программно.

  • 0: 1 старт-бит, 8 бит данных, n стоп-бит
  • 1: 1 старт-бит, 9 бит данных, n стоп-бит

PCE: разрешить контроль четности. Устанавливается и очищается программно

PS: выбор типа контроля четности. Этот бит выбирает вариант контроля четности, если установлен бит PCE. Устанавливается и очищается программно.

TXEIE: разрешить прерывание при опустошении буфера передатчика. Если установлен в 1, то генерируется запрос прерывания USART при установке бита TXE регистра USART_SR.

TCIE: разрешить прерывания окончания передачи. Если 1, то генерируется запрос прерывания USART при установке флага TC в регистре USART_SR.

RXNEIE: разрешить прерывание при появлении данных в регистре приемника. Если 1, то генерируется запрос прерывания USART при установке флага RXNE или ORE в регистре USART_SR.

TE: включить передатчик USART

RE: включить приемник USART

 

Control register 2 (USART_CR2) — регистр конфигурации 2

STOP: количество STOP-битов

  • 00: 1 стоп-бит
  • 01: 0.5 стоп-бита
  • 10: 2 стоп-бита
  • 11: 1.5 стоп-бита

0.5 и 1.5 стоп-бита не доступны для UART4 и UART5 (UART4  и UART5  отсутствуют в микроконтроллере STM32F103C8)

Заключение

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

На этом пока все! В следующей части мы перейдем к практике и напишем небольшую библиотеку для работы с интерфейсом USART. Всем пока! 🙂

Установка скорости передачи данных для usart в stm32 microcontroller



Почему нам нужно вычислять скорость бодрствования по этой формуле,

БОД = fCK / (16*USARTDIV)

Я имею в виду, почему мы не можем написать 9600 или любое другое желаемое значение скорости непосредственно в регистре USART_BRR? Почему нам нужно сначала выполнить этот расчет? И вообще, что мы тут высчитываем?

Это может быть глупый вопрос, но я действительно запутался здесь. Пожалуйста, помогите.

Заранее спасибо!

serial-port stm32 uart
Поделиться Источник Muzahir Hussain     16 января 2018 в 17:47

2 ответа




4

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

Можно было бы сделать usart, чтобы Вы тоже могли определить скорость передачи данных в бодах, но это потребовало бы дополнительной сложности и все равно должно было бы знать, насколько быстры его часы.

Поделиться Colin     16 января 2018 в 20:39



3

Вы настраиваете не программное обеспечение, а аппаратное . Это означает, что биты, которые вы устанавливаете, (более или менее) непосредственно подключены к тактовым делителям, которые управляют скоростью передачи данных модуля UART.

Например, вы должны использовать fck в своих расчетах. Представьте себе, что модуль UART должен был бы вычислить fck сам по себе. Проблема в том, что fck является результатом всех используемых тактовых делителей и не настроен централизованно. Усилия по вычислению fck в аппаратном обеспечении были бы просто непропорциональны (усилие = затраты). Просто гораздо проще позволить пользователю вычислить его.

Поделиться MemAllox     17 января 2018 в 05:48


Похожие вопросы:


USART прием прерывания stm32

Я разрабатываю карту, над которой работаю над STM32 и USART прерываниями. После настройки USART1 и включить прерывание приема. Проблема в том, что прерывания приема у вас не обнаружено????


STM32 Discovery встроенный последовательный загрузчик USART, IAP

У меня есть серьезная проблема, я хочу boot мою плату обнаружения stm32 (STM32L152RBT6) с помощью usart. Я попытался перейти в режим системной памяти boot, поставив BOOT0=HIGH и BOOT1=LOW. Затем я…


подключение avr atmega32 к сдвиговому регистру с помощью USART?

Я хочу подключить ATMEGA32 microcontroller к сдвиговому регистру с помощью USART через TXD pin, а затем сдвиговый регистр выполняет последовательное параллельное преобразование полученных данных.


ПК получает неверные данные, используя высокую скорость передачи данных usart

я хотел использовать скорость передачи данных 4 мб в бодах STM32F103 usart. как я могу проверить правильность данных, полученных в PC? Я использовал hyper terminal, но в его настройках нет скорости…


Автоматическое определение скорости передачи данных UART рабочего устройства

У меня есть устройство, которое непрерывно передает данные через UART. Я пытаюсь прочитать его с помощью приложения terminal на основе Windows PC. Проблема в том, что я не знаю, с какой скоростью…


Как изменить скорость передачи данных UART БОД после запуска на плате STM32?

Я использую STM32F746ZG и использую пять UARTs . All UARTs работают нормально. Может ли кто-нибудь сказать мне процедуру изменения скорости передачи данных на USART , как только он уже был…


STM32 Usart receive interrupt работает только один раз

Я пытаюсь заставить свой STM32F103 получать 4 байта через USART и хранить их в значении. До сих пор, если я сброшу microcontroller, то при первой отправке 4 байта они будут получены нормально, а…


USART приемная ерунда (STM32F0)

У меня есть реализация для связи USART с модулем GPS на STM32F091 microcontroller. Почему-то я получаю только чепуху. Я уже пробовал устанавливать разные скорости передачи данных, но ни одна из них…


Драйверы STM32 HAL USART: как работает этот синтаксис?

Я изучаю Программирование STM32 и пытаюсь реализовать простую асинхронную последовательную связь с использованием USART периферийных устройств на GPIO выводах. Руководство HAL описывает, как…


STM32 microcontroller typecast

У меня есть вопрос о типизации на языке C для микроконтроллеров STM32. Теперь я пытаюсь написать свои собственные библиотеки для управления периферийными устройствами a microcontroller. Но я не…

STM32F4xx: порты UART и USART | arm

Универсальный синхронный/асинхронный трансивер (universal synchronous asynchronous receiver transmitter, USART) предоставляет гибкий способ полнодуплексного обмена с внешним оборудованием, что требуют промышленные стандарты последовательной асинхронной передачи данных в формате NRZ. USART можно настроить на скорость обмена в широком диапазоне благодаря использования дробного генератора скорости (fractional baud rate generator).

Поддерживается однонаправленный обмен в любую сторону и полудуплексный обмен в обе стороны по одному проводу (half-duplex single wire). Также поддерживаются протоколы LIN (local interconnection network), Smartcard Protocol и IrDA (infrared data association) спецификаций SIR ENDEC и операции модема (CTS/RTS). Это позволяет реализовать мультипроцессорный обмен данными. Высокая скорость обмена поддерживается конфигурацией DMA для нескольких буферов.

• Полный дуплекс, асинхронный обмен данными.

• Стандартный формат NRZ (Mark/Space).

• Конфигурируемый метод передискретизации (oversampling) на 16 или на 8 для гибкого компромисса между скоростью и допуском на частоту тактов.

• Дробный генератор скорости (Fractional baud rate generator) реализует общую программируемую скорость передачи и приема, максимальная скорость зависит от максимальной частоты APB (см. даташит).

• Программируемая длина слова данных (8 или 9 бит).

• Конфигурируется количество stop-битов — поддерживается 1 или 2 стоп-бита.

• Возможность отправки LIN Master Synchronous Break и детектирования LIN slave break. Генерация 13-битного break и детектирование break 10/11 бит, когда USART аппаратно сконфигурирован для LIN.

• Тактовый выход передатчика для синхронной передачи.

• Кодер/декодер IrDA SIR. Для нормального режима поддерживается длительность 3/16 бит.

• Возможность эмуляции смарт-карты:

   – Интерфейс Smartcard поддерживает асинхронный протокол смарт-карт, как это определено в стандартах ISO 7816-3.
   – Для работы Smartcard конфигурируются 0.5, 1.5 stop-бит.

• Полудуплексный обмен по одному сигнальному проводу (Single-wire half-duplex).

• Конфигурируемый multibuffer-обмен для DMA. Байты передачи и приема помещаются в зарезервированные буферы SRAM.

• Отдельные биты разрешения для передатчика и приемника.

• Флаги детектирования обмена:

– Буфер приема заполнен
– Буфер передачи пуст
– Флаги завершения передачи

• Управление контролем четности:

– Передача parity-бита
– Проверка четности в принятом байте

• 4 флага детектирования ошибки:

– Overrun error (ошибка переполнения)
– Noise detection (детектирование шума)
– Frame error (ошибка фрейма)
– Parity error (ошибка четности)

• 10 источников прерывания с флагами:

– Изменение CTS
– Детектирование LIN break
– Пуст регистр данных передачи
– Завершение передачи
– Регистр данных приема заполнен
– Принят сигнал ожидания линии (idle line)
– Ошибка переполнения (Overrun error)
– Ошибка фрейма (Framing error)
– Ошибка из-за шума (Noise error)
– Ошибка четности (Parity error)

• Мультипроцессорный обмен — вход в режим молчания (mute mode), если не было совпадения адреса.

• Пробуждение из режима молчания (Wake up from mute mode) — из-за детектирования idle line или address mark.

• Два режима пробуждения приемника: бит адреса (MSB, 9-й бит), сигнал idle line.

[Функциональное описание USART]

Интерфейс обычно подключается к внешним системам тремя ножками (см. рис. 296). Любой двунаправленный обмен USART требует как минимум двух сигнальных выводов: входные принимаемые данные (Receive Data In, RX) и выходные передаваемые данные (Transmit Data Out, TX):

RX: вход последовательных принимаемых данных. Используются техники передискретизации для восстановления данных, чтобы отделить полезные приходящие данные от шума.

TX: выход передаваемых данных. Когда передатчик запрещен, ножка выхода возвратит свою конфигурацию порта ввода/вывода (GPIO). Когда передатчик разрешен и ничего не передается, уровень выхода ножки TX находится в лог. 1. В режимах single-wire и smartcard, этот вывод I/O используется и для передачи, и для приема данных (на уровне USART данные затем принимаются на SW_RX).

Через эти выводы последовательные данные принимаются и передаются в нормальном режиме USART как фреймы. В этом процессе используется следующее:

• Состояние ожидания линии (Idle Line) до передачи или приема.
• Start-бит.
• Слово данных (8 или 9 бит), самый младший бит слова (LSB) идет первым.
• 0.5,1, 1.5, 2 Stop-стоп-бит, показывающих завершение фрейма.
• Используется дробный генератор скорости — с 12-разрядной мантиссой и 4-битной дробной частью.
• Регистр статуса (USART_SR).
• Регистр данных (USART_DR).
• Регистр генератора скорости (USART_BRR) с 12-разрядной мантиссой и 4-битной дробной частью.
• Регистр защитного времени, Guardtime Register (USART_GTPR) в случае использования режима Smartcard.

Описание регистров и их бит см. далее во врезках раздела «Регистры USART».

Для работы в синхронном режиме требуется дополнительный вывод тактов:

• CK: выход тактов передатчика. На этот вывод выдаются такты данных для синхронной передачи, соответствующей режиму SPI master (нет тактовых импульсов на битах start и stop, и программно выбираемая опция отправки тактового импульса на последнем бите данных). Параллельно и синхронно могут приниматься данные через ножку RX. Это можно использовать для управления внешними периферийными устройствами, у которых есть регистры сдвига (например драйверы LCD). Фаза и полярность тактов выбирается программно. В режиме smartcard CK может предоставлять такты для смарт-карты.

В режиме аппаратного управления потоком требуются еще 2 вывода:

• CTS: сигнал Clear To Send, блокирующий передачу данных по окончании текущей передачи (когда CTS = 1).

• RTS: сигнал Request To Send, показывающий, что USART готов принимать данные (когда RTS = 0).

Рис. 296. Блок-схема USART.

Символ USART. Для передачи можно выбрать длину слова 8 или 9 бит путем программирования бита M в регистре USART_CR1 (см. рис. 297).

Ножка TX находится в лог. 0, когда передается start-бит, и в лог. 1, когда передается stop-бит.

Idle. Символ Idle интерпретируется как фрейм (идущий после start-бита), где все биты равны 1 (все биты данных в лог. 1, это состояние сохраняется и во время передачи stop-битов).

Break. Символ Break интерпретируется, когда принимаются все 0 в течение всего периода фрейма. По окончании данных фрейма передатчик вставляет 1 или 2 stop-бита (лог. 1), чтобы подтвердить start-бит.

Передача и прием управляются общим генератором скорости (baud rate generator). Такты для передатчика и приемника генерируются, когда установлен соответствующий бит разрешения.

Рис. 297. Программирование длины слова (фрейма).

Передатчик может отправлять слова данных по 8 или 9 бит, в зависимости от состояния бита M. Когда установлен бит разрешения передачи (transmit enable, TE), данные из регистра сдвига передачи выводится на вывод TX, и соответствующие тактовые импульсы на вывод CK.

Передача символа. Во время передачи USART данные выдвигаются наружу на вывод TX, младший бит (LSB) идет первым. В этом режиме регистр USART_DR состоит из буфера (TDR) между внутренней шиной и регистром сдвига передачи (см. рис. 296).

Каждому символу предшествует start-бит с лог. 0 в течение длительности одного бита. Символ завершается конфигурируемым количеством stop-бит. Поддерживаются следующие варианты выбора stop-битов: 0.5, 1, 1.5 и 2 stop-бита.

Примечание: бит TE не должен сбрасываться во время передачи данных. Сброс бита TE во время передачи повредит данные на выводе TX, потому что внутренние счетчики генератора скорости остановятся, и текущие передаваемые данные будут потеряны. После разрешения бита TE будет отправлен фрейм idle.

Конфигурация stop-битов. Количество передаваемых с каждым символом stop-битов может быть запрограммировано в регистре управления 2 (USART_CR2), битами 13:12.

• 1 stop-бит: это значение по умолчанию для количества stop-битов.
• 2 stop-бита: это значение будет поддерживаться в режимах обычного USART, single-wire и режиме модема.
• 0.5 stop-бита: для использования при приеме данных в режиме Smartcard.
• 1.5 stop-бита: используется при передаче и приеме данных в режиме Smartcard.

Фрейм idle также будет включать в себя и stop-биты.

Передача break будет состоять из 10 бит в лог. 0, за которыми идет сконфигурированное количество stop-бит (когда бит M = 0) и 11 бит в лог. 0, за которыми идет сконфигурированное количество stop-бит (когда бит M = 1). Нельзя передавать длинные символы break (когда длительность нулей больше 10/11 бит).

Рис. 298. Конфигурируемые stop-биты.

Процедура программирования передатчика:

1. Разрешите USART записью в 1 бита UE регистра USART_CR1.
2. Запрограммируйте бит M в регистре USART_CR1, чтобы определить длину слова данных.
3. Запрограммируйте количество stop-бит в регистре USART_CR2.
4. Выберите разрешение DMA передачи (DMAT) в регистре USART_CR3, если имеют место коммуникации с несколькими буферами (Multibuffer Communication). Сконфигурируйте регистр DMA, как указано в описании multibuffer communication.
5. Выберите желаемую скорость (baud rate), используя регистр USART_BRR.
6. Установите бит TE в USART_CR1, чтобы отправить idle frame в качестве первой передачи.
7. Запишите данные для отправки в регистр USART_DR (это очистит бит TXE). В случае использования одиночного буфера повторяйте эту операцию для каждого передаваемого символа.
8. После записи последних данные в регистр USART_DR подождите, когда TC станет равным 1. Это покажет, что была завершена передача последнего фрейма. Например, это требуется, когда USART запрещается или вводится в режим Halt, чтобы избежать повреждения последней передачи.

Однобайтный обмен. Бит TXE всегда очищается путем записи в регистр данных. TXE устанавливается аппаратно, и это показывает:

• Данные были перемещены из TDR в регистр сдвига, и началась передача данных.
• Регистр TDR пуст.
• Можно записать следующие данные в регистр USART_DR без риска перезаписи предыдущих данных.

Этот флаг генерирует прерывание, если установлен бит TXEIE.

Когда происходит передача, инструкция записи в регистр USART_DR сохраняет данные в регистр TDR, и эти данные оттуда затем копируются в регистр сдвига, когда закончится текущая передач.

Когда передача не осуществляется, инструкция записи в регистр USART_DR сразу помещает данные в регистр сдвига, начинается передача данных, и немедленно установится бит TXE.

Если передается фрейм (после stop-бита), и установился бит TXE, бит TC переходит в 1. Будет сгенерировано прерывание, если установлен бит TCIE в регистре USART_CR1.

После записи последних данных в регистр USART_DR важно подождать момента, когда TC=1 перед запретом USART, или когда микроконтроллер переводится в режим пониженного энергопотребления low-power mode (см. рис. 299, где показано поведение TC/TXE при передаче).

Рис. 299. Как ведут себя при передаче биты TC и TXE.

Бит TC очищается следующими программными операциями:

1. Чтение из регистра USART_SR.
2. Запись в регистр USART_DR.

Символ Break. Установка бита SBK передает символ break (сигнал остановки потока данных). Длина фрейма break (как и длина фрейма всех передаваемых символов) зависит от бита M (см. рис. 297).

Если установлен в 1 бит SBK, символ break посылается через вывод TX после текущей передачи символа. Этот бит сбросится аппаратно, когда передача символа break завершится (во время stop-бита символа break). USART вставляет бит лог. 1 по окончанию последнего фрейма break, чтобы гарантировать распознавание start-бита следующего фрейма.

Примечание: если программа сбросит бит SBK перед началом передачи break, то символ break не будет передан. Для двух следующих друг за другом break бит SBK должен быть установлен после stop-бита предыдущего break.

Символ Idle. Установка бита TE побуждает USART отправить фрейм idle перед первым фреймом данных.

USART может принимать слова данных разрядностью 8 или 9 бит, в зависимости от бита M в регистре USART_CR1.

Детектирование start-бита. Последовательность детектирования старт-бита одинаковая, когда делается передискретизация сигнала (oversampling) с кратностью 16 или 8.

В USART start-бит детектируется, когда распознана определенная последовательность выборок сигнала: 1 1 1 0 X 0 X 0 X 0 0 0 0.

Рис. 300. Детектирование start-бита при передискретизации 16 или 8.

Примечание: если последовательность не завершена, то детектирование start-бита прекращается, и приемник возвращается в состояние ожидания idle state (никакой флаг не установится), когда он ожидает спада уровня сигнала.

Подтверждено появление start-бита (установился флаг RXNE, генерируется прерывание, если RXNEIE=1), если 3 выборки бита равны 0 (первая выборка на 3-ем, 5-ом и 7-ом битах находит 3 бита в лог. 0, и вторая выборка на 8-ом, 9-ом и 10-ом битах также находит 3 бита в лог. 0).

Start-бит считается достоверным (установится флаг RXNE, генерируется прерывание, если RXNEIE=1), однако установится бит NE (noise error, флаг шума), если для обоих выборок как минимум 2 из 3 выборок бит это 0 (выборка на 3-ем, 5-ом и 7-ом битах, и выборка на 8-ом, 9-ом и 10-ом битах). Если условие не выполняется, детектирование старта обрывается, и приемник возвращается в состояние ожидания idle state (никакой флаг не установится).

Если для одной из выборок (выборка на 3, 5 и 7 битах, или выборка на 8, 9 и 10 битах), 2 из 3 битов найдены в 0, то start-бит подтверждается, но установится бит шума NE.

Прием символа. На приеме данные вдвигаются в вывод RX, начиная с бита LSB. В этом режиме регистр USART_DR состоит из буфера (RDR) между внутренней шиной и регистром сдвига приема.

Процедура программирования приемника:

1. Разрешите USART записью в 1 бита UE регистра USART_CR1.
2. Запрограммируйте бит M в регистре USART_CR1, чтобы определить длину слова данных.
3. Запрограммируйте количество stop-бит в регистре USART_CR2.
4. Выберите разрешение DMA приема (DMAR) в регистре USART_CR3, если имеют место коммуникации с несколькими буферами (Multibuffer Communication). Сконфигурируйте регистр DMA, как указано в описании multibuffer communication.
5. Выберите желаемую скорость (baud rate), используя регистр USART_BRR.
6. Установите бит RE в регистре USART_CR1. Это разрешит приемник, который начнет искать start-бит.

Когда принят символ:

• Установится бит RXNE. Это показывает, что содержимое регистра сдвига передано в RDR. Другими словами, данные были приняты, и могут быть прочитаны (а также связанные с ним флаги ошибок).
• Генерируется прерывание, если был установлен бит RXNEIE.
• Могут быть установлены флаги ошибки, если имели место (были детектированы) события ошибки фрейма (frame error), шума (noise error) или переполнения (overrun error).
• В режиме multibuffer бит RXNE устанавливается после каждого принятого байта, и очищается чтением DMA в регистре данных.
• В режиме одиночного буфера очистка бита RXNE осуществляется программно, путем чтения регистра USART_DR. Флаг RXNE также можно очистить записью в него нуля. Бит RXNE должен быть очищен перед окончанием приема следующего символа, чтобы избежать ошибки переполнения (overrun error).

Примечание: бит RE не должен сбрасываться при приеме данных. Если бит RE запрещен во время приема, то прием текущего слова данных будет оборван.

Символ Break. Когда был принят символ break, USART обрабатывает это как ошибку фрейма (framing error).

Символ Idle. Когда был детектирован фрейм ожидания (idle frame), то происходит та же процедура, что и при приеме символа, плюс произойдет прерывание, если установлен бит IDLEIE.

Ошибка переполнения. Overrun error происходит, когда принят новый символ, но флаг RXNE не был очищен. Данные не могут быть перемещены из регистра сдвига в регистр RDR, пока не будет очищен бит RXNE.

Флаг RXNE устанавливается после каждого принятого слова данных. Ошибка переполнения происходит, если флаг RXNE установлен, когда приняты следующие данные, или когда не был обработан предыдущий запрос DMA. Когда произойдет overrun error:

• Установится бит ORE.
• Текущее содержимое RDR не теряется. Предыдущие данные доступны, когда произойдет чтение регистра USART_DR.
• Регистр сдвига будет перезаписан. В этот момент любые принятые при переполнении данные будут потеряны.
• Сгенерируется прерывание, если либо установлен бит RXNEIE, либо установлены оба бита EIE и DMAR.
• Бит ORE сбрасывается чтением регистра USART_SR, за которым следует операция чтения регистра USART_DR.

Примечание: бит ORE, когда установлен, показывает, что как минимум один элемент данных на приеме был потерян. Есть 2 возможности:

• Если RXNE=1, то последние достоверные принятые данные сохранены в регистре приема RDR, и они могут быть прочитаны.
• Если RXNE=0, то это значит, что последние достоверные данные уже были прочитаны, и поэтому в RDR нечего считывать. Этот случай может произойти, когда последние достоверные данные прочитаны из RDR в тот момент, как новые (и уже потерянные) данные были приняты. Это также может произойти, когда новые данные приняты в последовательности чтения (между доступом на чтение регистра USART_SR и доступом на чтение регистра USART_DR).

Выбор правильного метода передискретизации. Приемник использует разные, конфигурируемые пользователем техники передискретизации (кроме синхронного режима) для восстановления данных, путем отделения друг от друга достоверных приходящих данных и шума.

Метод передискретизации может быть выбран программированием бита OVER8 в регистре USART_CR1, и передискретизация может быть 16 или 8 кратная к тактам скорости (см. рис. 301 и 302).

В зависимости от приложения:

• Выберите передискретизацию на 8 (OVER8=1), чтобы достичь увеличенной скорости (до fPCLK/8). В этом случае максимальный допуск на девиацию тактов для приемника снижается (см. далее секцию «Допуск ухода тактовой частоты для приемника USART»).
• Выберите передискретизацию на 16 (OVER8=0), чтобы увеличить допуск приемника к девиации тактов. В этом случае максимальная скорость ограничена fPCLK/16.

Программирование бита ONEBIT в регистре USART_CR3 выбирает метод, используемый для оценки логического уровня сигнала. Есть 2 опции:

• Мажоритарная выборка из 3 образцов сигнала, взятых по центру принимаемого бита. В этом случае, когда 3 эти выборки не одинаковые, установится бит NF.
• Одна выборка в центре принимаемого бита.

В зависимости от приложения:

– Выберите метод мажоритарности из 3 выборок (ONEBIT=0) когда работа происходит в зашумленном окружении, и отбрасывайте данные, когда был определен шум (см. таблицу 133), потому что это показывает, что во время выборки произошел паразитный выброс помехи.
– Выберите метод одиночной выборки (ONEBIT=1) когда на линии чистый сигнал, чтобы увеличить допуск на девиацию тактов приемника (см. далее секцию «Допуск ухода тактовой частоты для приемника USART»). В этом случае бит NF никогда не установится.

Когда во фрейме был детектирован шум:

• Бит NF установится по фронту нарастания бита RXNE.
• Неправильные данные переместятся из регистра сдвига в регистр USART_DR.
• Не будет сгенерировано прерывание в случае обмена по одному байту. Однако этот бит установится одновременно с битом RXNE, который сам по себе генерирует прерывание. В случае multibuffer-обмена прерывание будет выдано, если установлен бит EIE в регистре USART_CR3.

Бит NF сбросится операцией чтения регистра USART_SR, за которой идет операция чтения регистра USART_DR.

Примечание: передискретизация на 8 недоступна в режимах Smartcard, IrDA и LIN. В этих режимах бит OVER8 аппаратно сбрасывается в 0.

Рис. 301. Выборка данных при передискретизации 16.

Рис. 302. Выборка данных при передискретизации 8.

Таблица 133. Детектирование шума для считываемых данных.

Оцифр. значение Статус NE Принятое значение бита
000 0 0
001 1 0
010 1 0
011 1 1
100 1 0
101 1 1
110 1 1
111 0 1

Ошибка фрейма. Framing error детектируется, когда не был распознан stop-бит во время приема в ожидаемом промежутке времени — либо из-за рассинхронизации, либо из-за чрезмерного шума.

Когда детектирована ошибка фрейма:

• Бит FE устанавливается аппаратно.
• Неправильные данные передаются из регистра сдвига в регистр USART_DR.
• В случае однобайтового обмена никакое прерывание не генерируется. Однако этот бит устанавливается одновременно с битом RXNE, который сам по себе генерирует прерывание. В случае многобайтной коммуникации будет выдано прерывание, если установлен бит EIE в регистре USART_CR3.

Бит FE сбрасывается чтением регистра USART_SR, за которым идет операция чтения USART_DR.

Конфигурируемые stop-биты во время приема. Количество принимаемых stop-бит можно конфигурировать битами USART_CR2. Это может быть 1 или 2 бита в нормальном режиме, и 0.5 или 1.5 в режиме Smartcard.

0.5 stop-бита (прием в режиме Smartcard): для этого режима не делаются выборки. Как следствие, при выборе 0,5 стоп-бита не может быть обнаружена ошибка поврежденного фрейма, и сигнал break не детектируется.

1 stop-бит: анализ сигнала для 1 stop-бита осуществляется на 8-ой, 9-ой и 10-ой выборках.

1.5 stop-бита (режим Smartcard): когда идет передача в режиме smartcard, устройство должно проверить, какие данные отправляются в настоящий момент. Таким образом, блок приемника должен быть разрешен (бит RE=1 в USART_CR1 в регистре), и stop-бит проверяется на наличие ошибки четности на смарт-карте. Если было событие ошибки четности, то смарт-карта подтягивает сигнал данных в лог. 0 во время выборки (сигнал NACK), который опознается как ошибка фрейма. Затем установится флаг FE вместе с RXNE по окончанию 1.5 stop-бита. Анализ уровня для 1.5 stop-бита осуществляется на 16-ой, 17-ой и 18-ой выборках (1 период скорости после начала stop-бита). Для 1.5 stop-бита может выполнена декомпозиция на 2 части: одна из 0.5 периода скорости, когда ничего не происходит, за которой идет время 1 нормального stop-бита, в течение которого посередине идет анализ сигнала. См. секцию 30.3.11: Smartcard даташита [1].

2 stop-бита: анализ для 2 стоп-бит осуществляется на 8-ой, 9-ой и 10-ой выборках первого стоп-бита. Если была определена ошибка фрейма во время первого стоп-бита, установится флаг ошибки фрейма. Второй стоп-бит не проверяется на предмет ошибки фрейма. Установится флаг RXNE по окончанию первого stop-бита.

Дробный генератор скорости. Скорость обмена (baud rate) для приемника и передатчика (обоих сигналов RX и TX) устанавливается в одинаковое значение, программируемое коэффициентами Mantissa и Fraction делителя USARTDIV.

Формула 1. скорость для стандартного USART (включая режим SPI):

                       fCK
Tx/Rx baud = —————————
             8 x (2 – OVER8) x USARTDIV

Формула 2. скорость для режимов Smartcard, LIN и IrDA:

                  fCK
Tx/Rx baud = ————-
             16 x USARTDIV

USARTDIV это число с фиксированной запятой без знака, закодированное в регистре USART_BRR.

• Когда OVER8=0, дробная часть кодируется 4 битами, и программируется битами DIV_fraction[3:0] регистра USART_BRR.
• Когда OVER8=1, дробная часть кодируется 3 битами, и программируется битами DIV_fraction[2:0] регистра USART_BRR, и бит DIV_fraction[3] должен сохраняться сброшенным в 0.

Примечание: счетчики скорости обновляются новым значением в регистрах скорости после операции записи в USART_BRR. Следовательно, регистра скорости не должно изменяться во время активного обмена.

[Пример 1]

Если DIV_Mantissa = 0d27 и DIV_Fraction = 0d12 (USART_BRR = 0x1BC), тогда
Mantissa (USARTDIV) = 0d27
Fraction (USARTDIV) = 12/16 = 0d0.75
Therefore USARTDIV = 0d27.75

[Пример 2]

Для программирования USARTDIV = 0d25.62 получается:

DIV_Fraction = 16*0d0.62 = 0d9.92
Ближайшее реальное число 0d10 = 0xA
DIV_Mantissa = mantissa (0d25.620) = 0d25 = 0x19
Тогда USART_BRR = 0x19A следовательно USARTDIV = 0d25. 625

[Пример 3]

Для программирования USARTDIV = 0d50.99 получается:

DIV_Fraction = 16*0d0.99 = 0d15.84
Ближайшее реальное число 0d16 = 0x10 => переполнение DIV_frac[3:0] => должен быть добавлен перенос к мантиссе.

DIV_Mantissa = mantissa (0d50.990 + carry) = 0d51 = 0x33
Тогда USART_BRR = 0x330 hence USARTDIV = 0d51.000

[Пример 1]

Если DIV_Mantissa = 0x27 и DIV_Fraction[2:0]= 0d6 (USART_BRR = 0x1B6), тогда
Mantissa (USARTDIV) = 0d27
Fraction (USARTDIV) = 6/8 = 0d0.75
Отсюда USARTDIV = 0d27.75.

[Пример 2]

Для программирования USARTDIV = 0d25.62. Это приведет к следующему:

DIV_Fraction = 8*0d0.62 = 0d4.96
Ближайшее реальное число 0d5 = 0x5
DIV_Mantissa = mantissa (0d25.620) = 0d25 = 0x19
Тогда USART_BRR = 0x195 => USARTDIV = 0d25.625.

[Пример 3]

Для программирования USARTDIV = 0d50.99. Это приведет к следующему:

DIV_Fraction = 8*0d0. 99 = 0d7.92
Ближайшее реальное число 0d8 = 0x8 => переполнение DIV_frac[2:0] => к мантиссе должен быть добавлен перенос.

DIV_Mantissa = mantissa (0d50.990 + перенос) = 0d51 = 0x33.
Тогда USART_BRR = 0x0330 => USARTDIV = 0d51.000.

В таблицах 134 .. 143 даташита [1] приведены рассчитанные практические погрешности заданных стандартных скоростей для различных условий (частоты шины PCLK, варианты передискретизации).

Допуск ухода тактовой частоты для приемника USART. Асинхронный приемник USART корректно работает только если общая девиация тактовой частоты системы меньше, чем допуск приемника USART. Причины, которые способствуют общему отклонению:

• DTRA: девиация из-за ошибки передатчика (что также включает девиацию локального тактового генератора передатчика).
• DQUANT: ошибка квантования скорости приемника.
• DREC: девиация частоты локального генератора тактов приемника.
• DTCL: девиация из-за линии передачи (обычно из-за того, что передатчики могут давать несимметричные перепады 0 -> 1 по сравнению с перепадами 1 -> 0)

DTRA + DQUANT + DREC + DTCL < допуск приемника USART

Допуск приемника USART для правильного приема данных равен максимально допустимой девиации и зависит от следующих выбранных параметров:

• Длина фрейма символа 10 или 11 бит, что определяется битом M в регистре USART_CR1.
• Передискретизация 8 или 16, что определяется битом OVER8 в регистре USART_CR1.
• Используется или нет дробная установка скорости.
• Используются 1 или 3 бита для оцифровки данных, в зависимости от бита ONEBIT регистра USART_CR3.

Таблица 144. Допуск приемника USART, когда DIV fraction = 0.

Бит M
OVER8 = 0 OVER8 = 1
ONEBIT = 0 ONEBIT = 1 ONEBIT = 0 ONEBIT = 1
0 3.75% 4.375% 2.50% 3.75%
1 3.41% 3.97% 2.27% 3.41%

Таблица 145. Допуск приемника USART, когда DIV fraction отличается от 0.

Бит M
OVER8 = 0 OVER8 = 1
ONEBIT = 0 ONEBIT = 1 ONEBIT = 0 ONEBIT = 1
0 3.33% 3.88% 2% 3%
1 3.03% 3.53% 1.82% 2.73%

Примечание: информация, указанная в таблицах 144 и 145, может незначительно отличаться в специальном случае, когда принимаемые фреймы точно 10-битные при M=0 (11-битные при M=1).

Есть возможность выполнять многопроцессорный обмен через USART (несколько USART, объединенных в сеть). Например, один USART может быть главный (master), его выход TX подключается ко входу RX других USART. Другие USART работают как подчиненные (slave), их соответствующие выходы логически объединены по И (AND), и все вместе подключены ко входу RX устройства master.

В многопроцессорных конфигурациях обмена часто желательно, чтобы только один получатель сообщения должен активно принять все сообщение целиком, чтобы уменьшить обработку избыточных данных для всех приемников, которые не адресованы.

Не адресованные устройства могут быть помещены в режим молчания (mute mode) с помощью соответствующей функции (muting). В режиме молчания:

• Никакой из битов статуса приема не может быть установлен.
• Все прерывания приема запрещены.
• Бит RWU в регистре USART_CR1 установлен в 1. RWU может управляться автоматически, аппаратно, или может быть записан программой в определенных ситуациях.

USART может либо войти в mute mode, либо выйти из mute mode, используя один из двух методов, в зависимости от бита WAKE в регистре USART_CR1:

• Детектирование ожидания линии (Idle Line), если сбо бит WAKE.
• Детектирование сигнала метки адреса (Address Mark), если установлен бит WAKE.

Детектирование Idle Line (WAKE=0). USART войдет в режим молчания, когда в бит RWU записана 1. Он проснется, когда будет детектирован фрейм Idle. Тогда бит RWU очистится программно, но бит IDLE в регистре USART_SR не установится. Бит RWU также можно записать в 0 программно.

Пример поведения в режиме молчания с использованием детектирования Idle линии показан на рис. 303.

Рис. 303. Режим Mute с использованием детектирования состояния ожидания (Idle) линии.

Детектирование метки адреса (WAKE=1). В этом режиме байты распознаются как адреса, если старший бит (MSB) равен 1, иначе они считаются данными. В байте адреса адрес целевого приемника помещается в 4 младших бита (LSB). Это 4-битное слово сравнивается приемником со своим собственным адресом, который запрограммирован в биты ADD регистра USART_CR2.

USART входит в режим молчания, когда принят символ адреса, который не соотвветствует запрограммированному адресу. В этом случае бит RWU установится аппаратно. Для этого байта адреса флаг RXNE не установится, и не будет сгенерировано ни прерывание, ни запрос передачи DMA, поскольку USART перейдет в режим молчания.

USART выйдет из режима молчания, когда принят символ адреса, совпадающий с запрограммированным адресом. Тогда бит RWU сбросится, и последующие байты будут нормально приняты. Бит RXNE установится символа адреса, поскольку бит RWU был сброшен.

Бит RWU также может быть записан в 0 или 1, когда буфер приемника не содержит данных (RXNE=0 в регистре USART_SR). Иначе попытка записи будет проигнорирована.

Пример поведения в режиме молчания с использованием детектирования метки адреса показан на рис. 304.

Рис. 304. Режим Mute с использованием детектирования метки адреса.

Проверка четности бит (генерация parity-бита при передаче и проверка четности на приеме) могут быть разрешены установкой бита PCE (Parity Control Enable) в регистре USART_CR1. В зависимости от длины фрейма, определяемой битом M, возможные форматы фрейма USART перечислены в таблице 146. Вид проверки на четность выбирается битом PS (Parity Select) регистра USART_CR1.

Таблица 146. Форматы фрейма.

Бит M Бит PCE Фрейм USART(1)
0 0 | SB | 8 бит данных | STB |
0 1 | SB | 7 бит данных | PB | STB |
1 0 | SB | 9 бит данных | STB |
1 1 | SB | 8 бит данных PB | STB |

Примечание (1): легенда следующая: SB старт-бит, STB стоп-бит, PB: parity-бит.

Проверка на четность. Parity-бит вычисляется так, чтобы получить четную сумму всех единичек во фрейме из 7 или 8 бит (в зависимости от значения бита M) и parity-бита.

Например: data=00110101; здесь установлено 4 бита, поэтому бит четности будет 0, если выбрана проверка на четность (бит PS в USART_CR1 равен 0).

Проверка на нечетность. Здесь все наоборот — parity-бит вычисляется так, чтобы получить нечетную сумму.

Например: data=00110101; установлено 4 бита => бит четности будет 1, если выбрана проверка на нечетность (бит PS в USART_CR1 равен 1).

Проверка четности на приеме. Если проверка на четность/нечетность показала ошибку в данных, то в регистре USART_SR установится флаг PE (Parity Error), и сгенерируется прерывание, если усnановлен бит PEIE (Parity Error Interrupt Enable) в регистре USART_CR1. Флаг PE очистится последовательностью действий в программе (чтение из регистра статуса, за которым идет доступ на чтение или запись регистра USART_DR).

Примечание: в случае пробуждения по метке адреса (wakeup address mark): бит MSB учитывается для идентификации адреса, но не бит четности. И приемник не проверяет четность данных адреса (PE не установится в случае ошибки четности).

Генерация бита parity при передаче. Если в регистре USART_CR1 установлен бит PCE, то бит MSB данных, записанных в регистр данных, передается, но он изменяется parity-битом (для четности количества единичек в данных, если PS=0, или для нечетности количества единичек, если PS=1).

Примечание: подпрограмма, которая обслуживает передачу, может активировать последовательность действий, которая очистит флаг PE (чтение из регистра статуса USART, за которым идет операция чтения или записи над регистром данных USART). Когда работа осуществляется в режиме полудуплекса, в зависимости от программы, это может привести к тому, что флаг PE будет неожиданно очищен.

Режим LIN выбирается установкой бита LINEN в регистре USART_CR2. В режиме LIN должны держаться сброшенными следующие биты:

• STOP[1:0] и CLKEN в регистре USART_CR2.
• SCEN, HDSEL и IREN в регистре USART_CR3.

Передача LIN. Та же процедура, которая была описана выше во врезке «Передатчик», применима к передаче LIN Master, которая работает так же, как и обычная передача USART, со следующими отличиями:

• Бит M очищается, чтобы сконфигурировать длину слова 8 бит.
• Останавливается бит LINEN для входа в режим LIN. В этом случае установка бита SBK (Send BReak) отправит 13 нулевых бит в качестве символа break. После этого будет отправлен бит 1, чтобы было возможно детектировать следующий start.

Прием LIN. Схема детектирования break реализована на интерфейсе USART, но её поведение в режиме LIN не зависит от обычного приемника USART. Break может быть детектирован независимо от того, где он появился — в состоянии ожидания (Idle) или во время фрейма.

Когда приемник разрешен (RE=1 in USART_CR1), схема опрашивает вход RX в ожидании сигнала start. Метод детектирования бит сигнала start такой же, как используется при анализе символов break или данных. После того, как был детектирован бит start, схема оцифровывает следующие биты так же, как и для данных (на 8-ой, 9-ой и 10-ой выборках). Если 10 (когда LBDL = 0 в регистре USART_CR2) или 11 (когда LBDL=1 в регистре USART_CR2) последующие биты детектированы как 0, и за которыми следует символ разделителя, то установится бит LBD в регистре USART_SR. Если установлен бит LBDIE, то будет сгенерировано прерывание. Перед проверкой корректности break проверяется разделитель, так как он означает, что сигнал RX вернулся на уровень лог. 1.

Если была обнаружена 1 перед возникновением 10 или 11 бита, схема детектирования break отменяет текущее детектирование, и снова ищет бит start.

Если режим LIN запрещен (LINEN=0), приемник продолжает работу как обычный USART, без учета детектирования break.

Если режим LIN разрешен (LINEN=1), как только произойдет ошибка фрейма (например stop-бит был детектирован как 0, что будет в случае любого обрыва фрейма, break), приемник останавливается до тех пор, когда схема детектирования break примет либо 1, если слово break было не завершено, или символ разделителя, если был детектирован break.

Рис. 305. Детектирование Break в режиме LIN (длина break 11 бит — установлен бит LBDL).

Рис. 306. Детектирование break в режиме LIN, отличие от детектирования ошибки фрейма.

Синхронный режим выбирается записью в 1 бита CLKEN регистра USART_CR2. В синхронном режиме должны быть очищены следующие биты:

• Бит LINEN в регистре USART_CR2.
• Биты SCEN, HDSEL и IREN в регистре USART_CR3.

USART дает возможность пользователю управлять двунаправленным синхронным последовательным обменом данных в режиме master. Вывод CK работает как выход тактов передатчика USART. Никакие тактовые импульсы не посылаются через вывод CK во время бита start и бита stop. В зависимости от состояния бита LBCL в регистре USART_CR2 тактовые импульсы будут или не будут генерироваться во время последнего достоверного бита данных (маркер адреса, address mark). Бит CPOL в регистре USART_CR2 дает возможность выбрать полярность тактов, и бит CPHA в регистре USART_CR2 позволяет выбрать фазу внешних тактов (см. рис. 307, 308 и 309).

Рис. 307. Пример синхронной передачи USART.

Рис. 308. Диаграммы времени тактов USART (M=0).

* Бит LBCL управляет последним импульсом данных.

Рис. 309. Диаграммы времени тактов USART (M=1).

* Бит LBCL управляет последним импульсом данных.

Рис. 310. Время setup/hold данных RX. tSETUP = tHOLD = 1/16 времени бита.

Во время состояния Idle, преамбулы и отправки break внешний сигнал тактов CK не активируется.

В синхронном режиме передатчик USART работает точно так же, как в асинхронном режиме. Однако бит CK засинхронизирован с TX (в соответствии с настройками CPOL и CPHA), данные на TX синхронные.

В синхронном режиме приемник USART работает не так, как в асинхронном режиме. Если RE=1, то данные анализируются синхронно с сигналом CK (по фронту или спаду уровня, в зависимости от CPOL и CPHA), без какой-либо передискретизации. Время установки (setup time) и удержания (hold time) должно соблюдаться (зависит от baud rate: 1/16 от времени бита).

Примечание: вывод CK работает вместе с выводом TX. Таким образом, такты предоставляются только если разрешен передатчик (TE=1), и данные передаются (записан регистр данных USART_DR). Это означает, что невозможно принимать синхронные данные без передачи данных.

Конфигурация бит LBCL, CPOL и CPHA должна быть выбрана, когда и передатчик, и приемник запрещены (TE=RE=0), чтобы гарантировать корректную работу импульсов тактов. Эти биты не должны изменяться, когда разрешен передатчик или приемник.

Рекомендуется устанавливать биты TE и RE одной инструкцией, чтобы минимизировать время установки (setup time) и удержания (hold time) приемника.

USART поддерживает только режим master: он не может принимать или отправлять данные, связанные со входом тактов (CK всегда работает как выход).

Примечание: функция CK отличается в режиме Smartcard (см. далее описание этого режима).

Этот режим (single-wire, half-duplex) выбирается установкой в 1 бита HDSEL в регистре USART_CR3. В этом режиме должны быть очищены следующие биты:

• Биты LINEN и CLKEN в регистре USART_CR2.
• Биты SCEN и IREN в регистре USART_CR3.

USART может быть сконфигурирован для соответствия однопроводному полудуплексному протоколу, где линии сигналов TX и RX соединены внутри кристалла микроконтроллера (установкой бита HDSEL в регистре USART_CR3).

Как только HDSEL записан в 1:

• Сигналы TX и RX соединяются внутри.
• Внешний вывод RX больше не используется.
• Вывод TX всегда освобождается, когда данные не передаются. Таким образом, он работает как ввод/вывод (GPIO) в состоянии ожидания или приема. Это означает, что ввод/вывод TX должен быть сконфигурирован так, чтобы он был высокоомным входом (или выходом с открытым стоком), когда он не управляется от USART.

Кроме этой особенности, обмен данными такой же, как в обычном режиме USART. Конфликты на линии связи должны разрешаться программно (например, с использованием централизованного арбитра шины). В частности, передача никогда не блокируется аппаратно, и будет продолжаться, пока данные записываются в регистр данных при установленном бите TE.

Режим смарт-карты выбирается установкой бита SCEN в регистре USART_CR3. В режиме смарт-карты должны удерживаться очищенными следующие биты:

• Бит LINEN в регистре USART_CR2.
• Биты HDSEL и IREN в регистре USART_CR3.

Кроме того, должен быть установлен бит CLKEN, чтобы предоставить такты для смарт-карты.

Интерфейс Smartcard разработан для поддержки асинхронного протокола смарт-карт, как определено стандартом ISO 7816-3. USART должен быть сконфигурирован следующим образом:

• 8 бит плюс parity: M=1 и PCE=1 в регистре USART_CR1.
• 1.5 stop-бита при передаче и приеме: STOP=11 в регистре USART_CR2.

Примечание: также можно выбрать 0.5 stop-бита для приема, но рекомендуется использовать 1.5 stop-бита и для передачи, и для приема, чтобы избежать переключения между двумя конфигурациями.

Рис. 311 показывает примеры, как выглядит сигнал данных с ошибкой четности и без ошибки четности.

Рис. 311. Асинхронный протокол ISO 7816-3.

Когда USART подключен к смарт-карте, выход TX управляет двунаправленной линией, которая также управляется выходом смарт-карты. Ножка TX должна быть сконфигурирована как открытый сток. Smartcard это однопроводный, полудуплексный протокол обмена.

• Передача данных из регистра сдвига передачи осуществляется с гарантированной задержкой 1/2 такта скорости. При нормальном функционировании полная передача из регистра сдвига начнется сдвигом на следующем перепаде тактов скорости. В режиме Smartcard эта передача дополнительно задерживается на 1/2 такта скорости.

• Если была детектирована ошибка четности на приеме фрейма, запрограммированного с 0.5 или 1.5 периодом stop-бита, линия передачи подтягивается а лог. 0 на период тактов скорости после завершения приема фрейма. Это служит индикацией, что данные смарт-карты, переданные в USART не были корректно приняты. Этот сигнал NACK (подтягивание к лог. 0 линии передачи на 1 такт скорости) приведет к появлению ошибки фрейма на стороне передатчика (сконфигурированного с 1.5 stop-битом). Приложение должно обработать эту ситуацию повторной отправкой данных в соответствии с протоколом. Ошибка четности сигнализируется приемником для передатчика как NACK (No ACKnowledge), если установлен управляющий бит NACK, иначе NACK не передается.

• Установка флага TC может быть задержана путем программирования регистра защитного времени (Guard Time). При нормальном функционировании TC устанавливается, когда регистр сдвига передачи опустошается, и больше нет ожидающих передачи запросов. В режиме Smartcard пустой регистр сдвига передачи запускает счетчик защитного времени для счета до запрограммированного значения в регистре Guard Time. В течение защитного времени TC принудительно находится в лог. 0. Когда счетчик защитного времени достигнет запрограммированного значения, TC переводится в 1.

• На снятие флага TC режим смарт-карты не влияет.

• Если детектирована ошибка фрейма на стороне передатчика (по сигналу NACK от приемника), NACK не будет детектирован как start-бит блоком приема передатчика. В соответствии с протоколом ISO, длительность принятого NACK может быть 1 или 2 периода тактов скорости.

• На стороне приемника, если была детектирована ошибка четности, и был передан сигнал NACK, то он не будет детектирован как start-бит.

Примечание: символ break не имеет значения в режиме Smartcard. Данные 0x00 с ошибкой фрейма будут обработаны как данные, не как break.

Фрейм Idle передается, когда переключается бит TE. Фрейм Idle (как определено для других конфигураций) в протоколе ISO не определен.

Рис. 312 показывает, как сигнал NACK оцифровывается USART. В этом примере USART передает данные, и сконфигурирован с 1.5 stop-битом. Блок приемника USART разрешен, чтобы проверять целостность данных и сигнал NACK.

Рис. 312. Детектирование ошибки четности с использованием 1.5 stop-битов.

USART может предоставить такты для смарт-карты через выход CK. В режиме смарткарты CK не связан с обменом данными, он просто генерирует тактовую частоту, полученную из внутреннего входа тактов периферии через 5-разрядный прескалер. Коэффициент деления конфигурируется в регистре прескалера USART_GTPR. Частота CK может быть запрограммирована от fCK/2 до fCK/62, где fCK это частота тактов входа периферии.

Режим IrDA mode выбирается установкой бита IREN в регистре USART_CR3. В режиме IrDA должны сохраняться очищенными следующие биты:

• LINEN, STOP и CLKEN в регистре USART_CR2.
• SCEN и HDSEL в регистре USART_CR3.

Примечание: аббревиатура SIR означает Serial InfraRed, а ENDEC означает ENcoder-DECorer.

Физический слой IrDA SIR задает использовать схему модуляции с возвратом к нулю и инверсией RZI (Return to Zero Inverted), которая представляет лог. 0 как импульс инфракрасного излучения (см. рис. 313).

Рис. 313. Блок-схема IrDA SIR ENDEC.

Кодер передачи SIR модулирует выходной поток бит Non Return to Zero (NRZ) из USART. Выходной поток импульсов передается на внешний выходной драйвер и инфракрасный светодиод. USART поддерживает для SIR ENDEC только скорости до 115.2 Kbps. В нормальном режиме ширина передаваемого импульса задана как 3/16 от периода бита.

Декодер приемника SIR демодулирует поток return-to-zero бит из детектора инфракрасного излучения, и выводит последовательный поток бит NRZ в USART. Вход декодера в нормальном состоянии режима ожидания Idle находится в лог. 1 (состояние marking). Кодер передачи выводит противоположную полярность на вход декодера. Бит start детектируется, когда на входе декодера появляется лог. 0.

• IrDA является полудуплексным коммуникационным протоколом. Если передатчик занят (например USART передает данные в кодер IrDA), то любые данные на линии приема IrDA будут игнорироваться декодером IrDA, и если приемник занят (USART принимает декодированные данные из USART), то данные на сигнале TX из USART в IrDA не будут кодироваться IrDA. При приеме данных следует избегать передачи, поскольку передаваемые данные могут быть повреждены.

• 0 передается как импульс лог. 1, и 1 передается как лог. 0. Ширина импульса задана как 3/16 от выбранного периода бита в нормальном режиме (см. рис. 314).

Рис. 314. Модуляция данных IrDA (3/16) — нормальный режим.

• Декодер SIR преобразует совместимый с IrDA принимаемый сигнал в поток бит для USART.

• Логика приема SIR логически интерпретирует высокий уровень как лог. 1, и импульсы лог. 0 как лог. 0.

• Выходной сигнал кодера передачи имеет полярность, противоположную полярности входного сигнала декодера. Выходной сигнал SIR находится в лог. 0 при режиме ожидания (Idle).

• Спецификация IrDA требует приема импульсов, превышающих 1.41 мкс. Допустимая ширина импульса программируется. Логика детектирование импульсов помех (glitch detection) на стороне приемника отфильтровывает импульсы, ширина которых меньше 2 периодов PSC (PSC это значение прескалера, запрограммированное в регистре скорости низкого потребления энергии IrDA, USART_GTPR). Импульсы шириной меньше 1 периода PSC отбрасываются всегда, но импульсы шириной больше 1 периодпа и меньше 2 периодов могут быть приняты или отброшены, а импульсы больше 2 периодов будут приняты как нормальный импульс. Кодер/декодер IrDA не работает, когда PSC=0.

• Приемник может обмениваться данными с передатчиком в состоянии низкой потребляемой мощности.

• В режиме IrDA, поле бит STOP регистра USART_CR2 должно быть сконфигурировано для состояния «1 стоп-бит».

[IrDA в режиме низкого потребления]

Передатчик. В режиме низкого потребления (low-power mode) ширина импульса не поддерживается на 3/16 от периода бита. Вместо этого ширина импульса в 3 раза превышает маломощную скорость передачи, которая может быть минимум 1.42 МГц. Обычно это значение составляет 1.8432 МГц (1.42 МГц < PSC < 2.12 МГц). Программируемый делитель режима низкого потребления делит системную частоту, чтобы достичь этого значения.

Приемник. Прием в режиме пониженного потребления энергии подобен приему в обычном режиме. Для детектирования импульсов помех (glitch detection) USART должен отбрасывать импульсы, которые короче 1/PSC. Допустимый 0 принимается только если его длительность больше 2 периодов тактов IrDA низкого энергопотребления (значение PSC в регистре USART_GTPR).

Примечание: импульс шириной меньше 2 и больше 1 периода PSC отбрасывается не всегда.

Время установки приемника (set up time) должно управляться программой. Для физического слоя IrDA спецификация задает минимальную задержку 10 мс между передачей и приемом (IrDA является полудуплексным протоколом).

[Продолжительный непрерывный обмен на основе DMA]

USART может реализовать непрерывный обмен с помощью DMA. Запросы DMA для буферов приема и передачи генерируются независимо.

Передача с использованием DMA. Режим DMA может быть разрешен для передачи путем установки бита DMAT в регистре USART_CR3. Данные загружаются из области SRAM, сконфигурированной с использованием периферийного устройства DMA (см. спецификацию DMA [2]) для регистра USART_DR, каждый раз, когда установлен бит TXE. Для отображения канала DMA на передачу USART используйте следующую процедуру (x обозначает номер канала DMA):

1. Запишите адрес регистра USART_DR в регистр управления DMA, чтобы сконфигурировать его как место назначения передачи. Данные будут перемещаться по этому адресу из памяти после каждого события TXE.
2. Запишите адрес памяти в регистр управления DMA, чтобы сконфигурировать его как источник передачи. Эти данные будут загружаться в регистр USART_DR из этой памяти после каждого события TXE.
3. Сконфигурируйте общее количество передаваемых байт в регистр управления DMA.
4. Сконфигурируйте приоритет канала в регистре DMA.
5. Сконфигурируйте генерацию прерывания после половины / полной передачи, как этого требует приложение.
6. Очистите бит TC в регистре SR записью туда 0.
7. Активируйте канал в регистре DMA.

Когда достигнуто запрограммированное в контроллер DMA количество переданных байт, контроллер DMA сгенерирует прерывание по вектору канала DMA.

В режиме передачи как только DMA записал все данные для передачи (в регистре DMA_ISR установился флаг TCIF), флаг TC может отслеживаться, чтобы удостовериться в завершении обмена USART. Это необходимо перед запретом USART или входом в режим Stop, чтобы не повредилась последняя передача. Программа должна подождать, чтобы TC перешел в 1. Флаг TC остается очищенным во время всех передач данных, и установится аппаратно по окончанию передачи последнего фрейма.

Рис. 315. Передача с использованием DMA.

Прием с использованием DMA. Режим DMA может быть разрешен для приема путем установки бита DMAR в регистре USART_CR3. Данные загружаются из регистра USART_DR в область SRAM, сконфигурированную с использованием периферийного устройства DMA (см. спецификацию DMA [2]), всякий раз, когда принимается байт данных. Чтобы отобразить канал DMA для приема USART, используйте следующую процедуру:

1. Запишите адрес регистра USART_DR в регистр управления DMA, чтобы сконфигурировать его как источник приема. Данные будут перемещаться из этого адреса памяти после каждого события RXNE.
2. Запишите адрес памяти в регистр управления DMA, чтобы сконфигурировать его как место назначения приема. Эти данные будут загружаться из регистра USART_DR в эту память после каждого события RXNE.
3. Сконфигурируйте общее количество принимаемых байт в регистр управления DMA.
4. Сконфигурируйте приоритет канала в регистре DMA.
5. Сконфигурируйте генерацию прерывания после половины / полной передачи, как этого требует приложение.
6. Активируйте канал в регистре DMA.

Когда достигнуто количество данных, запрограммированное в контроллере DMA, контроллер DMA генерирует прерывание на векторе прерывания канала DMA. Бит DMAR в регистре USART_CR3 должен быть очищен программой в обработчике прерывания.

Рис. 316. Прием с использованием DMA.

Флаг ошибки и генерация прерывания при multibuffer обмене. В случае обмена с использованием нескольких буферов (multibuffer communication), если произойдет любая ошибка во время транзакции, флаг ошибки будет выставлен после текущего байта. Будет сгенерировано прерывание, если установлен бит разрешения этого прерывания. Для ошибки фрейма (framing error), ошибки переполнения (overrun error) и флага шума (noise flag), которые устанавливаются вместе с RXNE при однобайтовом приеме, здесь будет отдельный бит разрешения прерывания (бит EIE в регистре USART_CR3). Если бит EIE установлен, то будет генерироваться прерывание после текущего байта при любой из этих ошибок.

Можно управлять потоком последовательных данных между двумя устройствами, используя вход CTS и выход RTS (hardware flow control). Рис. 317 показывает, как соединить 2 устройства в этом режиме (выход RTS одного устройства соединяется со входом CTS другого):

Рис. 317. Аппаратное управление потоком данных между двумя USART.

Управление потоком RTS и CTS можно разрешить независимо записью в 1 соответствующих бит RTSE и CTSE (они находятся в регистре USART_CR3).

Управление потоком RTS. RTS расшифровывается как Ready To Send, т. е. «готов к передаче». Если разрешен RTS flow control (RTSE=1), то сигнал на выходе RTS выставляется (переводом в 0) тогда, когда приемник USART готов к приему новых данных. Когда регистр приема заполнен (т. е. данные еще не были забраны оттуда), сигнал RTS снимается (переводом в лог. 1), что служит индикацией для передатчика на другой стороне, что передачу следует приостановить по окончанию текущего фрейма. Рис. 318 показывает пример обмена с разрешенным RTS flow control.

Рис. 318. RTS flow control.

Управление потоком CTS. CTS расшифровывается как Clear To Send, т. е. «линия чиста для передачи». Если разрешен CTS flow control (CTSE=1), то передатчик проверяет вход CTS перед передачей следующего фрейма. Если сигнал CTS выставлен (подтянут к 0), то передаются следующие данные (подразумевается, что есть данные для передачи, другими словами, если TXE=0), иначе передача не произойдет. Когда CTS снимается во время передачи, текущая передача завершится перед остановкой передатчика.

Когда CTSE=1, бит статуса CTSIF автоматически установится аппаратурой, как только переключится вход CTS. Это показывает, когда приемник становится готов или не готов для обмена данными. Генерируется прерывание, если установлен бит CTSIE в регистре USART_CR3. На рисунке ниже дан пример обмена с разрешенным CTS flow control.

Рис. 319. CTS flow control.

Примечание: существует специальное поведение фреймов break — когда разрешено управление потоком CTS, передатчик не проверяет состояние входа CTS для отправки сигнала break.

[Прерывания USART]

Таблица 147. Запросы прерывания USART.

Событие прерывания Флаг события Бит разрешения
Transmit Data Register Empty (регистр данных передачи пуст) TXE TXEIE
Флаг CTS (сигнал, что можно продолжать передачу) CTS CTSIE
Transmission Complete (передача завершена) TC TCIE
Received Data Ready to be Read (принятые данные готовы для чтения) RXNE RXNEIE
Overrun Error Detected (обнаружена ошибка переполнения) ORE
Idle Line Detected IDLE IDLEIE
Parity Error (ошибка четности) PE PEIE
Флаг Break (обнаружен сигнал break на линии) LBD LBDIE
Флаг шума. Флаг overrun и ошибка фрейма в multibufer обмене. NF или ORE или FE EIE

События прерываний USART подсоединены к одному и тому же вектору прерывания (см. рис. 320).

Рис. 320. Диаграмма отображений событий USART на прерывание.

Во время передачи могут быть прерывания: Transmission Complete (передача завершена), Clear to Send (линия чиста для начала передачи) или Transmit Data Register empty (регистр данных передачи пуст).

Во время приема могут быть прерывания: Idle Line detection (определено состояние ожидание линии), Overrun error (ошибка переполнения, программа не успела прочитать принятые данные), Receive Data register not empty (регистр данных приема не пуст), Parity error (ошибка проверки четности), LIN break detection (определение сигнала прекращения передачи LIN), Noise Flag (флаг шума, только при многобуферном обмене) и Framing Error (ошибка фрейма, только при многобуферном обмене).

Все эти события генерируют прерывание, если установлен соответствующий бит разрешения прерывания.

[Конфигурация режима USART]

Таблица 148. USART mode configuration(1).

Режимы USART USART1 USART2 USART3 UART4 UART5 USART6
Асинхронный режим X X X X X X
Аппаратное управление потоком X X X NA NA X
Многобуферный обмен (DMA) X X X X X X
Многопроцессорный обмен X X X X X X
Синхронный режим X X X NA NA X
Smartcard X X X NA NA X
Полудуплекс (режим single-wire) X X X X X X
IrDA X X X X X X
LIN X X X X X X

Примечание (1): X = поддерживается; NA = не применимо.

[Регистры USART]

Таблица 149. Карта памяти регистров USART и их значения после сброса.

Границы адресов регистров см. в секции 2.3 «Memory map» даташита [1].

В описании функций регистров используются следующие сокращения:

read/write (rw) Программа может читать и записывать эти биты.

read-only (r) Программа может только читать эти биты.

write-only (w) Программа может только записывать в этот бит. Чтение бита вернет значение сброса.

read/clear (rc_w1) Программа может прочитать бит, а также сбросить его путем записью 1. Запись 0 не дает никакого эффекта.

read/clear (rc_w0) Программа может прочитать бит, а также сбросить его путем записью 0. Запись 1 не дает никакого эффекта.

read/clear by read (rc_r) Программа может прочитать этот бит. Чтение этого бита автоматически сбросит его в 0. Запись 0 в бит не дает никакого эффекта.

read/set (rs) Программа может прочитать, а также установить этот бит. Запись 0 в бит не дает никакого эффекта.

read-only write trigger (rt_w) Программа может прочитать этот бит. Запись 0 или 1 вызовет появление события (триггер), но не окажет никакого влияния на значение бита.

toggle (t) Программа может только переключить этот бит записью 1. Запись 0 не дает никакого эффекта.

Reserved (Res.) Зарезервированный бит, его значение должно сохраняться на значении сброса.

К регистрам периферийного устройства должен осуществляться доступ либо как к половинкам слова (half-word, 16 бит), либо как к словам (words, 32 бита).

Смещение адреса 0x00, значение после сброса 0x000000C0.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано CTS
rc_w0
LBD
rc_w0
TXE
r
TC
rc_w0
RXNE
rc_w0
IDLE
r
ORE
r
NF
r
FE
r
PE
r

Биты 31:10 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

CTS (бит 9): Флаг CTS. Этот бит установится аппаратно, когда на входе CTS меняется уровень, если установлен бит CTSE. Бит CTS очищается программно (записью туда 0). Будет сгенерировано прерывание, если CTSIE=1 в регистре USART_CR3.

0: не было изменения состояния линии CTS.
1: на линии CTS обнаружено изменение уровня.

Примечание: этот бит недоступен для UART4 и UART5.

LBD (бит 8): Флаг детектирования LIN break. Этот бит устанавливается аппаратурой, когда был обнаружен LIN break. Флаг очищается программно (записью в него 0). Будет сгенерировано прерывание, если LBDIE=1 в регистре USART_CR2.

0: LIN Break не был определен.
1: Был детектирован LIN break.

Примечание: генерируется прерывание, когда LBD=1, если LBDIE=1.

TXE (бит 7): регистр данных передачи пуст. Этот бит установится аппаратно, когда содержимое регистра TDR было передано в регистр сдвига передатчика. Будет сгенерировано прерывание, если бит TXEIE=1 в регистре USART_CR1. Бит TXE очищается при записи в регистр USART_DR.

0: данные не были переданы в регистр сдвига.
1: данные переданы в регистр сдвига.

Примечание: этот бит используется во время передачи одиночного буфера (single buffer transmission).

TC (бит 6): передача завершена. Этот бит установится аппаратно, если передаче фрейма, содержащего данные, была завершена, и если установлен бит TXE. Будет сгенерировано прерывание, если бит TCIE=1 в регистре USART_CR1. Бит TC очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет запись в регистр USART_DR). Также бит TC может быть очищен записью в него 0. Эта очистка рекомендуется только для обмена с несколькими буферами (multibuffer communication).

0: передача не завершена.
1: передача завершена.

RXNE (бит 5): регистр данных приема не пуст. Этот бит установится аппаратно, когда содержимое регистра сдвига RDR было передано в регистр USART_DR. Будет сгенерировано прерывание, если бит RXNEIE=1 в регистре USART_CR1. Бит RXNE очищается чтением регистра USART_DR register. Также бит RXNE может быть очищен записью в него 0. Эта очистка рекомендуется только для обмена с несколькими буферами (multibuffer communication).

0: данные не приняты.
1: приняты данные, они готовы для чтения.

IDLE (бит 4): детектировано состояние ожидания на линии (IDLE line). Этот бит устанавливается аппаратно, когда на линии было определено состояние ожидания (Idle Line). Будет сгенерировано прерывание, если бит IDLEIE=1 в регистре USART_CR1. Бит IDLE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR).

0: не было определено состояние ожидания на линии.
1: линия в состоянии ожидания.

Примечание: бит IDLE не установится снова, пока сам не установится бит RXNE (т. е. пока не произойдет новое определение состояния ожидания на линии).

ORE (бит 3): ошибка переполнения (OverRun Error). Этот бит установится аппаратно, когда принятое в настоящий момент слово в регистре сдвига готово к передаче в регистр RDR, но старое содержимое регистра данных не было прочитано (RXNE=1). Будет сгенерировано прерывание, если бит RXNEIE=1 в регистре USART_CR1. Бит ORE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR).

0: не было ошибки переполнения.
1: детектировано переполнение приема, принятые данные потеряны.

Примечание: когда этот бит установился, старое содержимое регистра RDR не теряется, однако регистр сдвига будет перезаписан. В случае многобуферного обмена будет сгенерировано прерывание по флагу ORE, если установлен бит EIE в регистре USART_CR3.

NF (бит 2): флаг детектирования шума. Этот бит установится аппаратно, когда в принятом фрейме был обнаружен шум. Бит NF очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR).

0: шума не было.
1: был обнаружен шум.

Примечание: этот бит не генерирует прерывание, поскольку появляется одновременно с битом RXNE, который сам по себе генерирует прерывание на флаге NF в случае многобуферного обмена, если установлен бит EIE в регистре USART_CR3.

Когда на линии нет шума, флаг NF может быть запрещен программированием в 1 бита ONEBIT, чтобы увеличить допуск USART на девиации (см. выше секцию «Допуск ухода тактовой частоты для приемника USART»).

FE (бит 1): Ошибка фрейма. Этот бит установится аппаратно, когда произошла рассинхронизация, был чрезмерный шум, или был детектирован символ break. Бит FE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR).

0: не было ошибки фрейма.
1: была определена ошибка фрейма или символ break.

Примечание: этот бит не генерирует прерывание, поскольку появляется одновременно с битом RXNE, который сам по себе генерирует прерывание. Если передаваемое в настоящий момент слово приведет к одновременным ошибкам frame error и overrun error, то слово будет принято, и установится только бит ORE. Будет сгенерировано прерывание по флагу FE в случае многобуферного обмена, если установлен бит EIE.

PE (бит 0): ошибка проверки четности (Parity Error). Этот бит установится аппаратно, когда на приеме была обнаружена ошибка четности. Бит PE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет запись в регистр USART_DR). Программа должна ожидать установки флага RXNE перед очисткой флага PE. Будет сгенерировано прерывание, если бит PEIE=1 в регистре USART_CR1.

0: нет ошибки проверки четности.
1: ошибка проверки четности.

Смещение адреса 0x04, значение после сброса 0xXXXXXXXX.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезервировано DR[8:0]
rw

Биты 31:9 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

DR[8:0] (биты 8 .. 0): Значение данных. Содержит принятый или передаваемый символ данных, в зависимости от операции с регистром — чтение или запись.

Регистр данных выполняет двойную функцию (чтение и запись) поскольку физически он состоит из двух регистров — один для передачи (TDR) и еще один для приема (RDR). Регистр TDR предоставляет параллельный интерфейс между внутренней шиной и выходным регистром сдвига см. рис. 296. Регистр RDR предоставляет параллельный интерфейс между входным регистром сдвига и внутренней шиной.

Когда разрешена передача с генерацией бита четности (установлен в 1 бит PCE регистра USART_CR1), то значение, записанное в MSB (бит 7 или бит 8, в зависимости от настроенной длины данных), не оказывает никакого эффекта, потому что заменяется аппаратно вычисленным битом четности. Когда на приеме разрешен контроль четности, то значение, прочитанное из старшего бита данных (MSB) является принятым битом четности.

Примечание: счетчики скорости останавливают счет, если биты TE или RE запрещены.

Смещение адреса 0x08, значение после сброса 0x00000000.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
DIV_Mantissa[11:0]
rw
DIV_Fraction[3:0]
rw

Биты 31:16 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

DIV_Mantissa[11:0] (биты 15:4): мантисса USARTDIV. Эти 12 бит определяют мантиссу делителя USART (USARTDIV).

DIV_Fraction[3:0] (биты 3:0): дробная часть USARTDIV. Эти 4 бита определяют дробную часть делителя USART (USARTDIV). Когда OVER8=1, бит DIV_Fraction3 не учитывается, и должен быть очищен.

Смещение адреса 0x0C, значение после сброса 0x00000000.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
OVER8
rw
зарезерв. UE
rw
M
rw
WAKE
rw
PCE
rw
PS
rw
PEIE
rw
TXEIE
rw
TCIE
rw
RXNEIE
rw
IDLEIE
rw
TE
rw
RE
rw
RWU
rw
SBK
rw

Биты 31:16 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

OVER8 (бит 15): режим передискретизации приема (oversampling).

0: передискретизация на 16.
1: передискретизация на 8.

Примечание: передискретизация на 8 недоступна в режимах режимах Smartcard, IrDA и LIN: когда SCEN=1, IREN=1 или LINEN=1, то OVER8 принудительно сбрасывается в 0 аппаратурой.

Бит 14 зарезервирован, его значение должно сохраняться в состоянии сброса (0).

UE (бит 13): разрешение USART. Когда этот бит очищен, прескалеры и выходы USART останавливаются по окончанию текущей передачи байта, чтобы снизить потребление энергии. Этот бит устанавливается и очищается программой.

0: прескалер и выходы USART запрещены.
1: USART разрешен.

M (бит 12): длина слова. Этот бит определяет длину слова данных, и как следствие длину фрейма. Бит устанавливается или очищается программно.

0: 1 start-бит, 8 бит данных, n stop-бит.
1: 1 start-бит, 9 бит данных, n stop-бит.

Примечание: бит M не должен модифицироваться во время передачи данных (и приема, и передачи).

WAKE (бит 11): метод пробуждения (wakeup). Этот бит определяет, как будет разбужен USART, бит устанавливается или очищается программой.

0: Idle Line (состояние ожидания на линии).
1: Address Mark (адресная метка).

PCE (бит 10): разрешение контроля четности (Parity Control Enable). Этот бит выбирает аппаратную генерацию и проверку четности данных. Когда контроль четности разрешен, вычисленная четность вставляется в позицию MSB (старший бит, 9-й при M=1 или 8-й при M=0), и на приеме этот бит также проверяется на четность (или нечетность). Бит PCE устанавливается и очищается программой. Будучи установленным, PCE активируется посте текущего байта (на приеме и передаче).

0: контроль четности разрешен.
1: контроль четности запрещен.

PS (бит 9): выбор варианта контроля четности. Этот бит выберет, как вычисляется и проверяется patity — либо на четность, либо на нечетность, когда эта функция разрешена (PCE=1). Бит устанавливается и очищается программно. Вариант контроля выбирается после текущего байта.

0: проверка по принципу четности.
1: проверка по принципу нечетности.

PEIE (бит 8): разрешение прерывания на ошибке четности. Бит устанавливается и очищается программно.

0: прерывание запрещено.
1: генерируется прерывание USART, когда PE=1 в регистре USART_SR.

TXEIE (бит 7): разрешение прерывания опустошения буфера передачи. Бит устанавливается и очищается программно.

0: прерывание запрещено.
1: генерируется прерывание USART, когда TXE=1 в регистре USART_SR.

TCIE (бит 6): разрешение прерывания по завершению передачи. Этот бит устанавливается и очищается программно.

0: прерывание запрещено.
1: генерируется прерывание USART, когда TC=1 в регистре USART_SR.

RXNEIE (бит 5): разрешение прерывания по завершению приема (регистр данных приема не пуст). Этот бит устанавливается и очищается программно.

0: прерывание запрещено.
1: генерируется прерывание USART, когда ORE=1 или RXNE=1 в регистре USART_SR.

IDLEIE (бит 4): разрешение прерывания на состоянии ожидания линии (IDLE). Этот бит устанавливается и очищается программно.

0: прерывание запрещено.
1: генерируется прерывание USART, когда IDLE=1 в регистре USART_SR.

TE (бит 3): разрешение передатчика. Этот бит разрешает работу передатчика, бит устанавливается и очищается программно.

0: передатчик запрещен.
1: передатчик разрешен.

Примечание: во время передачи импульс 0 на бите TE (0, за которым следует 1) приведет к передаче преамбулы (сигнала ожидания на линии, idle line) после текущего слова, кроме режима smartcard. Когда бит TE установлен, здесь есть 1-битная задержка времени перед тем, как начнется передача.

RE (бит 2): разрешение приемника. Этот бит устанавливается и очищается программно.

0: приемник запрещен.
1: приемник разрешен, и начинает искать на линии start-бит.

RWU (бит 1): пробуждение приемника. Бит определяет, находится ли USART в режиме молчания (mute mode) или нет. Он устанавливается и очищается программой, и может быть очищен аппаратно, когда распознана распознана последовательность пробуждения (wakeup sequence).

0: приемник в активном режиме.
1: приемник в режиме молчания (mute mode).

Примечание: перед выбором режима молчания (установкой бита RWU) USART должен сначала принять байт данных, иначе USART не может работать в режиме молчания с пробуждением на детектировании ожидания линии (wakeup by Idle line). В конфигурации пробуждения от метки адреса (Address Mark Detection wakeup, бит WAKE=1) бит RWU не может быть изменен программой, когда установлен бит RXNE.

SBK (бит 0): отправка сигнала break. Установка этого бита используется для отправки символа остановки передачи (send break). Бит может быть установлен и очищен программой. Он должен быть установлен программой, и будет сброшен аппаратно во время stop-бита символа break.

0: не будет передан символ break.
1: будет передан символ break.

Смещение адреса 0x10, значение после сброса 0x00000000.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезерв. LINEN
rw
STOP[1:0]
rw
CLKEN
rw
CPOL
rw
CPHA
rw
LBCL
rw
зарезерв. LBDIE
rw
LBDL
rw
зарезерв. ADD[3:0]
rw

Биты 31:15 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

LINEN (бит 14): разрешение режима LIN. Этот бит устанавливается и очищается программой.

0: режим LIN запрещен.
1: режим LIN разрешен.

Режим LIN разрешает функцию отправки сигналов LIN Synch Break (13 бит в лог. 0), используя бит SBK в регистре USART_CR1 и функцию детектирования сигналов LIN Sync break.

STOP (биты 13 и 12): биты настройки длительности стоп-бита.

00: 1 stop-бит.
01: 0.5 stop-бит.
10: 2 stop-бита.
11: 1.5 stop-бита.

Примечание: 0.5 stop-бита и 1.5 stop-бита недоступны для UART4 и UART5.

CLKEN (бит 11): разрешение тактирования. Этот бит позволяет разрешить работу выхода тактов CK.

0: вывод CK запрещен.
1: вывод CK разрешен.

Примечание: этот бит недоступен для UART4 и UART5.

CPOL (бит 10): полярность тактов. Бит позволяет выбрать полярность выхода тактов, когда вывод CK выводит такты в синхронном режиме. Вместе с битом CPHA бит CPOL определяет желаемую взаимосвязь данных и тактов (см. рисунки 308 и 309).

0: постоянное значение 0 на выводе CK вне окна передачи.
1: постоянное значение 1 на выводе CK вне окна передачи.

Примечание: этот бит недоступен для UART4 и UART5.

CPHA (бит 9): фаза тактов. Бит позволяет выбрать фазу выхода тактов, когда вывод CK выводит такты в синхронном режиме. Вместе с битом CPOL бит CPHA определяет желаемую взаимосвязь данных и тактов (см. рисунки 308 и 309).

0: первое изменение сигнала синхронизации является первым перепадом захвата данных.
1: второе изменение сигнала синхронизации является первым перепадом захвата данных.

Примечание: этот бит недоступен для UART4 и UART5.

LBCL (бит 8): тактовый импульс последнего бита. Бит позволяет выбрать, связан ли тактовый импульс с последним переданным битом данных (MSB). Тактовые импульсы выводятся на ножку CK в синхронном режиме.

0: тактовый импульс на вывод CK на последнем бите не выводится.
1: на последнем бите выводится тактовый импульс на вывод CK.

Примечания: последний бит это 8-й или 9-й бит данных, в зависимости от формата 8/9 бит, выбираемого битом M регистра USART_CR1. Бит LBCL недоступен для UART4 и UART5.

Бит 7 зарезервирован, его значение должно сохраняться в состоянии сброса (0).

LBDIE (бит 6): разрешение прерывания детектирования LIN break. Маска прерывания break (детектирование break с использованием разделителя break).

0: прерывание запрещено.
1: генерируется прерывание всякий раз, когда LBD=1 в регистре USART_SR.

LBDL (бит 5): длина детектирования LIN break. Позволяет выбрать между 11 битами или 10 битами детектирования break.

0: 10-bit break detection.
1: 11-bit break detection.

Бит 4 зарезервирован, его значение должно сохраняться в состоянии сброса (0).

ADD[3:0] (биты 3:0): адрес узла USART. Это битовое поле дает адрес узла USART, используется в многопроцессорном обмене во время режима молчания (mute mode), для пробуждения USART при детектировании метки адреса (address mark detection).

Смещение адреса 0x14, значение после сброса 0x00000000.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
зарезерв.
ONEBIT
rw
CTSIE
rw
CTSE
rw
RTSE
rw
DMAT
rw
DMAR
rw
SCEN
rw
NACK
rw
HDSEL
rw
IRLP
rw
IREN
rw
EIE
rw

Биты 31:12 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

ONEBIT (бит 11): разрешение режима одной выборки на бит. Дает возможность выборки метода оцифровки сигнала. Когда выбран метод одной выборки на бит, флаг детектирования шума (noise detection flag, NF) запрещен.

0: мажоритарный метод трех выборок на бит.
1: метод одной выборки на бит.

Примечание: функция ONEBIT применима только к битам данных. Это не относится к анализу бита START.

CTSIE (бит 10): разрешение прерывания CTS.

0: прерывание запрещено.
1: прерывание генерируется всякий раз, когда CTS=1 в регистре USART_SR.

Примечание: этот бит недоступен для UART4 и UART5.

CTSE (бит 9): разрешение CTS.

0: запрещено аппаратное управление потоком CTS.
1: разрешен режим CTS, данные передаются только тогда, когда на входе CTS лог. 0. Если на CTS лог. 1, когда передаются данные, то передача завершается перед тем, как остановиться. Если записан регистр данных, когда CTS в состоянии лог. 1, то передача откладывается до момента, когда на CTS появится лог. 0.

Примечание: этот бит недоступен для UART4 и UART5.

RTSE (бит 8): разрешение RTS.

0: запрещено аппаратное управление потоком RTS.
1: разрешен выходной сигнал RTS, данные запрашиваются только когда есть место в буфере приема. Ожидается, что передача данных прекратится после того, как будет передан текущий символ. Выход RTS аппаратно переводится в лог. 0, когда USART может принимать данные.

Примечание: этот бит недоступен для UART4 и UART5.

DMAT (бит 7): разрешение DMA передатчика. Этот бит устанавливается и сбрасывается программой.

0: режим DMA для передачи запрещен.
1: разрешен режим DMA для передачи.

DMAR (бит 6): разрешение DMA приемника. Этот бит устанавливается и сбрасывается программой.

0: режим DMA для приема запрещен.
1: разрешен режим DMA для приема.

SCEN (бит 5): разрешение режима Smartcard.

0: режим Smartcard запрещен.
1: режим Smartcard разрешен.

Примечание: этот бит недоступен для UART4 и UART5.

NACK (бит 4): разрешение Smartcard NACK.

0: запрещена передача NACK в случае ошибки четности.
1: разрешена передача NACK в случае ошибки четности.

Примечание: этот бит недоступен для UART4 и UART5.

HDSEL (бит 3): выбор полудуплекса. Бит выбирает режим Single-wire Half-duplex.

0: режим полудуплекса не выбран.
1: выбран режим полудуплекса.

IRLP (бит 2): низкопотребляющий режим IrDA (Low-power mode). Бит используется для выбора между нормальным IrDA и низкопотребляющим IrDA.

0: нормальный режим.
1: режим низкого потребления.

IREN (бит 1): разрешение режима IrDA. Этот бит устанавливается и сбрасывается программой.

0: IrDA запрещен.
1: IrDA разрешен.

EIE (бит 0): разрешение прерывания ошибки (Error Interrupt Enable). Бит нужен для разрешения генерации прерывания в случае ошибки фрейма (framing error, FE=1), переполнения (overrun error, ORE=1) или флага шума (noise flag, NF=1) в регистре USART_SR, в случае многобуферного обмена (Multi Buffer Communication, DMAR=1 в регистре USART_CR3).

0: прерывание запрещено.
1: прерывание генерируется, когда DMAR=1 в регистре USART_CR3, и установлен любой из бит FE=1, ORE=1 или NF=1 в регистре USART_SR.

Смещение адреса 0x18, значение после сброса 0x00000000.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
GT[7:0]
rw
PSC[7:0]
rw

Биты 31:16 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули).

GT[7:0] (биты 15 .. 8): значение защитного времени (Guard Time). Это битовое поле дает значение защитного времени в единицах тактов скорости (baud clock). Это используется в режиме Smartcard. Флаг завершения передачи (Transmission Complete, TC) установится после этого защитного времени.

Примечание: эти биты недоступны для UART4 и UART5.

PSC[7:0] (биты 7 .. 0): значение прескалера.

IrDA Low-power mode: PSC[7:0] = IrDA Low-Power Baud Rate. Используется для программирования прескалера, чтобы поделить системную тактовую частоту, чтобы достичь частоты низкого энергопотребления. Источник тактов делится на значение, заданное в регистре (8 значащих бит):

00000000: зарезервировано — не программируйте это значение.
00000001: делит источник тактов на 1.
00000010: делит источник тактов на 2.

В нормальном режиме IrDA: поле PSC должно быть установлено в 00000001.

В режиме Smartcard: PSC[4:0]: значение прескалера. Используется программирование прескалера для деления системной тактовой частоты, чтобы предоставить такты смарт-карты. Значение, заданное в этом регистре (5 значащих бит), умножается на 2, чтобы получить коэффициент деления исходной частоты тактов:

00000: зарезервировано — не программируйте это значение.
00001: делит источник тактов на 2.
00010: делит источник тактов на 4.
00011: делит источник тактов на 6.

Примечание: биты [7:5] не оказывают влияния в режиме Smartcard. Биты PSC недоступны для UART4 и UART5.

[Ссылки]

1. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs site:st.com.
2. STM32F429: контроллер DMA.

STM32F103VCT6, Микроконтроллер ARM, управление двигателем, 32бита, 72 МГц, [LQFP-100]

Описание

The STM32F103VCT6 is a high density performance line ARM Cortex-M3 32bit microcontroller in 100 pin LQFP package. It incorporates high performance RISC core with 72MHz operating frequency, high speed embedded memories, extensive range of enhanced I/Os and peripherals connected to two APB buses. The STM32F103VCT6 features 12bit ADC, timers, PWM timer, standard and advanced communication interfaces. A comprehensive set of power saving mode allows design of low power applications.

• Operating voltage range from 2V to 3.6V
• 256Kbytes of flash memory
• 48Kbytes of SRAM
• CRC calculation unit, 96bit unique ID
• Three 12bit, 1µs A/D converter (up to 16 channels) and two 12bit DAC 92 channel
• Four general purpose, two advanced control and two basic timers
• 80 fast I/O ports
• Serial wire debug (SWD) and JTAG interfaces
• Three SPI, two I2C, five USART, one USB, one SDIO and one CAN interfaces
• Ambient operating temperature range from -40°C to 85°C

Технические параметры

Серия stm32 f1
Ядро arm cortex-m3
Ширина шины данных 32-бит
Тактовая частота 72 мгц
Количество входов/выходов 80
Объем памяти программ 256 кбайт (256k x 8)
Тип памяти программ flash
Объем RAM 48k x 8
Наличие АЦП/ЦАП ацп 16x12b/цап 2x12b
Встроенные интерфейсы can, i2c, irda, lin, spi, uart, usb
Встроенная периферия dma, pwm, pdr, por, pvd, pwm, tempsensor, wdt
Напряжение питания 2…3.6 в
Рабочая температура -40…+85c
Корпус LQFP-100 (14 x 14)
Вес, г 2.9

Техническая документация

Дополнительная информация

Datasheet STM32F103VCT6
Datasheet STM32F103VCT6
SMD справочник
Типы корпусов импортных микросхем

Прошивка STM32 через UART при наличии hex-файла — 19dx.ru — R0WBH

Данная статья вам поможет прошить STM32 через UART, если у вас есть скомпилированный hex-файл прошивки.

Нам понадобится любой USB-UART адаптер из следующих:

  • Silicon Labs CP2102;
  • FTDI FT232RL;
  • Prolific PL2303;
  • или любой другой.

Например, такой:

Или такой:

Качаем Flash Loader Demonstrator. Подключаем плату к компьютеру через USB-UART адаптер. Схема подключения такая:

A9 (TX) — RX
A10 (RX) — TX

Перемычку BOOT0 ставим в положение 1 и нажимаем Reset. Это переключит плату в режим загрузчика. В положении 0 данная перемычка включает режим выполнения пользовательской программы сразу после включения/сброса.

Запускаем программу. Настраиваем параметры порта. Если в процессе загрузки программы возникает ошибка, попробуйте установить меньшую скорость передачи. У меня всё работает и на максимальных скоростях.

Здесь мы видим сообщение, что микросхему успешно удалось прочитать. Если это не удаётся, то значит стоит защита от чтения, которую можно снять соответствующей кнопкой, при этом текущее содержимое будет уничтожено. Функцию защиты можно использовать для защиты программы от копирования. Также здесь мы можем увидеть размер флэш-памяти микроконтроллера.

Здесь мы видим адреса страниц памяти, а также их состояние (защита от чтения/записи). Просто жмём Next.

Вот здесь уже предстоит выбрать, что мы хотим сделать с микроконтроллером, а точнее с его памятью. Можно очистить память (полностью или частично), загрузить программу, выгрузить программу из памяти в файл, установить защиту, либо произвольно отредактировать данные. Выбираем загрузку на устройство (Download to device). Выбираем hex-файл с прошивкой. Галочка «Verify after download» позволяет проверить правильность записи программы. Если же поставить галочку «Jump to the user program», то программа будет выполнена сразу же после загрузки, даже без возвращения перемычки BOOT0 на место и перезагрузки контроллера.

Нажимаем Next и если всё пройдёт успешно, то МК будет прошит.


Обратите внимание, что загрузчик «намертво» прошит в STM32 и стереть его невозможно. Это делает данные микроконтроллеры неубиваемыми в плане прошивки. При неудачной заливке программы, просто необходимо перепрошить её ещё раз.

Обзор ARM-микроконтроллеров от STMicroelectronics

Рис. 3. Архитектура микроконтроллеров семейства STR750 

Таблица 4. Характеристики семейства STR750

Семейство STR910 отличается наличием 10/100 Ethernet с выделенным для него каналом прямого доступа к памяти (DMA), который снижает нагрузку ЦПУ. Гибкая система тактирования позволяет достичь потребления менее 1 мкА в режиме real-time clock. Поддерживает USB, CAN, SPI, I2C, UART/IrDA, имеет большое число таймеров, до 80 портов ввода-вывода, толерантных к напряжению 5 В.

Семейство STM32 построено на базе ядра ARM Cortex-M3, специально разработанного для встраиваемых, недорогих приложений реального времени. Имеют высокое соотношение производительность/потребление. Компания STMicroelectronics непосредственно принимала участие в разработке этого ядра, поэтому одной из первых предложила решения на базе Cortex-M3 (рисунок 4).

Рис. 4. Архитектура микроконтроллеров семейства STM32

Таблица 5. Характеристики семейства STR910;

НаименованиеFlash-
память,
кбайт
ОЗУ,
кбайт
АЦП,
кана-
лов,
бит
Таймеры  Последо-
вательный
интер-
фейс
Порты
ввода-
вывода
общего
назна-
чения
КорпусUпит,
В
Особен-
ности
12- или
16-бит
IC/OC/
PWM
дру-
гие
STR910FM32x 256+32648×107×16-бит 
(8, 8, 7)
WDT, RTC2xSPI, 2xFC, 3xUART wirDA40 (16)LQFP80ядро 1,8 V0 2,7…3,6CAN
STR910FW32x 256+326480 (16)LQFP128CAN, EMI
STR911FM42x 256+329640 (16)LQFP80CAN, USB
STR911FM44x 512+329640 (16)LQFP80
STR912FW42x 256+329680 (16)LQFP128Ethernet, USB, CAN, EMI
STR912FW44x 512+329680 (16)LQFP128

Микроконтроллеры семейства STM32 находят применение в таких приложениях, как промышленные сети, PLC, инверторы, принтеры, сканеры, системы аварийной сигнализации, системы двусторонней видеосвязи, системы кондиционирования воздуха, измерители мощности, глюкометры, приложения с батарейным питанием, системы управления приводами, периферийные устройства ПК, цифровые камеры, GPS-устройства.

Семейство STM32 состоит из двух подсемейств, STM32F103 и STM32F101, отличающихся по производительности и составу периферийных устройств (рисунок 5). Но так как эти подсемейства совместимы по выводам, разработчик может легко заменять одно на другое, масштабируя свое приложение в зависимости от требований.

 

Рис. 5. Архитектура микроконтроллеров семейства STM32

Таблица 6. Характеристики семейства STM32

НаименованиеПрограм-
миру-
емая
Flash-
память
Память
прог-
рамм,
кбайт
ОЗУ,
кбайт
ТаймерыПоследова-
тельный
интерфейс
Порты
ввода-
вывода
КорпусUпит,
В
12- или
16-бит
IC/OC/
PWM
дру-
гие
STM32 (ARM Cortex-M3) — 32-разрядные микроконтроллеры  
36 pinsSTM32F101T6 3262×16-бит (8/8/8)2xWDG, RTC,
24-разряд-
ный обрат-
ный счетчик
1xSPI/1xI2C/
2xUSART*
26 (26)QFN362…3,6
STM32F101T8 64103×16-бит (12/12/12)2xSPI/2xI2C/
3xUSART*
26 (26)QFN362…3,6
48 pinsSTM32F101C6 3262×16-бит (8/8/8)1xSPI/1xI2C/
2xUSART*
36 (36)LQFP482…3,6
STM32F101C8 64103×16-бит (12/12/12)2xSPI/2xI2C/
3xUSART*
36 (36)LQFP482…3,6
STM32F101CB 128163×16-бит (12/12/12)2xSPI/2xI2C/
3xUSART*
36 (36)LQFP482…3,6
64 pinsSTM32F101R6 3262×16-бит (8/8/8)1xSPI/1xI2C/
2xUSART*
51 (51)LQFP642…3,6
STM32F101R8 64103×16-бит (12/12/12)2xSPI/2xI2C/
3xUSART*
51 (51)LQFP642…3,6
STM32F101RB 128163×16-бит (12/12/12)2xSPI/2xI2C/
3xUSART*
51 (51)LQFP642…3,6
100 pinsSTM32F101V8 64103×16-бит (12/12/12)2xSPI/2xI2C/
3xUSART*
80 (80)LQFP1002…3,6
STM32F101VB 128163×16-бит (12/12/12)2xSPI/2xI2C/
3xUSART*
80 (80)LQFP1002…3,6
36 pinsSTM32F103T6 32103×16-бит (12/12/14)1xSPI/1xI2C/
2xUSART7USB/
CAN
26 (26)QFN362…3,6
STM32F103T8 64204×16-бит (16/16/18)2xSPI/2xI2C/
3xUSART7USB/
CAN
26 (26)QFN362…3,6
48 pinsSTM32F103C6 32103×16-бит (12/12/14)1xSPI/1xI2C/
2xUSART7USB/
CAN
36 (36)LQFP482…3,6
STM32F103C8 64204×16-бит (16/16/18)2xSPI/2xI2C/
3xUSART7USB/
CAN
36 (36)LQFP482…3,6
STM32F103CB 128204×16-бит (16/16/18)2xSPI/2xI2C/
3xUSART7USB/
CAN
36 (36)LQFP482…3,6
64 pinsSTM32F103R6 32103×16-бит (12/12/14)1xSPI/1xI2C/
2xUSART7USB/
CAN
51 (51)LQFP642…3,6
STM32F103R8 64204×16-бит (16/16/18)2xSPI/2xI2C/
3xUSART7USB/
CAN
51 (51)LQFP642…3,6
STM32F103RB 128204×16-бит (16/16/18)2xSPI/2xI2C/
3xUSART7USB/
CAN
51 (51)LQFP642…3,6
100 pinsSTM32F103V8 64204×16-бит (16/16/18)2xSPI/2xI2C/
3xUSART7USB/
CAN
80 (80)LQFP100/
BGA100
2…3,6
STM32F103VB 128204×16-бит (16/16/18)2xSPI/2xI2C/
3xUSART7USB/
CAN
80 (80)LQFP100/
BGA100
2…3,6
* (IrDA/ISO7816/LIN master/slave)

В заключение можно еще раз упомянуть о том, что одно из достоинств ARM микроконтроллеров — большой выбор отладочных средств. В число компаний, предлагающих инструментарий для ARM-микроконтроллеров STMicroelectronics, кроме ее самой, входят такие компании как Keil, IAR, Hitex, Nohau, GreenHills, Olimex и многие другие. Для начала работы можно подобрать инструментарий, наиболее близкий по своим характеристикам к разрабатываемому устройству.

 

Рис. 6. Отличия STM32F103 и STM32F101

Всю необходимую документацию по ядру ARM можно найти на сайте http://www.arm.com/ .

 

 

  Получение технической информации, заказ образцов, поставка —
e-mail: [email protected]

STM32F103 Передача USART (с использованием Keil и STMCubeMX): 3 шага

Теперь нажмите «черную» кнопку отдыха на плате «STM32».

Плата STM32 теперь должна передать строку: «Hello World by ARK».

Теперь, как мы знаем, плата STM32 будет последовательно передавать это на наш ПК через порт, к которому он подключен. Итак, чтобы просмотреть эту передачу, нам нужно какое-то программное обеспечение, которое будет считывать этот последовательный ввод из порта. Это программное обеспечение нам также понадобится в будущем.Для этого воспользуемся Docklight.

Откройте извлеченную папку (в то время как вы должны были загрузить в нашем руководстве по началу работы. Если у вас нет, вы можете использовать Google для «docklight» и загрузить файл установки.) Теперь перейдите в папку «docklight» и дважды щелкните «setup» .EXE». Если вас попросят разрешения, скажите «ДА». Появится такое окно.

{См. Изображение: [5]}

Нажмите «Далее».

{См. Изображение: [6]}

Нажмите «Далее».

{См. Изображение: [7]}

Выберите место для установки и нажмите «Далее».

{См. Изображение: [8]}

Щелкните «ДАЛЕЕ».

{См. Изображение: [9]}

Щелкните «ДАЛЕЕ».

{См. Изображение: [10]}

Нажмите «УСТАНОВИТЬ». Начнется установка Docklight:

{см. Изображение: [11]}

Через некоторое время:

{см. Изображение: [12]}

Нажмите «Готово».

Если не открывается, откройте Docklight.

Появится такое окно:

{См. Изображение: [13]}

Нажмите «ОК». Затем появится такое окно:

{См. Изображение: [14]}

Нажмите «Продолжить».

Теперь у вас должно быть это окно:

{См. Изображение: [15]}

Дважды щелкните «COM1» в правом верхнем углу. Появится такое окно:

{См. Изображение: [17]}

Теперь, удерживая нажатой клавишу Windows, нажмите клавишу R («Выполнить»)

Появится такое окно:

{См. Изображение: [18]}

Введите «devmgmt.msc »и нажмите« ОК ». «Диспетчер устройств появится», как показано ниже:

{См. Изображение: [19]}

Теперь откройте «Порты (COM и LPT)» и прочтите «COMNo. «Перед виртуальным COM-портом STMicroelectronics STlink». В моем случае это «COM10». Теперь вернитесь к «docklight» и выберите «COM10…»

{См. Изображение: [20]}

Выберите скорость передачи: 115200.

{См. Изображение: [21]}

И нажмите «ОК». Теперь вы должны увидеть такое окно:

{См. Изображение: [22]}

А теперь нажмите кнопку «Начать связь».Или нажмите «F6». Нажмите «Black Reset button» на вашей плате STM. И вы увидите «Hello World by ARK», которое было передано вашей «STMBoard».

Отправка текстовых команд в STM32 с USART

Если вы думаете, что ваша плата STM32 чувствует себя одиноко, вы можете подключить ее к ноутбуку. Один из способов сделать это — USART. Это, наверное, самый простой способ. Например, предположим, что мы хотим отправлять текстовые команды с ноутбука на плату STM32. Одна команда должна включить светодиод, а другая — выключить.И, конечно же, STM32 должен проклинать нас в случае неверной команды.

Я использовал шаблонный проект для STM32, который я описал ранее. Здесь применимо все, что я описал в этом посте (те же компоненты, то же программное обеспечение, те же команды). Но исходный код стал немного сложнее:

https://github.com/artem-smotrakov/stm32f103-usb-commands

Оборудование: STM32F103, ST-LINK / V2 и USB-последовательный адаптер

Вот список необходимых нам компонентов:

  1. Плата STM32F103 (я использовал эту, основанную на микроконтроллере STM32F103C8T6).
  2. Светодиод вашего любимого цвета и резистор (подойдет 200 или 330 Ом). Вот еще один пост, в котором описывается, как выбрать резистор, ограничивающий ток.
  3. Отладчик / программатор ST-LINK / V2.
  4. Адаптер USB-Serial. Я использовал этот, который основан на FT232RL (но вы можете использовать любой другой адаптер).

Как я уже писал в предыдущем посте, я подключил светодиод к выводу PA1. Затем нам нужно подключить адаптер USB-Serial к STM32. В соответствии с таблицей данных для STM32F103, контакты PA9 и PA10 могут быть настроены для USART (см. Страницу 31 таблицы данных):

  1. Подключите контакт PA9 (TX) к контакту RX адаптера USB-Serial.
  2. Подключите контакт PA10 (RX) к контакту TX адаптера USB-Serial.
  3. Подключите GND платы STM32 к GND адаптера USB-Serial.

Надеюсь, у вашего ноутбука есть два свободных порта USB, потому что нам нужен один для ST-LINK / V2, а другой — для адаптера USB-Serial.

Вот и все об оборудовании.

Программное обеспечение: STM32 и USART

Исходники выложил на GitHub:

 git clone https://github.com/artem-smotrakov/stm32f103-usb-commands 

Структура похожа на то, что я описал в своем посте о шаблоне проекта для SMT32:

  1. Makefile — это make-файл для компиляции исходных текстов и загрузки двоичных файлов на плату STM32.
  2. main.h и stm32f10x_conf.h включают файлы заголовков, которые нам нужны, и определяют пару констант.
  3. main.c содержит наиболее интересную часть.

Вот что у нас в main.c:

  1. init_output () инициализирует PA1 как выходной контакт для управления светодиодом. Затем мы можем включить / выключить его с помощью функций turn_on_pa1 () и turn_off_pa1 ()
  2. usart_init () инициализирует USART на выводах PA9 и PA10. Затем мы можем отправлять байты и строки с помощью функций usart_send (), usart_send_string (), usart_send_newline () и usart_send_line ().
  3. USART1_IRQHandler () — обработчик данных USART. Он принимает входящие текстовые команды.
  4. handle_command () обрабатывает команды, поступающие из USART.
  5. get_string_length () возвращает длину строки, а is_equal () проверяет, равны ли две строки. Они похожи на функции strlen () и strcmp (). Также можно использовать новую библиотеку, которая содержит эти функции, но это усложнит проект. Поэтому я просто быстро добавил вместо них get_string_length () и is_equal ().
  6. Функция
  7. main () собирает все вместе.

Этот простой проект поддерживает только две текстовые команды:

  1. «a1 on» устанавливает контакт PA1 в «1» (включает светодиод).
  2. «a1 off» устанавливает вывод PA1 в «0» (выключает светодиод).

Исходники могут быть скомпилированы и загружены на плату STM32 с помощью следующих команд (необходимо указать путь к стандартной периферийной библиотеке STM32):

 STD_PERIPH_LIBS = / home / user / libs / STM32F10x_StdPeriph_Lib_V3.5.0 \
    сделать все
STD_PERIPH_LIBS = / home / user / libs / STM32F10x_StdPeriph_Lib_V3.5.0 \
    заставить сжечь 

Отправка команд на USB-последовательный порт

Если вы используете Linux, в / dev должен быть файл, связанный с USB-портом, который вы используете для USB-последовательного адаптера. Вы можете использовать инструмент «dmesg», чтобы найти его:

 dmesg | grep tty 

Он должен напечатать что-то вроде следующего:

 [0.000000] консоль [tty0] включена
[5.228613] systemd [1]: Создан срез system-getty.ломтик.
[29158.699946] usb 1-2: преобразователь последовательного USB-устройства FTDI теперь подключен к ttyUSB0
[29869.017886] ftdi_sio ttyUSB0: преобразователь последовательного USB-устройства FTDI теперь отключен от ttyUSB0
[29877.238602] usb 1-2: преобразователь последовательного USB-устройства FTDI теперь подключен к ttyUSB0 

В моем случае у меня был файл «/ dev / ttyUSB0». Возможно потребуется выставить 666 прав доступа к нему:

 судо chmod 666 / dev / ttyUSB0 

После этого вы можете отправить данные в STM32, записав в этот файл, например:

 # включить светодиод
echo -e "a1 на \ r"> / dev / ttyUSB0
# выключить светодиод
echo -e "a1 выкл \ r"> / dev / ttyUSB0 

Или вы можете использовать свою любимую программу эмуляции терминала, например, Minicon:

 sudo apt-get install minicom
sudo minicom -s 

Вторая команда выше показывает меню, в котором вы можете настроить minicom с соответствующими настройками для USB-последовательного соединения (имя файла, скорость передачи, длина слова, стоповые биты, контроль четности и потока).Вы можете найти эти настройки в функции usart_init (). Затем он предложит вам сохранить настройки и подключиться к устройству). Или вы можете просто использовать следующую команду:

 minicom - устройство / dev / ttyUSB0 

Вот и все. Удачи!

Если вы обнаружили орфографическую ошибку, сообщите нам об этом, выделив этот текст и нажав Ctrl + Enter .

stm32 — STM32f103 HAL USB — мост UART

USB обеспечивает управление потоком. Вот что вам нужно реализовать.Общее введение можно найти здесь:

https://medium.com/@manuel.bl/usb-for-microcontrollers-part-4-handling-large-amounts-of-data-f577565c4c7d

По сути, настройка для направления USB-UART должна быть:

  1. Указывает, что код готов к приему USB-пакета
  2. Получить пакет USB
  3. Укажите, что вы больше не готовы получать пакет USB
  4. Передача данных через UART
  5. Начать больше

Шаг 0: Начальная настройка

Вызов USBD_CDC_SetRxBuffer , чтобы установить буфер для приема данных USB.Если вы не используете несколько буферов для достижения более высокой пропускной способности, достаточно одного вызова в начале программы.

Шаг 1: Готовность к приему данных

Позвоните USBD_CDC_ReceivePacket . Помимо того, что подразумевает название, эта функция указывает, что приложение готово к приему данных. Он немедленно возвращается до того, как данные будут фактически получены.

Шаг 2: Получите пакет USB

Здесь ничего делать не нужно.Это произойдет автоматически. По завершении будет вызван CDC_Itf_Receive .

Шаг 3. Укажите, что вы больше не готовы получать пакет USB.

Делать здесь нечего. Это происходит автоматически при получении пакета (и двойная буферизация не включена).

Шаг 4: Передайте данные через UART

Думаю, вы знаете, как это сделать. Вам решать, хотите ли вы сделать это в режиме блокировки или с помощью DMA.

Поскольку задействован обратный вызов, вы не можете поместить этот код в основной цикл. Можно было бы поместить весь код в CDC_Itf_Receive , если используется блокирующий UART. Они появятся в порядке 2, 3, 4, 1. Кроме того, требуется инициализация (0 и 1).

В направлении от UART к USB вам потребуется реализовать управление потоком на UART. Управление потоком USB управляется хостом. Несмотря на то, что USB намного быстрее, чем UART, управление потоком важно, поскольку приложение на хосте может обрабатывать данные так медленно, как ему хочется.

По поводу вопроса 2: я не уверен, что понимаю … Микроконтроллер не может установить скорость передачи на хосте. Либо хост может указать скорость передачи (передается через USB и применяется к UART), либо, если UART имеет фиксированную скорость передачи, вы можете игнорировать скорость передачи (любая скорость, установленная на стороне хоста, будет работать, поскольку она не применяется к USB).

Stm32f103 пример usart 💅

Если нет, то вы можете просто скопировать код, не беспокоясь об этом. Это базовый пример связи SPI в качестве мастера.Есть две транзакции SPI. В противном случае выводится сообщение об ошибке. Этот процесс повторяется в цикле while. Вот настройки, используемые для SPI: 1. Но при инициализации SPI2 контакты могут быть настроены только на максимум 10 МГц. Я не уверен в этом, но это кажется более безопасным вариантом.

Еще нужно учитывать, что при установке скорости передачи SPI с помощью предделителя эталонная тактовая частота — это скорость шины. Это связано с тем, что на шине может быть более одного ведомого устройства SPI.

Так же можно использовать программный выбор ведомого устройства, то есть вывод GPIO, который устанавливается на низкий уровень, когда необходимо выбрать ведомое устройство.Этот вывод настраивается отдельно, и в данном случае это вывод 3 порта A :. Я нашел два способа сделать это. Оба, казалось, работали, поэтому оба опубликованы ниже. Вот код для передачи байта через SPI. И это почти все, что нужно для настройки и использования SPI1. Инициализация SPI2 очень похожа, если вы помните о различиях, упомянутых выше:

Опять же, есть два способа реализовать это в коде, и оба, похоже, работают. В приведенном ниже полном примере кода есть пара вспомогательных функций, которые приостанавливают выполнение кода на желаемое количество миллисекунд.Для тех, кто знаком с платами Arduino, эта функция аналогична функции задержки.

Есть два способа узнать, работает ли код. Код для этого включен в полный пример ниже. Другой способ сделать это — использовать осциллограф или логический анализатор для просмотра сигналов. Если вы используете осциллограф или логический анализатор, вы можете наблюдать активность на линиях SPI.

Это может быть действительно полезно при отладке, когда что-то не работает, или для получения дополнительных сведений о SPI.Вы также можете проверить свои настройки SPI. На изображении ниже показана активность по всем четырем линиям SPI.

Мастер отправляет командный байт с первыми 8 тактовыми циклами. GitHub является домом для более 40 миллионов разработчиков, работающих вместе над размещением и проверкой кода, управлением проектами и совместной сборкой программного обеспечения.

Если ничего не происходит, загрузите GitHub Desktop и повторите попытку. Если ничего не происходит, скачайте Xcode и попробуйте еще раз. Если ничего не происходит, загрузите расширение GitHub для Visual Studio и повторите попытку.

Перейти к содержимому. Dismiss Присоединяйтесь к GitHub сегодня GitHub является домом для более 40 миллионов разработчиков, которые вместе работают над размещением и проверкой кода, управлением проектами и созданием программного обеспечения.

Зарегистрируйтесь. Филиал: мастер. Найти файл. Войти Зарегистрироваться. Вернитесь назад. Запуск Xcode Если ничего не происходит, загрузите Xcode и повторите попытку. Последний коммит.

Последняя фиксация ebbe 2 августа, вы вошли в систему с другой вкладкой или окном. Перезагрузите, чтобы обновить сеанс. Вы вышли из системы на другой вкладке или в другом окне.Пример АЦП.

Пример микроконтроллера STM32F103C8: использование SPI в качестве главного (SPI1 / SPI2)

15 сентября, 24 октября, Пример резервного копирования регистров. 22 сентября, 7 марта, BLDC без датчика. 2 августа, датчик давления BMP. Уведомление о файлах cookie. Файлы cookie и аналогичные технологии позволяют нам предоставлять вам оптимизированный пользовательский интерфейс и функциональность нашего веб-сайта.

Они также помогают нам отслеживать его эффективность и делать нашу рекламу и маркетинг релевантными для вас. Нажимая «Принять файлы cookie», вы даете согласие на их использование.Ваша конфиденциальность. Строго необходимые файлы cookie. Файлы cookie производительности.

Подпишитесь на RSS

Функциональные файлы cookie. Целевые файлы cookie. Политика использования файлов cookie. Центр предпочтений конфиденциальности. Не уверен, что понимаю, почему вы получаете дубликаты из представленного кода. Внутри обработчика прерывания вы должны проверить, когда буфер tx полностью передан, а затем отключить прерывание таким образом, вы можете предотвратить непрерывный запрос прерывания, который возникает из-за пустого буфера TX, поэтому:

Все права защищены STMicroelectronics.Уведомление о файлах cookie Файлы cookie и аналогичные технологии позволяют нам предоставлять вам оптимизированный пользовательский интерфейс и функциональность нашего веб-сайта.

Принимать файлы cookie. Настройки файлов cookie. Центр предпочтений конфиденциальности активен. Сохранить настройки. Позволять все. Сообщество ST. Введите релевантные ключевые слова и нажмите кнопку «Поиск». Просмотреть это сообщение. Я использую два буфера приема и два буфера передачи достаточной длины. Сообщение, полученное из буфера приема A, копируется в буфер передачи B, и для запуска передачи отправляется первый символ, а после этого прерывание Tx отправляет все символы до NULL.

Я могу опубликовать фрагменты кода, если есть свободное время. В чем может быть проблема? Код прерывания TX вставлен ниже. Я бы сделал так, чтобы код прерывания знал, в каком режиме он находится, и не смотрел на нулевой байт в устаревшей строке. Я бы удостоверился, что некоторые из переменных здесь являются «изменчивыми», чтобы компилятор не оптимизировал их.

STM32. Урок 13. USART. STM32F103 CMSIS. Часть 3

С уважением, Фабио. Войдите, чтобы ответить на этот вопрос. Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику конфиденциальности и Условия использования.Наконец-то вышла бета-версия темного режима. Измените свои предпочтения в любое время.

Stack Overflow for Teams — это личное безопасное место, где вы и ваши коллеги можете находить информацию и делиться ею. Проблема в том, что прерывания приема у нас не обнаружены ???? Но в попытке помочь, вот мой код. Вот мой код обработчика прерывания. Вот как выглядит мой код.

Трассировка printf, которую, скорее всего, называет упомянутый выше пользователь. Итак, попробуйте, а не используйте его и установите точки останова, чтобы увидеть, что вы получили.

Узнать больше. Спрашивал 7 лет 6 месяцев назад. Активна 1 год 6 месяцев назад. Просмотрен 47k раз. Можете ли вы получать данные без прерываний?

Так что просто вручную читать регистр приема? Активные самые старые голоса. Verax Verax 1, 2 2 золотых знака 21 21 серебряный знак 38 38 бронзовых знаков. Спасибо! Hilogic Hilogic 29 2 2 бронзовых знака.

Привет, я делаю это, потому что мне нужно отправлять и получать ответ от модема. Мы покажем, как использовать прямой режим, режим на основе прерываний и режим, управляемый DMA, а также будем использовать логический анализатор для сравнения точных таймингов различных События.Попробуйте ввести текст в окне терминала и посмотрите, как через каждые 4 символа программа отображает их обратно: Теперь мы исследуем тайминги UART с помощью логического анализатора.

Пока передача активна, программа больше ничего делать не может и должна дождаться ее завершения. Теперь мы воспользуемся передачей по прерываниям, чтобы освободить часть циклов ЦП. Замените код в вашем основном исходном файле следующим: Удалите точку останова и перезапустите программу.

Затем добавьте сигналы C11 и C12 в Analyzer2Go и сделайте еще одну запись.Он будет прерываться только случайными прерываниями от UART. В этом режиме контроллер DMA будет автоматически передавать весь буфер в UART побайтно и вызывать прерывание только после того, как будет отправлен весь буфер. Добавьте следующую статическую переменную :.

12 сентября, stm32uart. Прежде чем начать, установите VisualGDB 5. Мы начнем с простой программы, которая будет считывать байты через UART и выводить их обратно группами по 4. Инициализация модуля UART путем указания рабочих параметров.Собственно чтение и запись данных. Замените код в вашем основном исходном файле следующим:. При последовательной связи данные передаются в символах, и каждый символ передается в байтах.

Всегда начинается со стартового бита и заканчивается стоповым битом. Перед передачей убедитесь, что хост и подчиненное устройство используют одинаковую скорость передачи. Обычно существует два основных режима последовательной связи: синхронная связь и асинхронная связь. Конфигурация часов Сконфигурируйте системные часы как МГц.

Значение по умолчанию — МГц. Четность: нет, стоповый бит: 1. Остальные параметры имеют значения по умолчанию. Вы можете восстановить новый отчет и новый код, а затем скомпилировать программу. В файле usart. Для стандартных функций вывода стандартной библиотеки на языке C устройством вывода по умолчанию является displayer. Вам следует переопределить функции вывода в стандартной библиотеке, чтобы реализовать последовательный вывод или вывод на ЖК-дисплей.

Например, чтобы вывести функцию printf на последовательный порт, вы должны направить вывод функции fputc на перенаправление последовательного порта.Это легко сделать. Добавьте следующие строки после fileusart. В код условной компиляции добавлено определение макроса ifdef. Скомпилируйте программу и загрузите ее на плату разработки. Выберите соответствующий номер последовательного порта и установите скорость передачи данных. Нажав кнопку «Сброс», вы можете получить информацию, как показано на рисунке ниже.

В конце файла вы можете найти последовательную функцию с операциями ввода-вывода, показанными ниже. Существует три режима связи для последовательной передачи, режима опроса, режима управления прерываниями и режима DMA :.

Например, ЦП запрашивает последовательный порт, завершена ли передача данных. Если передача идет с течением времени, будет возвращена ошибка тайм-аута. Опрос — это неэффективный метод, поскольку он может занимать процессорное время. GitHub является домом для более 40 миллионов разработчиков, которые вместе размещают и проверяют код, управляют проектами и создают программное обеспечение вместе.

Если ничего не происходит, загрузите GitHub Desktop и повторите попытку.

STM32F103 Передача USART (с использованием Keil и STMCubeMX)

Если ничего не происходит, загрузите Xcode и повторите попытку.Если ничего не происходит, загрузите расширение GitHub для Visual Studio и повторите попытку. Приложение использует функции использования по умолчанию для реализации очень эффективной системы передачи с использованием DMA.

Хотя это просто для приема, это не относится к операции приема. При реализации приема DMA приложению необходимо знать количество полученных байтов для обработки DMA до завершения передачи. Это особенно верно, когда UART используется для системной связи, когда он должен быстро реагировать после получения всех байтов.

Это достигается одним из двух доступных методов :. Оба события могут вызвать прерывание, что является важной функцией для обеспечения эффективной работы приема. Когда они недоступны, примеры, касающиеся этих функций, не могут быть использованы. Событие линии IDLE запускает прерывание для приложения, когда линия находилась в состоянии ожидания в течение 1 кадра, в данном случае — после получения третьего байта. После запуска события IDLE данные передаются обратно в режим обратной петли:. Для каждого режима DMA требует, чтобы количество элементов было передано до того, как его события будут завершены, когда будут запущены полупередача или завершение передачи.

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


Преобразование платы STM32F103 в зонд черной магии

Шаг 1

Стандартная плата STM32F103 за 2 доллара на AliExpress (также известная как Blue Pill)

Пустая плата STM32F103 поставляется только с загрузчиком USART по умолчанию.Несмотря на то, что на плате есть порт USB, вы не можете использовать его для программирования, потому что у него нет соответствующего загрузчика.

Я получил свою доску менее чем за 2 доллара от Advanced Tech на AliExpress. Нам нужно использовать простой преобразователь USB в UART, чтобы запрограммировать плату через USART с помощью загрузчика USB, а затем мы можем вернуться к программированию напрямую через USB.

Сначала подключите USB к преобразователю Serial / UART / TTL следующим образом:

Шаг 2

На изображении выше вы видите две желтые перемычки с пометкой BOOT0 и BOOT1 .Они определяют источник кода микроконтроллера. По умолчанию оба являются 0 , микроконтроллер использует собственный загрузчик флеш-памяти, которого сейчас нет, и который мы добавляем. На данный момент, чтобы иметь возможность программировать микроконтроллер с помощью USART, вам необходимо установить BOOT0 как 1 и оставим BOOT1 на номер 0 . В основном переместите первую перемычку и оставьте вторую.

Теперь загрузите скрипт python stm32loader и запустите его, чтобы убедиться, что все необходимые зависимости выполнены.Мне пришлось установить pip pyserial чтобы заставить его работать.

Теперь нам нужен двоичный файл, который мы хотим прошить в качестве загрузчика BMP DFU — мы клонируем и скомпилируем репо из исходного кода Black Magic Probe. Получить набор инструментов brew cask install gcc-arm-embedded .

Клонировать это репо. git clone [email protected]: blacksphere / blackmagic.git Бег , марка , чтобы получить нужные подмодули git. Игнорируйте любые возможные ошибки. Устранение ошибки -Ошибка в этой строке, если вы получаете предупреждение, которое выдается как ошибка.Зайдите в cd src и запустите make clean && make PROBE_HOST = stlink . У вас должно получиться два файла в каталоге src — blackmagic_dfu.bin и blackmagic.bin .

Шаг 3

Когда у нас есть файл DFU, теперь нам просто нужно запустить следующее (после добавления правильного порта и ссылки на файл):

  python ./stm32loader -p /dev/tty.SLAB_USBtoUART -e -w -v src / blackmagic_dfu.bin
  

Вам может потребоваться нажать кнопку сброса перед запуском вышеуказанного, чтобы заставить его работать.На этапе проверки будет прочитан мигающий двоичный файл и произведено сравнение. Сбросьте перемычки настройки загрузки на значения по умолчанию для обоих 0 .

Теперь мы готовы добавить прошивку Black Magic Probe. Отключите все и используйте USB для подключения. Убедитесь, что ваш компьютер распознает устройство с помощью dmesg или выбрав «Об этом Mac»> «Системный отчет»> «USB». Вы также можете использовать system_profiler SPUSBDataType . (Аппаратное и программное обеспечение, над которым мы работаем выше, — все благодаря отличным людям из 1bitsquared.)

Для актуальной прошивки мы будем использовать официальные инструкции. Установить brew install dfu-util а затем выполните следующие действия. Обычно запустите ` dfu-util -d 1d50: 6018,: 6017 -s 0x08002000: leave -D blackmagic.bin . Здесь адрес устройства можно найти в dfu-util -l , а файл — это тот, который мы сгенерировали при компиляции. Вы должны увидеть индикатор прогресса, и, наконец, загрузка должна завершиться успешно.

Step 4

Теперь отключите и подключите новый зонд Black Magic.Вы должны увидеть DFU обновления микропрограммы в dfu-util -l . Также вы должны увидеть новые порты ls -l /dev/cu.usbmodem* . Первый — это сервер GDB, а второй — последовательный UART для отладки.

Установите соединения между вашей целью и новым отладчиком BMP следующим образом. (В случае, если эти назначения контактов изменятся в будущем — проверьте здесь. Проверяйте значения, установленные в коде, а не в комментарии.)

  TARGET DEBUGGER
GND GND
SWDIO PB14
SWCLK PA5
МОЩНОСТЬ 3.3В
  

Black Magic Probe поддерживает одновременную отладку JTAG / SWD и Serial / UART. Итак, вот распиновка этого, как только вы начнете ее использовать. Помните, что линии RX / TX меняются местами от источника к месту назначения.

  ЦЕЛЕВОЙ ОТЛАДИТЕЛЬ
RXD PA3
TXD PA2
  

Теперь подключитесь к вашей плате с помощью arm-none-eabi-gdb -ex "target extended-remote /dev/cu.usbmodemC4D1BC01" . Добавьте правильное имя порта. Вы должны увидеть отладчик, готовый к работе с командами.

Команды, такие как monitor swdp_scan должен показать вам информацию о целевом оборудовании и att 1 должен прикрепить отладчик к цели. Теперь вы можете загружать новую прошивку для цели, а также устанавливать точки останова и т. Д.

Выводы

Для получения дополнительной информации см. Руководство GDB или документацию по Black Magic Probe.

Если вам понравилась статья, нажмите «Рекомендовать»! Следуйте за мной, чтобы узнать о моих будущих проектах. Спасибо этой статье за ​​то, что заставили меня приступить к выполнению вышеуказанных шагов.Он основан на работе Роджера Кларка.

Использование UART для реализации мастера шины 1-Wire

Введение
Инновационный протокол 1-Wire ® компании

от Maxim обеспечивает подачу питания и цифровую связь по одному проводнику и заземлению. Устройства 1-Wire предоставляют экономичные решения для идентификации, запоминания, отсчета времени, измерения и управления с дополнительным преимуществом, заключающимся в возможности работы на больших расстояниях (> 100 метров). Существуют различные методы реализации драйвера на стороне хоста 1-Wire, такие как использование одного из мостовых устройств Maxim, битовая синхронизация GPIO микроконтроллера или использование периферийного устройства, такого как универсальный асинхронный приемный передатчик (UART), для генерации требуемых таймингов.В этой заметке по применению обсуждается реализация UART и описывается, как использовать служебную программу UART 1-Wire Master для помощи в процессе разработки. Приложение автоматически настраивает периферийные данные для широкого диапазона скоростей передачи, необходимых для реализации каждого параметра синхронизации.

Типичная скорость передачи данных 16 кбит / с более чем достаточна для предполагаемых задач, поскольку большинство устройств 1-Wire предоставляют относительно небольшие объемы данных. Часто удобно использовать вывод общего назначения ввода / вывода (GPIO) 8-битного или 16-битного микроконтроллера в режиме «бит-стука», чтобы действовать как мастер шины.

Однако тактовая частота процессора во многих 32-битных системах обычно превышает 100 МГц. Использование вывода GPIO в качестве мастера шины 1-Wire потребляет большое количество тактов на один бит 1-Wire. Его края не могут точно контролироваться для соответствия необходимым временным требованиям. В 32-разрядных портативных системах во время создания временных интервалов чтения и записи 1-Wire расходуется очень много энергии. Бремя операций битовой синхронизации и байтового кадрирования с главного процессора может быть снято, если доступно периферийное устройство UART.

Это примечание по применению включает объяснение необходимого электрического интерфейса, конфигурации UART и временных соотношений между сигналами UART и 1-Wire. Общее представление об 1-Wire предполагается связь. В следующем обсуждении используются типичные временные и логические уровни. См. Технические характеристики устройства 1-Wire для получения информации о спецификациях и допусках по времени и напряжению.

Концептуальный обзор

UART с различными скоростями передачи обеспечивает синхронизацию вывода, необходимую для реализации ведущего устройства 1-Wire, если он правильно настроен в отношении скорости передачи, битов данных на символ, четности и количества стоповых битов.Изменение значений байтов передачи UART создает импульс сброса 1-Wire, а также слоты чтения и записи для создания низкоуровневых команд. Микропроцессор просто помещает однобайтовые коды символов в регистр передачи UART, чтобы инициировать синхронизацию 1-Wire. И наоборот, микропроцессор считывает однобайтовые коды символов, соответствующие битам 1 или 0, считанным с ведомого устройства 1-Wire. Все передачи битов 1-Wire требуют, чтобы мастер шины (то есть периферийное устройство UART) инициировал цикл синхронизации, установив на шине 1-Wire низкий уровень.Байт должен одновременно передаваться и приниматься UART для генерации синхронизации 1-Wire. Следовательно, периферийное устройство должно поддерживать полнодуплексный режим. Полученный байт предоставляет полезную информацию, которая может идентифицировать успешно переданный байт данных, закороченное соединение, повреждение данных или подключение ведомого устройства 1-Wire. Каждый передаваемый байт соответствует одному биту чтения, записи или сбросу 1-Wire.

Электрический интерфейс между UART и 1-Wire
Устройства

1-Wire работают в среде с открытым стоком при напряжении на шине от 1.От 8 В до 5,5 В. Точные логические уровни и минимальные подтягивающие напряжения зависят от устройства. Итак, обратитесь к техническому описанию устройства для получения информации о совместимых рабочих напряжениях. На рисунке 1 показана возможная конфигурация, если выходное напряжение хоста на выводе TX находится в пределах рабочего напряжения подчиненного устройства. Подтягивающее напряжение (V PUP ) от вывода TX обеспечивает напряжение на верхнюю часть подтягивающего резистора (R PUP ), в то время как высокоимпедансный вход на выводе RX поддерживает конфигурацию с открытым стоком. Это позволяет ведомым устройствам подтягивать линию ввода-вывода 1-Wire к низкому уровню во время бита чтения или импульса присутствия сброса при высоком уровне сигнала TX.Выбор значения R PUP важен для правильной работы, поскольку конфигурация на Рисунке 1 не предусматривает сильного подтягивания. Необходимо учитывать количество тока, подаваемого на ведомое устройство для команд (т. Е. Копирования блокнота), требующих дополнительного тока. Резистор должен быть достаточно маленьким, чтобы обеспечивать требуемый ток, не позволяя падению напряжения нарушать минимальное рабочее напряжение подчиненного устройства или уровень V IL как для главного, так и для подчиненного устройства. Резистор 480 Ом обычно является хорошей отправной точкой для подтяжки линии данных 1-Wire для этой конфигурации.Используйте независимое соединение подтягивающего напряжения (, рисунок 2, и , рисунок 3, ) для систем, в которых напряжение на выводе TX хоста напрямую несовместимо.

Рис. 1. Схема интерфейса шины 1-Wire.

Обычно требуется внешняя буферная схема с открытым стоком, поскольку большинство выводов передачи данных UART не имеют открытого стока. Эта схема может быть построена из дискретных компонентов (рисунок 2) или интегрированных решений, таких как Fairchild NC7WZ07 (рисунок 3).Подтягивающий резистор 4,7 кОм является хорошей отправной точкой для команд уровня ПЗУ в обеих схемах, но его размер необходимо изменить, чтобы можно было выполнять операции с высоким током, такие как копирование данных в EEPROM. Важно убедиться, что логические уровни не нарушают параметры таблицы EC как для хоста, так и для подчиненного устройства.

Рис. 2. Дискретный буфер с открытым стоком.

Рис. 3. Встроенный буфер с открытым стоком.

Битовая синхронизация 1-Wire / UART

Временные диаграммы в рисунках 5 9 описывают взаимосвязь между временными интервалами 1-Wire и соответствующим байтовым кадром UART.UART служит мастером шины и поэтому начинает все коммуникации при переходе с высокого уровня на низкий на выходном выводе TX. UART получает байт на каждый переданный байт, поскольку электрический интерфейс связывает буферизованный сигнал TX с входным контактом RX.

Каждая диаграмма включает конфигурацию UART, значение байта передачи и ожидаемое значение байта приема. Перечисленные конфигурации UART формируют сигналы, соответствующие таймингу 1-Wire в обычном режиме. Обратите внимание, что UART настроен с другой скоростью передачи для обнаружения импульса сброса и присутствия, чем для временных интервалов чтения и записи.Также можно использовать другие конфигурации, хотя критерии оценки могут отличаться от тех, что указаны на временных диаграммах. Значение байта передачи соответствует роли мастера шины 1-Wire, а значение байта приема или диапазон представляет ожидаемую активность на шине. Полученное значение должно быть оценено, чтобы определить значение бита, возвращаемое ведомым устройством 1-Wire при выполнении чтения. Критерии оценки чтения 0 и чтения 1 включены в диаграммы.

Рисунок 4.Легенда временной диаграммы.

Рисунок 5. Импульс сброса и обнаружение присутствия.

Для генерации сброса 1-Wire и обнаружения импульса присутствия можно использовать несколько скоростей передачи. На рис. 5 показана конфигурация UART со скоростью 9600 бод для создания резервной скорости 1-Wire Reset. Временной интервал каждого бита UART рассчитывается с обратной скоростью передачи (1 / скорость передачи). Стартовый бит UART, поскольку он всегда имеет низкий уровень, может использоваться в сочетании с восемью битами данных для выработки соответствующей синхронизации.Данные UART передаются первым как младший бит. Передача байта F0h превращает биты данных с 0 по 3 в логический 0, а биты данных с 4 по 7 в логическую 1, что создает время минимального сброса (T RSTL ), равное 520,83 мкс. Значение приема зависит от наличия одного или нескольких подчиненных устройств 1-Wire, внутренней синхронизации текущего импульса каждого подчиненного устройства, времени нарастания и времени выборки UART в каждом битовом окне. Значение приема равно значению передачи, если устройство отсутствует. Значение приема меняется, когда присутствует устройство.Одно подчиненное устройство, работающее с минимальной внутренней синхронизацией, может ответить E0h, в то время как устройство с максимальной внутренней синхронизацией может вернуть значение 90h. Важно подтвердить тайминги с помощью осциллографа или логического анализатора, чтобы гарантировать достижение желаемого тайминга. Важно подтвердить все тайминги, поскольку периферийные устройства UART имеют разную частоту ошибок для каждой скорости передачи.

Может потребоваться добавить задержку между передаваемыми байтами UART, чтобы обеспечить необходимое время восстановления (T REC ).Не складывайте команды для последовательной передачи в буфере UART хоста, если эти задержки требуются. Утилита UART 1-Wire Master упрощает задачу, вычисляя значения TX, RX и задержки для каждого параметра синхронизации для выбранной скорости передачи. Ссылка на эту программную утилиту приведена в конце этого документа. Эта утилита обеспечивает конфигурацию UART для стандартных таймингов и таймингов перегрузки для различных скоростей передачи. Для получения подробного описания воспользуйтесь меню справки в утилите.

Рисунок 6. Чтение временного интервала 0.

Рисунок 7. Считайте 1 временной интервал.

Хост всегда инициирует связь в системе 1-Wire, как упоминалось ранее. Хост устанавливает низкий уровень сигнала ввода-вывода 1-Wire в течение времени низкого уровня чтения (T RL ) для чтения бита из ведомого устройства. Подчиненное устройство удерживает низкий уровень ввода-вывода после времени выборки основного считывания (T MSR ), если оно передает 0-бит и ничего не делает при отправке 1-битного, позволяя ввод-выводам плавать после того, как хост освобождает линию в конце Т РЛ .Временные интервалы чтения, сгенерированные в рис. 6, и , 7, , используют скорость передачи 115 200 бод. Байт RX, полученный при чтении 0 по 1-Wire, находится в диапазоне от 0xFE до 0x00 в зависимости от внутренней временной развертки ведомого устройства и времени нарастания ввода-вывода. Байт RX, полученный при чтении 1 1-Wire, всегда равен 0xFF (для 115 200 бод), поскольку ведомое устройство 1-Wire позволяет линии данных возвращаться в состояние 1, как только мастер шины освобождает его. Байты передачи и приема могут изменяться по мере увеличения скорости передачи. Утилита UART 1-Wire Master вычисляет соответствующие значения TX, RX и задержки для выбранной скорости передачи.

Рис. 8. Временной интервал записи 0.

Рисунок 9. Запишите 1 временной интервал.

На рисунках 8 и 9 показано, как передать 1 или 0 на подчиненное устройство со скоростью 115 200 бод. Тем не менее, существует множество скоростей передачи данных, которые могут обеспечить правильную синхронизацию. Опять же, утилита UART 1-Wire Master может рассчитать соответствующие значения. При просмотре цифр, кажется, нет необходимости оценивать байт RX для записи 1-Wire, поскольку линия ввода-вывода управляется исключительно хостом, а ведомое устройство не отвечает никакими данными.Однако оценка значения RX и обеспечение его соответствия значению TX подтверждает, что данные отсутствуют. Некоторые системы 1-Wire имеют подчиненные устройства, которые могут быть добавлены к системе во время нормальной работы. Подключенное устройство будет производить некоторые нежелательные переходы на шине, если оно будет добавлено во время записи. Эта проблема решается проверкой значений RX.

Бит-битовая синхронизация 1-Wire

Ключевым преимуществом шины 1-Wire является гибкость побитовой синхронизации. Задержка между битами может быть минимальной до T REC или до тех пор, пока мастер шины считает это необходимым.Между битами или байтами 1-Wire нет максимального периода задержки. Следовательно, процессор может обслуживать UART в свободное время, преобразовывая временные интервалы битов в байтовые значения. Связь с устройствами 1-Wire может быть обозначена как задача с низким приоритетом. Процессору не нужно тратить циклы обработки или мощность, или пренебрегать высокоприоритетными и критичными по времени задачами.

Рисунок 10. Гибкость бит-в-бит синхронизации.

Утилита UART 1-Wire Master

Утилита UART 1-Wire Master быстро определяет, какие TX, RX и задержки необходимы для генерации таймингов 1-Wire для различных скоростей передачи.Утилита обеспечивает связь с устройствами моста USB-UART производства Prolific или FTDI, обеспечивая связь в реальном времени с подчиненными устройствами 1-Wire. Если оборудование недоступно, можно выбрать вариант эмуляции. Вкладка конфигурации на рис. 11 . предоставляет поля для ввода параметров синхронизации таблицы EC. Эти значения используются для расчета данных UART. Вкладка 1-Wire подтверждает правильную работу с реальным ведомым устройством или с смоделированным выходом, когда оборудование не подключено.Журнал данных отображает соответствующую информацию для каждой выполненной команды. Чтобы использовать этот инструмент, выберите «Руководство пользователя» в меню справки.

Рисунок 11. Вкладка «Конфигурация».

Рис. 12. Вкладка 1-Wire.

Заключение

UART остается ценным периферийным устройством в современных процессорах из-за его программируемости. Гибкость настройки байтовой синхронизации UART позволяет напрямую реализовать временные интервалы чтения / записи 1-Wire, а также обнаружение импульсов сброса и присутствия.

Утилита программного обеспечения UART 1-Wire Master может генерировать синхронизацию как для обычных, так и для повышенных скоростей для всех временных параметров, что обеспечивает быструю разработку. Инструмент поддерживает широкий диапазон скоростей передачи данных, обеспечивая совместимость с большинством периферийных устройств UART, если не со всеми. Утилиту программного обеспечения можно загрузить с DS1990R.

Дополнительную информацию о связи по 1-Wire можно получить на веб-сайте Maxim Integrated Maxim Integrated.

Товарных знаков

1-Wire является зарегистрированным товарным знаком компании Maxim Integrated Products, Inc.
FTDI — зарегистрированная торговая марка Future Technology Devices International.
Prolific — зарегистрированная торговая марка Prolific Technology, Inc.

Stm32 esp8266 uart

12 декабря 2015 г. · Всем привет, ESP8266 с ПО AT-команд от Espressif теперь более стабильно, чем любое другое, поэтому я думаю создать «сильную» библиотеку парсера AT-команд для микроконтроллеров серии STM32. Если есть интерес, я могу сделать общую библиотеку (например, FATFS), чтобы ее можно было использовать и на других микроконтроллерах.Итак, я думаю об этих командах: Основные команды для настройки ESP …

Также поддержка приличного SSL-соединения, чего не хватает в ESP8266. Точно так же цена S2 немного ниже, чем ESP32, и дороже, чем ESP8266, но в этой нише очень сильная конкуренция со стороны новых чипов Bouffalo BL6XX, поэтому я прогнозирую, что, чтобы оставаться впереди, Espressif еще больше снизит цены на ESP32- S2 для соответствия …

Последовательный загрузчик ESP8266 может использоваться для программирования его флэш-памяти.Предполагается, что модуль ESP-12F, но можно использовать и любой ESP-12 / 12E / 12S, для других модулей распиновка может измениться. Соединения UART / USB следующие:

Универсальный асинхронный приемник / передатчик (UART) — это блок схемы, отвечающий за реализацию последовательной связи. По сути, UART действует как посредник между параллельным и последовательным интерфейсами. На одном конце UART находится шина из восьми или около того линий данных (плюс несколько управляющих контактов), на другом — два последовательных провода — RX и TX.

Универсальный асинхронный приемник / передатчик (UART) — это блок схемы, отвечающий за реализацию последовательной связи. По сути, UART действует как посредник между параллельным и последовательным интерфейсами. На одном конце UART находится шина из восьми или около того линий данных (плюс несколько управляющих контактов), на другом — два последовательных провода — RX и TX.

BlynkEthernet_STM32_WM: простой диспетчер учетных данных Blynk для плат STM32 с использованием встроенных экранов LAN8742A Ethernet, ENC28J60 или W5x00 Ethernet, с SSL или без него, данные конфигурации сохраняются в EEPROM.

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

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