Работа с последовательным портом (UART)

К СВЕДЕНИЮ

Библиотека wiringRP автоматически определяет модель вашей платы (Repka Pi 3 или 4) и вариант распиновки для корректной настройки UART-пинов. Однако доступность портов и их системные имена (/dev/ttyS*) различаются между моделями.

Repka Pi 3 (SoC Allwinner H5) #

Константа Интерфейс Пин TX Пин RX Доступен в вариантах распиновки
UART0_BUS UART0 PA4 (пин 8) PA5 (пин 10) Всегда (1-9)
UART2_BUS UART2 PA0 (пин 29) PA1 (пин 31) 3, 6
S_UART_BUS S-UART PL2 (пин 16) PL3 (пин 18) 3

Repka Pi 4 (SoC Allwinner H6) #

Константа Интерфейс Пин TX Пин RX Доступен в вариантах распиновки
UART0_BUS UART0 PH0 (пин 8) PH1 (пин 10) Всегда (1-11)
S_UART_BUS S-UART PL2 (пин 16) PL3 (пин 18) 3
UART3_BUS UART3 PD23 (пин 28) PD24 (пин 27) 3

Важные замечания #

  • Отключение системной консоли: По умолчанию UART0 (/dev/ttyS0) используется операционной системой для вывода отладочных логов. Чтобы использовать его в своих программах, необходимо отключить системную консоль. Это можно сделать через утилиту repka-config в разделе System Options -> S4 Console.

serialSetup() #

Инициализирует функцию передачи данных с использованием интерфейса UART.

Синтаксис #

int serialSetup(const int serialHub, const int baud)

Параметры #

serialHub - номер UART контроллера, доступные значения:

  • UART0_BUS - контроллер UART0.
  • UART2_BUS - контроллер UART2.
  • S_UART_BUS - контроллер S_UART.

baud - скорость передачи данных, доступные значения:

  • BAUD_50 - 50 бод (бит/сек).
  • BAUD_75 - 75 бод (бит/сек).
  • BAUD_110 - 110 бод (бит/сек).
  • BAUD_134 - 134 бод (бит/сек).
  • BAUD_150 - 150 бод (бит/сек).
  • BAUD_200 - 200 бод (бит/сек).
  • BAUD_300 - 300 бод (бит/сек).
  • BAUD_600 - 600 бод (бит/сек).
  • BAUD_1200 - 1200 бод (бит/сек).
  • BAUD_1800 - 1800 бод (бит/сек).
  • BAUD_2400 - 2400 бод (бит/сек).
  • BAUD_4800 - 4800 бод (бит/сек).
  • BAUD_9600 - 9600 бод (бит/сек).
  • BAUD_19200 - 19200 бод (бит/сек).
  • BAUD_38400 - 38400 бод (бит/сек).
  • BAUD_57600 - 57600 бод (бит/сек).
  • BAUD_115200 - 115200 бод (бит/сек).
  • BAUD_230400 - 230400 бод (бит/сек).
  • BAUD_460800 - 460800 бод (бит/сек).
  • BAUD_500000 - 500000 бод (бит/сек).
  • BAUD_576000 - 576000 бод (бит/сек).
  • BAUD_921600 - 921600 бод (бит/сек).
  • BAUD_1000000 - 1000000 бод (бит/сек).
  • BAUD_1152000 - 1152000 бод (бит/сек).
  • BAUD_1500000 - 1500000 бод (бит/сек).
  • BAUD_2000000 - 2000000 бод (бит/сек).
  • BAUD_2500000 - 2500000 бод (бит/сек).
  • BAUD_3000000 - 3000000 бод (бит/сек).
  • BAUD_3500000 - 3500000 бод (бит/сек).
  • BAUD_4000000 - 4000000 бод (бит/сек).

Возврат #

Файловый дескриптор инициализированного последовательного порта, или отрицательное значение в случае ошибки.

serialRelease() #

Высвобождает ресурсы задействованные функцией передачи данных с использованием UART интерфейса.

Синтаксис #

void serialRelease(const int fd)

Параметры #

fd - файловый дескриптор последовательного порта UART.

Возврат #

Ничего.

serialFlush() #

Очищает буферы приема и передачи данных последовательного порта UART.

Синтаксис #

void serialFlush(const int fd)

Параметры #

fd - файловый дескриптор последовательного порта UART.

Возврат #

Ничего.

serialPutchar() #

Записывает символ в буфер передачи данных последовательного порта UART.

Синтаксис #

void serialPutchar(const int fd, const unsigned char ch)

Параметры #

fd - файловый дескриптор последовательного порта UART.

ch - значение передаваемого символа.

Возврат #

Ничего.

serialPuts() #

Записывает строку символов в буфер передачи данных последовательного порта UART.

Синтаксис #

void serialPuts(const int fd, const char *str)

Параметры #

fd - файловый дескриптор последовательного порта UART.

str - значение передаваемого символа (байта).

Возврат #

Ничего.

serialPrintf() #

Записывает форматированную строку символов в буфер передачи данных последовательного порта UART.

Синтаксис #

void serialPrintf(const int fd, const char *message, ...)

Параметры #

fd - файловый дескриптор последовательного порта UART.

message - указатель на строку форматирования.

... - список параметров для строки форматирования.

Возврат #

Ничего.

serialDataAvail() #

Получает число байтов в приемном буфере последовательного порта UART.

Синтаксис #

int serialDataAvail(const int fd)

Параметры #

fd - файловый дескриптор последовательного порта UART.

Возврат #

Количество байт данных, находящихся в приемном буфере последовательного порта UART.

serialGetchar() #

Считывает символ из приемного буфера последовательного порта UART.

Синтаксис #

int serialGetchar(const int fd)

Параметры #

fd - файловый дескриптор последовательного порта UART.

Возврат #

Полученный символ из приемного буфера последовательного порта UART.

Пример использования функций Serial (UART) #

Код управляет обменом данными между портами UART0 и S_UART, подключенными в кросс-режиме RX->TX и TX->RX.

#include <stdio.h>
#include <stdlib.h>
#include "wiringRP.h"
#include "serial.h"

// Глобальные переменные и константы
int uart0_fd, uart2_fd, s_uart_fd;

void setup() {
    // Инициализация библиотек wiringRP
    if (setupWiringRP(WRP_MODE_SUNXI) < 0)
        exit(EXIT_FAILURE);

    // Инициализация пользовательских объектов
    uart0_fd = serialSetup(UART0_BUS, BAUD_9600);
    uart2_fd = serialSetup(UART2_BUS, BAUD_9600);
    s_uart_fd = serialSetup(S_UART_BUS, BAUD_9600);
}

void loop() {
    // Основной цикл программы
    serialPrintf(uart0_fd, "Hello world!");
    delay(500);
    while (serialDataAvail(s_uart_fd) > 0) {
        putchar(serialGetchar(s_uart_fd));
        fflush(stdout);
    }
    putchar('\n');
    delay(500);
}


ONDESTROY() {
    // Освобождение занятых ресурсов, выключение напряжения на пинах
    serialRelease(uart0_fd);
    serialRelease(uart2_fd);
    serialRelease(s_uart_fd);
    // Завершение работы библиотек
    releaseWiringRP();

    exit(0);    // выход из программы
}

MAIN_WIRINGRP();

2035 просмотров0 комментариев
0

Комментарии (0)

Для участия в обсуждении Вы должны быть авторизованным пользователем
Разделы

Навигация

ВойтиРегистрация