Project

General

Profile

Работа с UART (Си) » History » Version 13

« Previous - Version 13/33 (diff) - Next » - Current version
krufter_multiclet, 04/18/2013 06:30 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) == 1);

Для UART3:

while(UART_NEW_DATA(UART) == 1);