УСАПП

УСАПП - универсальный синхронно-асинхронный приемо-передатчик(USART Universal synchronous asynchronous receiver transmitter). Также известный как последовательный порт. Но в отличие от того последовательного порта с которым мы привыкли сталкиваться в компьютере или в платах подобных этой, УСАПП только функциями последовательного асинхронного порта (УАПП, UART) в stm32 не ограничивается.

Полный функционал УСАПП включает в себя - синхронный однопроводной и полудуплексный способ коммуникации. Также можно использовать его для образования LIN (локальная межмодульная сеть), работы с СМАРТ-картами, инфракрасным приемо-передатчиком (IrDA Infrared data association) SIR ENDEC спецификации, а также операций с модемом (CTS/RTS). Также можно применять при многопроцессорных (многомастерных) коммуникациях.

блок-схема УСАПП:

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

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

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

И как обычно в УСАППе присутствует контроллер прерываний/событий позволяющий строить гибкую систему.

Начинаем мы как обычно с создания директории проектов:

nis@jane ~/stm32/f4examples $ mkdir 06-usart

nis@jane ~/stm32/f4examples $ cd 06-usart/

Также создадим базовый проект:

nis@jane ~/stm32/f4examples/06-usart $ cp -a ../05-timers/00-base/ .

Заодно, скопируем заголовочный файл альтернативных функций портов в/в:

nis@jane ~/stm32/f4examples/06-usart $ cp ../05-timers/03-ccr-pwm-mode/gpio_af.h 00-base/

Для начала создадим достаточно простой проект - передача байта.

Усложним проект, добавив прием - прием байта.

Передовать байты по одному не так удобно как строки поэтому следующий пример это - передача строки.

Далее сделаем помимо передачи строки и прием строки.

Т.к. просто передавать и принимать байты неинтересно, сделаем реакцию периферии МК на ввод пользователя - интерактивное меню.

Более эффективно будет разгрузить основной цикл программы поэтому перейдем к прерываниям - прерывание по приему.

Также рассмотрим дополнения для ввода-вывода строк - форматированный вывод и ввод чисел.