USART - универсальный синхронно-асинхронный приёмо-передатчик

Offset: 0x00
Status register
Регистр статуса
Offset: 0x04
Data register
Регистр данных
Offset: 0x08
Baud rate register
Регистр настройки скорости обмена
Offset: 0x0C
Control register 1
Первый регистр управления
Offset: 0x10
Control register 2
Второй регистр управления
Offset: 0x14
Control register 3
Третий регистр управления
Offset: 0x18
Guard time and prescaler register
Регистр значения времени защиты (для Smartcard) и предделитель (для IrDA и Smartcard)


RX: Receive Data Input - вход последовательных данных.

TX: Transmit Data Output - выход последовательных данных.

Oversampling techniques - метод избыточной выборки (преддискретизации). Каждый принятый бит данных дискритезируется на некоторое количество выборок (например 16 выборок для STM32F103C8T6). Полученные значения каждой выборки в пределах одного бита сравниваются между собой по определённому алгоритму. В результате делаются выводы: о значении принятого бита, о достоверности этого значения и об уровне шума в линии.

Idle character - пустой символ. Интерпретируется как кадр, где все биты равны "1", в том числе стартовый и стоповые биты.

Break character - символ Break. Интерпретируется как кадр, где все биты равны "0", в том числе стартовый и стоповые биты. По окончании кадра передатчик вставляет 1 или 2 стоповых бита для синхронизации и подтверждения следующего стартового бита.


#define PERIPH_BASE           ((uint32_t)0x40000000)     /* Peripheral base address in the alias region */
#define APB1PERIPH_BASE       PERIPH_BASE
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x20000)

#define USART2_BASE           (APB1PERIPH_BASE + 0x4400)
#define USART3_BASE           (APB1PERIPH_BASE + 0x4800)
#define UART4_BASE            (APB1PERIPH_BASE + 0x4C00)
#define UART5_BASE            (APB1PERIPH_BASE + 0x5000)

#define USART1_BASE           (APB2PERIPH_BASE + 0x3800)

#define USART2              ((USART_TypeDef *) USART2_BASE)
#define USART3              ((USART_TypeDef *) USART3_BASE)
#define UART4               ((USART_TypeDef *) UART4_BASE)
#define UART5               ((USART_TypeDef *) UART5_BASE)

#define USART1              ((USART_TypeDef *) USART1_BASE)



typedef struct
{
  __IO uint16_t SR;
  uint16_t  RESERVED0;
  __IO uint16_t DR;
  uint16_t  RESERVED1;
  __IO uint16_t BRR;
  uint16_t  RESERVED2;
  __IO uint16_t CR1;
  uint16_t  RESERVED3;
  __IO uint16_t CR2;
  uint16_t  RESERVED4;
  __IO uint16_t CR3;
  uint16_t  RESERVED5;
  __IO uint16_t GTPR;
  uint16_t  RESERVED6;
} USART_TypeDef;


/******  STM32 specific Interrupt Numbers *****************************/
...
  USART1_IRQn                 = 37,     /* USART1 global Interrupt    */
  USART2_IRQn                 = 38,     /* USART2 global Interrupt    */
  USART3_IRQn                 = 39,     /* USART3 global Interrupt    */
...
  UART4_IRQn                  = 52,     /* UART4 global Interrupt     */
  UART5_IRQn                  = 53,     /* UART5 global Interrupt     */
...