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)
Скорость передачи данных микроконтроллере 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)
Комментариев нет:
Отправить комментарий