Work with UART (C) » History » Version 2
Version 1 (krufter_multiclet, 06/11/2013 05:43 PM) → Version 2/4 (krufter_multiclet, 06/11/2013 05:57 PM)
h1. Work with UART (C)
Observe transmit and receive messages via UART more details (in С).
Configuration UART on transmission and reception message in C looks like simple as in Assembler of multicellular processor.
Besides this in C for working with UART available usefull functions and macros, such as sending value int type, sending string,
sending definition array of data memory.
In code examples use UART library, which must required:
<pre>
#include <uart.h>
</pre>
h2. а) Transmit via Передача по UART
h3. 1. Configurate Настраиваем UART on transmission на передачу
First step - create structure (all elements of structure see in Первым шагом задаём структуру (все элементы структуры можно посмотреть в файле uart.h).
<pre>
UART_InitTypeDef UART_InitStructure;
</pre>
Initialize needed parameters (other parameters initialize as null). Затем инициализируем нужные параметры (незаданные параметры по умолчанию инициализируются нулём).
<pre>
UART_InitStructure.BaudRate = 38400; //скорость обмена данными
UART_InitStructure.TypeParity = 0x00000000; //тип контроля четности
UART_InitStructure.Parity = 0x00000000; //разрешение контроля четности
UART_InitStructure.FlowControl = 0x00000000; //разрешение аппаратного контроля
UART_InitStructure.Mode = 0x00000002; //разрешение передачи
</pre>
Initialize for Инициализация для UART0:
<pre>
uart_init(UART0, &UART_InitStructure);
</pre>
For Для UART3:
<pre>
uart_init(UART3, &UART_InitStructure);
</pre>
h3. 2. Allow alternative port functions Разрешаем альтернативные функции порта
For Для UART0:
<pre>
GPIOB->BPS = 0x00000F00;
</pre>
For Для UART3:
<pre>
GPIOD->BPS = 0x00000F00;
</pre>
h3. 3. Check transmitter FIFO on full
For Проверка буфера передатчика на полноту
Для UART0:
<pre>
while(UART_FIFO_TX_FULL(UART0) == 1);
</pre>
For Для UART3:
<pre>
while(UART_FIFO_TX_FULL(UART3) == 1);
</pre>
h3. 4. Transmit byte via 4.Передача байта по UART
For Для UART0:
<pre>
UART_SEND_BYTE(0xAB, UART0);
</pre>
For Для UART3:
<pre>
UART_SEND_BYTE(0xAB, UART3);
</pre>
As a result you can get simple example - transmission byte via В результате можно получить простой пример по отправке байта по UART with baudrate со скоростью 38400 kbit/s: Кбит/с:
For Для UART0:
<pre>
#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; //разрешение передачи
uart_init(UART0, &UART_InitStructure);
GPIOB->BPS = 0x00000F00;
while(UART_FIFO_TX_FULL(UART0) == 1);
UART_SEND_BYTE(0xAB, UART0);
}
</pre>
Для UART3 пример можно составить аналогично, только лишь заменив порт B на D и UART0 на UART3.
Переданный байт данных можно получить с помощью программы - монитора COM-порта настроенного на данные с 1 стоп-битом,
скоростью передачи 38400 кбит/с, размером данных - 8 бит и отключённым контролем чётности.
h2. б) Приём по UART
Для приёма по UART необходимо:
h3. 1. Выполнить пункты 1,2 под а)
h3. 2. Проверить буфер приемника на наличие новых данных
Для UART0:
<pre>
while(UART_NEW_DATA(UART0) == 0);
</pre>
Для UART3:
<pre>
while(UART_NEW_DATA(UART3) == 0);
</pre>
h3. 3. Прочитать данные
Для UART0:
<pre>
rbyte = UART_GET_BYTE(UART0);
</pre>
Для UART3:
<pre>
rbyte = UART_GET_BYTE(UART3);
</pre>
Пример приёма байта данных составить довольно просто по аналогии с передачей байта. Следует заметить, что помимо анализа буфера приемника на
наличие новых данных, необходимо проверять буфер приёма на полноту.
h2. API функции UART:
Кроме полезных макросов имеются функции для вывода данных по UART.
Разберём подробнее каждую функцию, которая объявлена в uart.h
<pre>1) void uart_init(UART_TypeDef *UART, UART_InitTypeDef* UART_InitStruct)</pre>
Функция _uart_init()_ выполняет инициализацию заданного номера UART.
UART - может принимать значения: UART0, UART1, UART2, UART3
UART_InitStruct - структура, содержащая элементы конфигурации UART
<pre>2) void DM2UART(UART_TypeDef *UART, int start_address, int size_block)</pre>
Функция _DM2UART ()_ выводит область памяти данных по UART младшим байтом вперёд.
UART - может принимать значения: UART0, UART1, UART2, UART3
start_address - начальный адрес памяти данных
size_block - размер области данных
<pre>3) void uart_send_str(char *str, UART_TypeDef *UART)</pre>
Функция _uart_send_str()_ выводит строку по UART.
UART - может принимать значения: UART0, UART1, UART2, UART3
str - строка символов
<pre>4) void uart_send_int(int str, UART_TypeDef *UART)</pre>
Функция _uart_send_int()_ выводит переменную типа int по UART.
UART - может принимать значения: UART0, UART1, UART2, UART3
str - переменная типа int
h3. Замечание:
В версиях библиотеки до 01.04.13 необходимо перед вызовом функций DM2UART (), uart_send_int()
применять конструкцию:
<pre>
while(UART_FIFO_TX_EMPTY(UART0) == 0);
</pre>
В версиях библиотеки после 01.04.13 функции могут использоваться самостоятельно.
Observe transmit and receive messages via UART more details (in С).
Configuration UART on transmission and reception message in C looks like simple as in Assembler of multicellular processor.
Besides this in C for working with UART available usefull functions and macros, such as sending value int type, sending string,
sending definition array of data memory.
In code examples use UART library, which must required:
<pre>
#include <uart.h>
</pre>
h2. а) Transmit via Передача по UART
h3. 1. Configurate Настраиваем UART on transmission на передачу
First step - create structure (all elements of structure see in Первым шагом задаём структуру (все элементы структуры можно посмотреть в файле uart.h).
<pre>
UART_InitTypeDef UART_InitStructure;
</pre>
Initialize needed parameters (other parameters initialize as null). Затем инициализируем нужные параметры (незаданные параметры по умолчанию инициализируются нулём).
<pre>
UART_InitStructure.BaudRate = 38400; //скорость обмена данными
UART_InitStructure.TypeParity = 0x00000000; //тип контроля четности
UART_InitStructure.Parity = 0x00000000; //разрешение контроля четности
UART_InitStructure.FlowControl = 0x00000000; //разрешение аппаратного контроля
UART_InitStructure.Mode = 0x00000002; //разрешение передачи
</pre>
Initialize for Инициализация для UART0:
<pre>
uart_init(UART0, &UART_InitStructure);
</pre>
For Для UART3:
<pre>
uart_init(UART3, &UART_InitStructure);
</pre>
h3. 2. Allow alternative port functions Разрешаем альтернативные функции порта
For Для UART0:
<pre>
GPIOB->BPS = 0x00000F00;
</pre>
For Для UART3:
<pre>
GPIOD->BPS = 0x00000F00;
</pre>
h3. 3. Check transmitter FIFO on full
For Проверка буфера передатчика на полноту
Для UART0:
<pre>
while(UART_FIFO_TX_FULL(UART0) == 1);
</pre>
For Для UART3:
<pre>
while(UART_FIFO_TX_FULL(UART3) == 1);
</pre>
h3. 4. Transmit byte via 4.Передача байта по UART
For Для UART0:
<pre>
UART_SEND_BYTE(0xAB, UART0);
</pre>
For Для UART3:
<pre>
UART_SEND_BYTE(0xAB, UART3);
</pre>
As a result you can get simple example - transmission byte via В результате можно получить простой пример по отправке байта по UART with baudrate со скоростью 38400 kbit/s: Кбит/с:
For Для UART0:
<pre>
#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; //разрешение передачи
uart_init(UART0, &UART_InitStructure);
GPIOB->BPS = 0x00000F00;
while(UART_FIFO_TX_FULL(UART0) == 1);
UART_SEND_BYTE(0xAB, UART0);
}
</pre>
Для UART3 пример можно составить аналогично, только лишь заменив порт B на D и UART0 на UART3.
Переданный байт данных можно получить с помощью программы - монитора COM-порта настроенного на данные с 1 стоп-битом,
скоростью передачи 38400 кбит/с, размером данных - 8 бит и отключённым контролем чётности.
h2. б) Приём по UART
Для приёма по UART необходимо:
h3. 1. Выполнить пункты 1,2 под а)
h3. 2. Проверить буфер приемника на наличие новых данных
Для UART0:
<pre>
while(UART_NEW_DATA(UART0) == 0);
</pre>
Для UART3:
<pre>
while(UART_NEW_DATA(UART3) == 0);
</pre>
h3. 3. Прочитать данные
Для UART0:
<pre>
rbyte = UART_GET_BYTE(UART0);
</pre>
Для UART3:
<pre>
rbyte = UART_GET_BYTE(UART3);
</pre>
Пример приёма байта данных составить довольно просто по аналогии с передачей байта. Следует заметить, что помимо анализа буфера приемника на
наличие новых данных, необходимо проверять буфер приёма на полноту.
h2. API функции UART:
Кроме полезных макросов имеются функции для вывода данных по UART.
Разберём подробнее каждую функцию, которая объявлена в uart.h
<pre>1) void uart_init(UART_TypeDef *UART, UART_InitTypeDef* UART_InitStruct)</pre>
Функция _uart_init()_ выполняет инициализацию заданного номера UART.
UART - может принимать значения: UART0, UART1, UART2, UART3
UART_InitStruct - структура, содержащая элементы конфигурации UART
<pre>2) void DM2UART(UART_TypeDef *UART, int start_address, int size_block)</pre>
Функция _DM2UART ()_ выводит область памяти данных по UART младшим байтом вперёд.
UART - может принимать значения: UART0, UART1, UART2, UART3
start_address - начальный адрес памяти данных
size_block - размер области данных
<pre>3) void uart_send_str(char *str, UART_TypeDef *UART)</pre>
Функция _uart_send_str()_ выводит строку по UART.
UART - может принимать значения: UART0, UART1, UART2, UART3
str - строка символов
<pre>4) void uart_send_int(int str, UART_TypeDef *UART)</pre>
Функция _uart_send_int()_ выводит переменную типа int по UART.
UART - может принимать значения: UART0, UART1, UART2, UART3
str - переменная типа int
h3. Замечание:
В версиях библиотеки до 01.04.13 необходимо перед вызовом функций DM2UART (), uart_send_int()
применять конструкцию:
<pre>
while(UART_FIFO_TX_EMPTY(UART0) == 0);
</pre>
В версиях библиотеки после 01.04.13 функции могут использоваться самостоятельно.