Работа с UART (Си) » History » Version 14
« Previous -
Version 14/33
(diff) -
Next » -
Current version
krufter_multiclet, 04/18/2013 06:37 PM
Работа с UART (Си)¶
Рассмотрим передачу и приём сообщения по UART подробнее (на Си).
Сконфигурировать UART на передачу и приём сообщения на Си также просто как и на ассемблере мультиклеточного процессора.
Кроме того на Си для работы с UART доступны полезные функции и макросы, такие как вывод значения типа int, вывод строки,
вывод заданного массива памяти данных.
В приведённых ниже примерах кода используется библиотека для работы с UART, которую необходимо подключить:
#include <uart.h>
а)Передача по UART¶
1. Настраиваем UART на передачу¶
Первым шагом задаём структуру (все элементы структуры можно посмотреть в файле uart.h).
UART_InitTypeDef UART_InitStructure;
Затем инициализируем нужные параметры (незаданные параметры по умолчанию инициализируются нулём).
UART_InitStructure.BaudRate = 38400; //скорость обмена данными UART_InitStructure.TypeParity = 0x00000000; //тип контроля четности UART_InitStructure.Parity = 0x00000000; //разрешение контроля четности UART_InitStructure.FlowControl = 0x00000000; //разрешение аппаратного контроля UART_InitStructure.Mode = 0x00000002; //разрешение передачи
2. Разрешаем альтернативные функции порта¶
Для UART0:
GPIOB->BPS = 0x00000F00;
Для UART3:
GPIOD->BPS = 0x00000F00;
3. Проверка буфера передатчика на полноту¶
Для UART0:
while(UART_FIFO_TX_FULL(UART0) == 1);
Для UART3:
while(UART_FIFO_TX_FULL(UART3) == 1);
4.Передача байта по UART¶
Для UART0:
UART_SEND_BYTE(0xAB, UART0);
Для UART3:
UART_SEND_BYTE(0xAB, UART3);
В результате можно получить простой пример по отправке байта по UART со скоростью 38400 Кбит/с:
Для UART0:
#include <HDL51001_ccf.h> #include <uart.h> void main() { UART_InitTypeDef UART_InitStructure; UART_InitStructure.BaudRate = 38400; //скорость обмена данными UART_InitStructure.TypeParity = 0x00000000; //тип контроля четности UART_InitStructure.Parity = 0x00000000; //разрешение контроля четности UART_InitStructure.FlowControl = 0x00000000; //разрешение аппаратного контроля UART_InitStructure.Mode = 0x00000002; //разрешение передачи GPIOB->BPS = 0x00000F00; while(UART_FIFO_TX_FULL(UART0) == 1); UART_SEND_BYTE(0xAB, UART0); }
Для UART3 пример можно составить аналогично, только лишь заменив порт B на D и UART0 на UART3.
Переданный байт данных можно получить с помощью программы - монитора COM-порта настроенного на данные с 1 стоп-битом,
скоростью передачи 38400 кбит/с, размером данных - 8 бит и отключённым контролем чётности.
б)Приём по UART¶
Для приёма по UART необходимо:
1. Выполнить пункты 1,2 под а)¶
2. Проверить буфер приемника на наличие новых данных¶
Для UART0:
while(UART_NEW_DATA(UART0) == 0);
Для UART3:
while(UART_NEW_DATA(UART3) == 0);
3. Прочитать данные
Для UART0:
rbyte = UART_GET_BYTE(UART0);
Для UART3:
rbyte = UART_GET_BYTE(UART3);
Пример приёма байта данных составить довольно просто по аналогии с передачей байта.