Передача байта

Для начала нам потребуется последовательный порт в компьютере, либо его usb-аналог. Я воспользовался одним из своих проектов для этой цели - Модульная система на FT2232. Также нам потребуется кабель, к примеру вот этот:

После этого можно начинать наш проект. Из программной части на стороне компьютера подойдет любая терминальная программа - gtkterm, putty или иное. Главное, чтобы вы могли выбирать любой порт и задавать его скорость.

Всего у нас 6 блоков УСАПП:

Четыре из них (USART1,2,3,6) с полной функциональностью, и два (USART4,5) с возможностью только асинхронной работы и без поддержки смарт-карт и аппаратного контроля потока. Эти возможности нам пока не понадобятся т.к. мы будем использовать УСАПП как УАПП.

Для своих задач выберем УСАПП №1 (USART1). Это мое личное предпочтение, т.к. видно из диаграммы они все почти одинаковой функциональности, то вы можете использовать из них любой. По крайней мере для примеров из этого цикла это точно возможно. Как видно из ДШ линии портов В/В на которые можно переключить наш последовательный порт следующие - pb6: USART1_TX, pb7: USART1_RX.

Алгоритм проекта следующий - мы используем настройки таймера из проекта Прерывание по переполнению для генерации события при котором мы будем зажигать и гасить красный светодиод и попутно посылать один байт на линию TX. Частоту передачи для этого, равно как и для последующих проектов выберем 115200 бод.

Для начала создадим наш проект:

nis@jane ~/stm32/f4examples/06-usart $ cp -a 00-base/ 01-send-byte

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

После этого создадим файл usart.c в котором определим функцию передачи байта для дальнейшего упрощения работы с кодом:

nis@jane ~/stm32/f4examples/06-usart/01-send-byte $ touch usart.c

После этого добавим обработчик таймера №4 в файл startup.c.

Заодно дополним gpio_af.h чтобы было удобно назначать альтернативные фунции линиям портов в/в

А также инициализируем всю необходимую периферию в файле work.c.

После этого загрузим прошивку в МК:

nis@jane ~/stm32/f4examples/06-usart/01-send-byte $ make write

И вот, что у нас получится в итоге: