STM32.USART Использование StdPeriph_Lib

Для работы с USART в библиотеке имеются файлы stm32f10x_usart.c и stm32f10x_usart.h

Рассмотрим некоторые основные функции.

void USART_Init ( USART_TypeDef * USARTx, USART_InitTypeDef  USART_InitStruct )

Данная ф-я выполняет инициализацию выбранного модуля USART. Номер модуля задается первым аргументом(USARTx), который может принимать следующие значения: USART1, USART2, USART3, USART4 или USART5. Второй аргумент – указатель на инициализационную структуру. Она имеет следующий вид:

 

typedef struct
{
   uint32_t USART_BaudRate;              //скорость обмена         
   uint16_t USART_WordLength;            //длина слова
   uint16_t USART_StopBits;              //количество стоп-битов
   uint16_t USART_Parity;                //проверка на четность(нечетность)
   uint16_t USART_Mode;                  //включает приемник и (или) передатчик
   uint16_t USART_HardwareFlowControl;   //использование выводов управления обменом
} USART_InitTypeDef;

Немного подробнее о полях структуры.

USART_BaudRate задает скорость обмена. Правила хорошего тона предполагают использовать стандартные скорости ( 2400, 4800, 9600 и т.д. ) но никто не запрещает использовать другие значения.

Длина слова USART_WordLength может принимать следующие значения:

  • USART_WordLength_8b – 8 бит данных;
  • USART_WordLength_9b – 9 бит данных

Чаще всего применим первый вариант.

Поле USART_StopBits определяет количество стоповых битов в посылке. Может принимать следующие значения:

  • USART_StopBits_1
  • USART_StopBits_0_5
  • USART_StopBits_2
  • USART_StopBits_1_5

USART_Parity – проверка четности. Позволяет выполнить некоторую аппаратную проверку правильности передачи данных:

  • USART_Parity_No
  • USART_Parity_Even
  • USART_Parity_Odd

Поле USART_Mode позволяет включить приемник и (или) передатчик:

  • USART_Mode_Rx
  • USART_Mode_Tx

Если нужно включить и приемник и передатчик  делаем так: USART_Mode_Rx | USART_Mode_Tx

USART_HardwareFlowControl определяет использование выводов RTS и CTS. В обычном, асинхронном, режиме присваиваем этому полю следующее значение  — USART_HardwareFlowControl_None

Пример использования данной ф-ии.

GPIO_InitTypeDef  GPIO_InitStructure;                                 //для инициализации порта
USART_InitTypeDef USART_InitStructure;                                //для инициализации USART
 
//настроить выводы, к которым подключены RX и TX
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);                 //тактирование GPIOA
GPIO_InitStructure.GPIO_Pin                   = GPIO_Pin_10;          //линия RX
GPIO_InitStructure.GPIO_Mode                  = GPIO_Mode_IN_FLOATING;//вход, третье состояние
GPIO_Init(GPIOA, &GPIO_InitStructure);                                //выполнить инициализацию
GPIO_InitStructure.GPIO_Pin                   = GPIO_Pin_9;           //линия TX
GPIO_InitStructure.GPIO_Speed                 = GPIO_Speed_50MHz;     //макс частота сигнала
GPIO_InitStructure.GPIO_Mode                  = GPIO_Mode_AF_PP;      //симетричный выход
GPIO_Init(GPIOA, &GPIO_InitStructure);                                //выполнить инициализацию
 
//настройка модуля USART
RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1,ENABLE);
USART_InitStructure.USART_BaudRate            = 115200;
USART_InitStructure.USART_WordLength          = USART_WordLength_8b;
USART_InitStructure.USART_StopBits            = USART_StopBits_1;
USART_InitStructure.USART_Parity              = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);

void USART_SendData ( USART_TypeDef * USARTx,  uint16_t Data ) – осуществляет запись данных в регистр данных передатчика, тем самым запуская процесс передачи.

uint16_t USART_ReceiveData ( USART_TypeDef * USARTx) – чтение принятых данных.

FlagStatus USART_GetFlagStatus ( USART_TypeDef * USARTx,  uint16_t USART_FLAG ) – возвращает состояние требуемого флага. Какой именно флаг интересует задается аргументом USART_FLAGМожет принимать следующие значения:

  • USART_FLAG_TXE   – регистр данных передатчика пуст;
  • USART_FLAG_TC     — передача окончена;
  • USART_FLAG_RXNE – приемник принял слово, можно забирать;
  • USART_FLAG_NE     — ошибка принятых данных (обнаружен шум в принимаемом кадре);
  • USART_FLAG_FE     — ошибка кадра (первый стоп-бит равен нулю)  

Перечислены только некоторые флаги. Подробную информацию можно найти в файле stm32f10x_usart.h

Функция возвращает состояние флага – установлен (SET) или сброшен (RESET).

void USART_ClearFlag ( USART_TypeDef * USARTx, uint16_t  USART_FLAG ) – сброс нужного флага или группы флагов.

О первоисточнике можете узнать тут