Developer от Бога

DV

четверг, 6 июля 2017 г.

STM32. USART

USART возможно самый простой способ передачи данных, с программной и физической точки зрения. Передатчики USART также еще ассоциируют с физическим уровнем RS-232. Принцип его действия прост : высокий уровень на линии передачи соответствует молчанию, передача начинается с перехода линии в логический ноль, это называется стартовым битом, после него принимающая система понимает что следующие логические уровни это уже - данные. Стоповый бит - последний бит соответствующий логической единице, сообщает что передача данных, отдельного байта, или просто какой-нибудь порции данных прекращена. UART передает данные не только байтами ( порциями в 8 бит ) , но есть и стандарты 5, 6, 7, и 9 бит. Все порции данных обрамлены стартовым и стоповым битами. Таким образом, для передачи/приема данных достаточно одной линии и общего нуля. Для корректной работы передатчика и приемника нужно согласовывать промежутки времени - одинаковую рабочую частоту .
Скорость передачи данных микроконтроллере STM32f407VG задается значением в регистре USART2_BRR, и вычисляется по формуле : частота микроконтроллера деленная на желаемую скорость передачи данных и деленная на 16.
Полученное число обычно не является целым, его остаток умножают на 16, и логически прибавляют его цифру к целому ( не путать с математическим).
Например: если целое 0х68 , а остаток 3, значение занесенное в регистр USART2_BRR = 0х683.
Обычно при изучении интерфейса USART, наибольшую трудность приносит понимание расчета значения для регистра скорости передачи USART2_BRR.



Адреса регистров USART:
//..........USART1......
#define RCC_UART1 *((uint32_t*)0x40023844)//RCC=0x10;
#define USART1_SR *((uint32_t*)0x40011000)
#define USART1_DR *((uint32_t*)0x40011004)
#define USART1_BRR *((uint32_t*)0x40011008)
#define USART1_CR1 *((uint32_t*)0x4001100C)
#define USART1_CR2 *((uint32_t*)0x40011010)
#define USART1_CR3 *((uint32_t*)0x40011014)
#define USART1_GTPR *((uint32_t*)0x40011018)


//.......USART2... #define RCC_UART2 *((uint32_t*)0x40023840)//RCC=0x20000;
#define USART2_SR *((uint32_t*)0x40004400)
#define USART2_DR *((uint32_t*)0x40004404)
#define USART2_BRR *((uint32_t*)0x40004408)
#define USART2_CR1 *((uint32_t*)0x4000440C)
#define USART2_CR2 *((uint32_t*)0x40004410)
#define USART2_CR3 *((uint32_t*)0x40004414)
#define USART2_GTPR *((uint32_t*)0x40004418)


//...........USART3......
#define RCC_UART3 *((uint32_t*)0x40023840)//RCC=0x40000;
#define USART3_SR *((uint32_t*)0x40004800)
#define USART3_DR *((uint32_t*)0x40004804)
#define USART3_BRR *((uint32_t*)0x40004808)
#define USART3_CR1 *((uint32_t*)0x4000480C)
#define USART3_CR2 *((uint32_t*)0x40004810)
#define USART3_CR3 *((uint32_t*)0x40004814)
#define USART3_GTPR *((uint32_t*)0x40004818)

Комментариев нет:

Отправить комментарий