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

Usart stm32: USART stm32 HAL / STM32 / stD

About STM32

    Сегодня я решил рассказать об UART’е. Вместо ведения будет выдержка из моего дипломного проекта:

«Универсальный асинхронный или универсальный синхронно / асинхронный приемопередатчик (Universal Synchronous / Asynchronous Receiver and Transmitter — UART или USART) — удобный и простой последовательный интерфейс для организации информационного канала обмена данными микроконтроллера с внешним миром. Способен работать в полудуплексном(только прием или передача данных) и полнодуплексном режиме (одновременная передача и прием данных). UART поддерживает протокол стандарта RS-232, что обеспечивает возможность быстрой организации связи с персональным компьютером.»

 Осталось добавить, что используется всего 2 сигнальных провода: первый – прием,второй – передача данных. Обозначаются RX и TX соответственно, ну и общий GND…куда ж без него?

 Теперь, что касается USART STM32. Управляет этим модулем 7 регистров:

SR – status register

DR – data register

BRR – baud rate register

CR1 – control register 1

CR2 – control register 2

CR3 – control register 3

GTPR – guard time and prescaler register

Самое сложное, как на мой взгляд – настройка предделителя тактовой частоты (регистр BRR). Он несколько хитро устроен. Дело в том, что с помощью целых значений этого регистра можно очень точно кодировать дробные значения предделителя.

Итак, приступим: из руководства по программированию известно, что модуль UART STM32 тактируется от шины АРВ2(стр. 83). В моей отадочной плате STM32F1-Discovery шина АРВ2 настроена на частоту 24 МГц, а модуль UART я хочу настроить на скорость обмена в 9600 бод. Воспользовавшись формулой из руководства по программированию (стр. 588) считаем:

FUART=FAPB2/(16*BRR), где

FUART – желаемая частота UART.

 FAPB2 – частота шины АРВ2.

BRR – значение предделителя.

Если с первыми двумя составляющими все ясно. То со третьим мне пришлось поломать голову. Итого, имеем следующие параметры:

FUART – 9600 бод

FAPB2 – 24 000 000 Гц

 BRR – считаем!

BRR= (FAPB2/ FUART)/16

Подставляем значения и получаем => (24000000/9600)/16

Сначала действия в скобках 😉 => 2500/16

Итого значение предделителя равно => 156,25

Теперь посмотрим на регистр BRR.

Он состоит из 2х частей:

0-3 биты – дробная часть значения.

15-4 биты – целое число.

Сперва вычисляем дробное значение: для этого умножим дробную часть на 16. В нашем примере: 0,25*16=4 (4h). Если получилось дробное число, то необходимо округлить по правилам математики, например: из8,3 получаем 8, а из 2,9 получаем 3.

Теперь вычисляем целую часть: Если после вычисления дробной части в результате не получилось число 16, то просто напросто отбрасываем дробную составляющую и записываем в регистр, т.е в текущем примере просто пишем 156 ( 9Ch ). Но если бы у нас дробное значение получилось 16, то его надо было бы анулировать, а в значение к целой части прибавить 1.

Итак, в нашем примере значение регистра BRR = 9C4h.

Еще один пример:

FUART – 2400 бод

FAPB2 – 997632 Гц

BRR –считаем!

 BRR= (FAPB2/ FUART)/16

Подставляем значения и получаем => (997632/2400)/16

Сначала действия в скобках 😉 => 415,68/16

Итого значение предделителя равно => 25,98

Вычисляем дробное значение: 0,98*16=15,68 — округляем по правилам математики и получаем до 16 Тогда целое значение равно 25+1=26 (1Ah), а дробное 0. Таким образом значение регистра BRR = 1А0h.

 Конечно, такая тактовая частота шины АРВ2 является вымышленной, но например в тех же AVR часто используются кварцевые резонаторы с дробной частотой( например, 4.433619 МГц или 8.867238 МГц), которые позволяют получить точные значения предделителя UART. Такие заморочки нужны потому, что интерфейс UART AVR очень скромный в плане всяких настроек. А синхронизация обмена данными происходт по времени, и если в приемнике и передатчике один такт будет длиться разное время, то передача может пойти с ошибками.

Таким образом можно сделать вывод, что в STM32 настройка несущих частот программная, а в AVR – аппаратная. Это, как для меня, еще один плюс 32-х разрядникам!

st,stm32-usart — Документация проекта Zephyr

Это документация для последней (основной) ветки разработки Зефир. Если вы ищете документацию предыдущих выпусков, используйте раскрывающееся меню слева и выберите нужную версию.

Поставщик: STMicroelectronics

Описание

Эти узлы являются узлами шины «uart».

 STM32 USART
 

Свойства

Свойства не унаследованы от базового файла привязки.

Имя

Тип

Детали

сброс

фандл-массив

 Сброс информации
 

Это свойство требуется .

одножильный

логический

 Включить однопроводную полудуплексную связь.
В этом режиме линии TX и RX внутренне соединены и
только вывод TX используется впоследствии и должен быть настроен.
Конфликты RX/TX должны обрабатываться на стороне пользователя.
 

TX-RX-обмен

логический

 Поменяйте местами контакты TX и RX.
Используется в случае перекрестного проводного соединения.

TX-инверсия

логический

 Инвертировать двоичную логику вывода tx. При включении физические логические уровни инвертируются и
мы используем 1=низкий, 0=высокий вместо 1=высокий, 0=низкий.
 

rx-инверсия

логический

 Инвертировать двоичную логику контакта rx. При включении физические логические уровни инвертируются и
мы используем 1=низкий, 0=высокий вместо 1=высокий, 0=низкий.
 

pinctrl-0

ручки

 Конфигурация контакта/с для первого состояния. Контент специфичен для
выбранная реализация драйвера пин-контроллера.
 

Это свойство

требуется .

имена контактов

массив строк

 Имена для предоставленных состояний.  Количество имен должно совпадать с
количество штатов.
 

Это свойство требуется .

линия пробуждения

ряд

 Номер строки EXTI, соответствующий регистру маски прерывания пробуждения устройства.
Это свойство требуется на устройствах stm32, где сигнал прерывания пробуждения может быть
настроена маска при загрузке (например, sm32wl55), предотвращающая пробуждение устройства
ядро из режима(ов) остановки.
Допустимый диапазон: 0–31
 

тактовая частота

ряд

 Информация о тактовой частоте для работы UART
 

текущая скорость

ряд

 Начальная настройка скорости передачи для UART
 

управление расходом

логический

 Установите, чтобы включить управление потоком RTS/CTS во время загрузки
 

четность

строка

 Настраивает четность адаптера.  Идентификатор перечисления 0 для отсутствия, 1 для нечетного
и 2 для четности. По умолчанию нет, если не указано.
 

Допустимые значения: 'нет' , 'нечетный' , 'четный'

стоповые биты

строка

 Устанавливает количество стоповых битов.
 

Допустимые значения: '0_5' , '1' , '1_5' , '2'

бит данных

ряд

 Устанавливает количество битов данных.
 

Допустимые значения: 5 , 6 , 7 , 8 , 9

контакт-1

ручки

 Конфигурация контакта/с для второго состояния. См. pinctrl-0.
 

пинктрл-2

ручки

 Конфигурация контакта/с для третьего состояния.  См. pinctrl-0.
 

контакт-3

ручки

 Конфигурация контакта/с для четвертого состояния. См. pinctrl-0.
 

пинктрл-4

ручки

 Конфигурация вывода/с для пятого состояния. См. pinctrl-0.
 

сброс имен

массив строк

 Имя каждого сброса
 

libopencm3: флаги регистра состояния USART

90 040 FE: Ошибка кадрирования. Подробнее…
#define USART_SR_CTS   (1 << 9)
  CTS: C Флаг ТС. Подробнее…
 
#define USART_SR_LBD   (1 << 8)
  9004 5 LBD: Флаг обнаружения обрыва LIN. Подробнее…
 
#define USART_SR_TXE   (1 << 7)
  TXE: буфер передачи данных пуст. Подробнее…
 
#define USART_SR_TC   (1 << 6)
  TC: Передача завершена. Подробнее…
 
#define USART_SR_RXNE   (1 << 5)
  900 45 RXNE: регистр данных чтения не пуст. Подробнее…
 
#define  USART_SR_IDLE   (1 << 4)
  IDLE: обнаружена свободная линия. Подробнее…
 
#define USART_SR_ORE   (1 << 3)
  ORE: ошибка переполнения. Подробнее…
 
#define USART_SR_NE   (1 << 2)
  NE: флаг ошибки шума. Подробнее…
 
#define USART_SR_FE   (1 << 1)
 
 
#define USART_SR_PE   (1 << 0)
  PE: ошибка четности. Подробнее…
 

◆ USART_SR_CTS

#define USART_SR_CTS   (1 << 9)

CTS: Флаг CTS.

Примечание
: не определено для UART4 и UART5

Определение в строке 136 файла usart_common_f124. h.

◆ USART_SR_FE

#define USART_SR_FE   (1 << 1)

FE: Ошибка кадрирования.

Определение в строке 160 файла usart_common_f124.h.

◆ USART_SR_IDLE

#define USART_SR_IDLE   (1 << 4)

IDLE: Обнаружена свободная линия.

Определение в строке 151 файла usart_common_f124.h.

◆ USART_SR_LBD

#define USART_SR_LBD   (1 << 8)

LBD: Флаг обнаружения обрыва LIN.

Определение в строке 139 файла usart_common_f124.h.

◆ USART_SR_NE

#define USART_SR_NE   (1 << 2)

NE: флаг ошибки шума.

Определение в строке 157 файла usart_common_f124.h.

◆ USART_SR_ORE

#define USART_SR_ORE   (1 << 3)

ORE: ошибка переполнения.

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

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