На плате Maixduino есть 3 последовательных порта (UART): "/dev/uart1"
, "/dev/uart2"
и "/dev/uart3"
. Первый порт ("/dev/uart1"
) используется FreeRTOS как порт для отладки и прошивки. По этому не рекомендуется использовать, а два других порта можно использовать для обмена данными с внешними устройствами.
В этом уроке настроим последовательный порт (UART), напишем пример программы и будем передавать данные между Maixduino и компьютером.
Настройка UART порта
Перед использованием последовательного порта его необходимо настроить. Сначала в файле project_cfg.h
мы устанавливаем контакты (пины) Rx и Tx. Более подробно о настройке выходов / входов вы можете прочитать в первом уроке: Урок 1. Кнопка, светодиод. Функции управления вводом/выводом. Первая программа.
#ifndef PROJECT_CFG_H #define PROJECT_CFG_H #include <pin_cfg.h> #define UART1_RX_PIN (13) #define UART1_TX_PIN (14) const fpioa_cfg_t g_fpioa_cfg = { /* Версия */ .version = PIN_CFG_VERSION, /* Число функций */ .functions_count = 2, /* Офисание функций */ .functions = { /* */ {UART1_RX_PIN, FUNC_UART2_RX}, {UART1_TX_PIN, FUNC_UART2_TX}, }, }; #endif
Rx и Tx устанавлны на контакты 13 и 14 соответственно.
После этого необходимо открыть устройство uart2
с помощью функции io_open
.
/* Открываем UART2 устройство */ gpio = io_open("/dev/uart2");
И наконец настраиваем скорость COM порта, биты данных, количество стоп-бит и бит четности.
uart_config(uart2, 115200, 8, UART_STOP_1, UART_PARITY_NONE);
Также задаём тайм-аут для чтения:
uart_set_read_timeout(uart2, UINT32_MAX);
Примеры программ с UART
Напоследок приведу пример программы. В этой программе мы настроим выходной контакт, на этот контакт будет установлен светодиод, который будет мигать с определенным интервалом. Порт UART2 также будет настроен для обмена данными между Maixduino и компьютером. Миганть светодиодом будет задача static void blinkLedTask(void *pvParameters)
, принимать и передать данных по UART — static void uartTask(void *pvParameters)
.
Всё это дело выглядит следующим образом:
Чтобы лучше понять, как работает программа, почти к каждой строчке кода были добавлены комментарии.
Схема подключения
Светодиод подключается на 13-й контакт Maixduino/Arduino через резистор, ограничивающий ток. Преобразователь USB-UART подключается к контактам 8 и 9, Rx и Tx соответственно. В качестве конвертера можно использовать: PL2303, CH340, CP2102 или любой другой доступный.
Файл project_cfg.h
#ifndef PROJECT_CFG_H #define PROJECT_CFG_H #include <pin_cfg.h> /** * Номер внутреннего пина */ #define LED_IO (0) /** * Номер физического пина */ #define LED_PIN (3) #define UART1_RX_PIN (13) #define UART1_TX_PIN (14) const fpioa_cfg_t g_fpioa_cfg = { /* Версия */ .version = PIN_CFG_VERSION, /* Число функций */ .functions_count = 3, /* Офисание функций */ .functions = { /* */ {LED_PIN, static_cast<fpioa_function_t>(FUNC_GPIOHS0 + LED_IO)}, {UART1_RX_PIN, FUNC_UART2_RX}, {UART1_TX_PIN, FUNC_UART2_TX}, }, }; #endif
Файл main.cpp
#include "project_cfg.h" #include <FreeRTOS.h> #include <devices.h> #include <string.h> #include <syslog.h> #include <task.h> /** * Указатель на устройство UART 2 */ static handle_t uart2; /** * Указатель на устройство GPIO */ static handle_t gpio; /** * Текущее состояние светодиода */ static gpio_pin_value_t ledState; /** * Прототип задачи включения/выключения светодиода * * @param pvParameters Функции задач принимают параметр, имеющий тип указателя на void (т. е. void*). * Значение, указанное в pvParameters, будет передано в задачу. */ static void blinkLedTask(void *pvParameters); static void uartTask(void *pvParameters); int main() { BaseType_t retCode; const char helloMessage[] = "hello uart!\r\n"; /* Открываем GPIO0 устройство */ gpio = io_open("/dev/gpio0"); /* Перехват ошибок в процессе разработки */ configASSERT(gpio); /* Открываем uart2 устройство */ uart2 = io_open("/dev/uart2"); /* Перехват ошибок в процессе разработки */ configASSERT(uart2); /* Устанавливаем режим работы LED_IO пина на выход. */ gpio_set_drive_mode(gpio, LED_IO, GPIO_DM_OUTPUT); /* Задаём начальное состояние светодиода (выключаем) */ ledState = GPIO_PV_LOW; /* Пишем состояние в пин */ gpio_set_pin_value(gpio, LED_IO, ledState); uart_config(uart2, 115200, 8, UART_STOP_1, UART_PARITY_NONE); uart_set_read_timeout(uart2, UINT32_MAX); /* Создаём задачу с мигающим светодиодом */ retCode = xTaskCreateAtProcessor(0, blinkLedTask, "Blink Led task", 512, nullptr, 3, nullptr); /* Проверяем, если задача была успешно создана */ if (retCode == pdPASS) { /* В случае успеха выводим информационное сообщение */ LOGI("MFRB", "Blink Led task is running"); } else { /* В случае неудачи выводим предупреждающее сообщение */ LOGW("MFRB", "Blink Led task start problems"); } /* Создаём задачу с мигающим светодиодом */ retCode = xTaskCreateAtProcessor(1, uartTask, "Uart Task task", 1024, nullptr, 3, nullptr); /* Проверяем, если задача была успешно создана */ if (retCode == pdPASS) { /* В случае успеха выводим информационное сообщение */ LOGI("MFRB", "Uart Task task is running"); } else { /* В случае неудачи выводим предупреждающее сообщение */ LOGW("MFRB", "Uart Task task start problems"); } io_write(uart2, (uint8_t *)helloMessage, strlen(helloMessage)); for (;;) { } return 0; } static void blinkLedTask(void *pvParameters) { /* Время повторения */ unsigned int timeInMs; for (;;) { /* Меняем состояние в 1/0 */ if (GPIO_PV_HIGH == ledState) { ledState = GPIO_PV_LOW; timeInMs = 900; } else { ledState = GPIO_PV_HIGH; timeInMs = 100; } /* Пишем новое состояние в пин */ gpio_set_pin_value(gpio, LED_IO, ledState); /* Помещаем задачу в состояние Blocked на фиксированное количество тиков прерываний. Находясь в состоянии Blocked, задача не использует процессорное время, поэтому процессор загружен только полезной работой. С помощью макроса pdMS_TO_TICKS мы конвертируем миллисекунды в тики */ vTaskDelay(pdMS_TO_TICKS(timeInMs)); } } static void uartTask(void *pvParameters) { /* Полученный символ */ uint8_t receivedChar = 0; for (;;) { /* */ if (io_read(uart2, &receivedChar, 1) < 0) { /* Предупреждение о тайм-ауте */ LOGW("MFRB", "time out"); } else { /* Отправка символа обратно */ io_write(uart2, &receivedChar, 1); } } }
Результат
После компиляции программы и прошивки контроллера подключаемся к компьютеру через конвертер USB-UART. Открываем Arduino IDE, выбираем порт, который соответствует преобразователю, и открываем монитор порта.
Если нажать кнопку «RESET«, в консоли должно появиться сообщение «hello uart!«.
После появления сообщения мы можем отправить несколько символов (к примеру 1235467890), и мы получим эти символы обратно.
Материалы
Kendryte · GitHub
Maixduino-4.30(schematic)
Maixduino — одноплатный компьютер с ускорителем AI, RISC-V AI, форм-фактор Arduino и беспроводной модуль ESP32
https://gryaze-zashhita.ru/forum/messages/forum2/topic1581/message253133/?result=new#message253133
https://butal.ru/index.php/topic/5794-firmy-realizuiuschie-attestaty-i-diplomy/
купить диплом о высшем образовании
купить диплом
https://canadianpharmacy.icu/# best canadian pharmacy
https://withoutprescriptions.store/# reputable canadian online pharmacies
http://zalmo.ru
http://opgranit.ru
http://int.5bb.ru/viewtopic.php?id=11486#p46182
http://nashmir.kabb.ru/viewtopic.php?f=76&t=4831
http://ural-ecology.ru/viewtopic.php?f=2&t=694
http://gamesmaker.ru/forum/topic/11833/
http://diablomania.ru/forum/showthread.php?p=352441#post352441
https://worksale.jofo.me/2176961.html?_ga=2.118270921.1502545479.1661074345-657344380.1613652571
http://remcomp48.ru/perenos-dannyx
single women darling side online casual dating
http://ves.dp.ua/forum/viewtopic.php?f=25&t=58330
http://autoclub36.ru/forum/viewtopic.php?f=4&t=24029
http://mironline.getbb.ru/viewtopic.php?f=24&t=28979
https://forum.ipsc.org.ua/viewtopic.php?f=76&t=39602
http://soskidka.ru/krasota-i-zdorove/pochemu-poyavlyayutsya-sinyaki-pod-glazami-i-kak-ix-ubrat.html
Тhiѕ iѕ a very gkod tip ρarticularly tо those new to the blogosphere.
Briеf bᥙt veгy precise information? Mаny thanks for sharing thus one.
A mսst read article!
http://mipt-random.ru/ru/2019/09/16/добро-пожаловать/
https://citofrez.ru/forum/?PAGE_NAME=profile_view&UID=36817
http://fargonaoits.uz/?p=242
http://old.cvetokbrest.by/shop/korobki-s-tsvetami-i-sladostyami/korobka-s-tsvetami-i-sladostyami-105/
who is brent rivera dating absolutely free local dating site
http://bike.by/forum/viewtopic.php?f=84&t=14688
https://drugsoverthecounter.com/# over the counter inhalers
http://kreativv.ru/?p=92
http://vfyb.ru/showthread.php?t=17183&p=128167#post128167
http://rem.4nmv.ru/forum/profile.php?action=show&member=4018
http://multivarka-recepti.net/my-v-vostorge-nerealno-vkusnoe-myaso-recept-sochnogo-i-nezhnogo-myasa-v-multivarke/
http://arbitran.ru/2022/12/07/kupit-diplom-o-vysshem-obrazovanii-1.html
http://vladkornev.com/communication/forum/messages/forum4/message9542/9082-kupit-diplom-lyubogo-uchebnogo-zavedeniya-rf-nedorogo?result=new#message9542
http://apis.kz/communication/forum/user/2994871/
http://bwmod.de/index.php/forum/bewerbungen/1259
https://drugsoverthecounter.shop/# over the counter medicine for acid reflux
https://mastercode.ru/forum/?PAGE_NAME=profile_view&UID=2701
http://domovou.3nx.ru/viewtopic.php?p=1963#1963
http://whirlpowertool.ru/index.php?subaction=userinfo&user=ytoxavi
http://infogram.su/2022/08/08/kupit-diplom-16.html
https://ru24.net/moscow/334134796/
https://xn—-jtbikkccb6ahui4g.xn--p1ai/club/user/137/blog/1889/
http://diablomania.ru/forum/showthread.php?p=217596#post217596
https://superurok.ru/1130/diplom-roomm-com
https://vanburg.com/mw19/index.php/Купить_диплом_недорого_find_today_now
http://armada.com.uz/?page_id=166
http://little-witch.ru/viewtopic.php?f=44&t=3036
http://www.automania.by/forum/index.php?showtopic=14475
https://over-the-counter-drug.com/# over the counter antibiotics for tooth infection
https://ingprint.ru/club/user/45091/blog/2081/
http://voskresensk.myfor.ru/viewtopic.php?f=39&t=23279
http://xn--80aguehibm6a1cwe.xn--p1ai/rasporyadok-dnya/
http://eco-region31.ru/node/22039
http://avtomaster.net/modules.php?name=Forums&file=viewtopic&p=117782#117782
http://4computers.getbb.ru/viewtopic.php?f=10&t=11005
http://zerkala-pro.ru/moskva-v-otrazhenii-zerkal/
http://autoclub-cerato.ru/forum/28-baraholka/11291-prodazha-diplomov.html#post229425
http://ds20.seversk.ru/?p=3057
http://ds-20.dou.tomsk.ru/prazdnichnye-meropriyatiya-den-tomicha/
http://moscovy.4adm.ru/viewtopic.php?f=21&t=13032
http://www.musichunt.pro/blogs/view.htm?id=66388
http://dom-nam.ru/index.php/forum/dizajn-interera/13457-kupit-diplom#26548
http://forumkoldovstva.listbb.ru/viewtopic.php?f=37&t=5956
http://dog-ola.ru/viewtopic.php?f=28&t=3094&sid=5640c31b829c92493ec7c80600854bd3
http://bostonrgroup.ru/kupit-diplom-s-besplatnoy-dostavkoy-v-lyuboy-region
http://alternativaprofi.com/forum/viewthread.php?thread_id=19818
http://faizov.kz/index.php/component/kunena/2——/6200——-.html#6200
https://massintech.com/forum/user/465/
https://zithromax.science/# zithromax online australia
https://mastercode.ru/forum/?PAGE_NAME=profile_view&UID=2931
http://remcosmet.ru/apparat-kriolipoliza/
http://bishelp.ru/forum/topics/kupit-diplom-lyubogo-goda-vydachi-bez-predoplaty
http://samara110.ru/forum/viewtopic.php?f=15&t=1100
http://kvartal8b.getbb.ru/viewtopic.php?f=19&t=7673
https://stromectol.science/# minocycline pill
http://forumkasino.bestff.ru/viewtopic.php?id=1772#p3919
http://odesit.com/fm-t-9551-last.php
https://vsemsovetu.forum2x2.ru/t1835-topic#4102
http://agro-directory.dp.ua/wr_board/tools.php?event=profile&pname=igomys
https://amoxil.science/# buy amoxicillin from canada
http://www.aduforums.com/viewtopic.php?f=6&t=458630
http://sec31.ru/viewtopic.php?f=8&t=338747
http://fisher58.ru/index.php?showtopic=2987
http://www.lada-4×4.net/showthread.php?p=7383#post7383
http://forum.omnicomm.pro/index.php/topic,5883.0.html
http://www.chevrolet-club.com.ua/forum/viewtopic.php?f=19&t=31091
http://www.figarohair.ru/conf/viewtopic.php?f=10&t=8774&sid=ffa1d58f1408e3e800782bb3c81cd527
http://www.kainsksib.ru/123/index.php?showtopic=5152
http://krasnyyar.ru/index.php?sid=b76b66b984ed4247e707249a78e2296a
https://amoxil.science/# medicine amoxicillin 500mg
https://stromectol.science/# purchase oral ivermectin
http://forum.belmama.ru/index.php?topic=41044.0
http://forum.generation-n.at/viewtopic.php?t=306497
http://minimoo.eu/index.php/en/forum/welcome-mat/591889
http://mdr7.ru/viewtopic.php?f=6&t=5001&sid=c65dd82d4bf686a29ea78de324be2b12
http://moscovy.4adm.ru/posting.php?mode=post&f=18&sid=9a1c195f71531896068edf4a4159c3c7
http://cadebo-forum.ru/viewtopic.php?f=38&t=1655&sid=66b2b9130f46580fe513fc41e140ceed
http://www.rrsclub.ru/showthread.php?p=24441#post24441
https://www.bezriska.biz/reg/viewtopic.php?pid=66708#p66708
https://heylink.me/edy-diplom/
http://hunting-tv.ru/profile.php?u=afuveja