Для работы с UART (подробно про шину написано в stm32) в меню:
Проект->Properties->C/C++ General->Paths and Symbols->GNU C
Примечание — если там пусто, то можно посмотреть по пути:
Проект->Properties->C/C++ General->Preprocessor Include Path->GNU C->CDT Managed…
надо добавить путь до ESP8266_NONOS_SDK\driver_lib\include (пример на рисунке ниже), сохраняем изменения.
Далее в нашем проекте например в файле main.c включаем файл прописывая #include "driver/uart.h"
Производитель предоставляет
- Статические библиотеки (мы их не можем править), расположенные в папке ESP8266_NONOS_SDK\lib
- -Некоторые «исходники» в папке ESP8266_NONOS_SDK\driver_lib\driver
Чтобы иметь возможность менять функции надо скопировать и работать с «исходниками»
Для подключения статических библиотек необходимо в Makefile
изменить строку, отвечающую за линковку:
@$(LD)-L$(SDK)/lib -T$(SDK)/ld/eagle.app.v6.ld $(LD_FLAGS) build/app_app.a $(SDK)/lib/libdriver.a -Wl,—end-group -o build/app.out
Функция настройки UART:
uart_init(BIT_RATE_115200, BIT_RATE_115200);
На первом месте указана битовая скорость для 0 uart
На втором месте указана битовая скорость для 1 uart
«Задефайнены» скорости от 9600 до 921600 бит/с, но в принципе можно указать и свою -согласно описанию в теории esp8266 поддерживает скорости от 300 до 115200*40 бит/с
Примечание 1: 0 uart также используется для прошивки м/к, но в момент прошивки программа не активна и эта скорость не на что не влияет. А в рабочем режиме этот Uart не используется для прошивки.
Примечание 2: При использовании 2х UART — Uart0 используется для приема и передачи информации, когда Uart1 только в режиме передачи (debug output)
Функция ремапа для UART0:
void system_uart_swap(void);
В Uart0 используется:
— U0TXD: pin26 (U0TXD)
— U0RXD: pin25 (U0RXD)
— U0CTS: pin12 (MTCK)
— U0RTS: pin13 (MTDO)
Использовав эту функцию мы заменим MTCK на UART0 Rx, MTDO на UART0 Tx,
Примечание: «so ROM log will not output from this new UART0.
MTDO (U0RTS) and MTCK (U0CTS) also need to be used as UART0 in hardware»
Отключить ремап для UART0:
void system_uart_de_swap(void);
Функция изменения стоповых бит:
void UART_SetStopBits(uint8 uart_no, UartStopBitsNum bit_num);
Функция изменения четности:
void UART_SetParity(uint8 uart_no, UartParityMode Parity_mode);
Функция изменения битовой скорости:
void UART_SetBaudrate(uint8 uart_no,uint32 baud_rate);
Контроль потока передачи:
void UART_SetFlowCtrl(uint8 uart_no,UART_HwFlowCtrl flow_ctrl,uint8 rx_thresh);
Ожидание пока буфер на передачу освободится:
void UART_WaitTxFifoEmpty(uint8 uart_no , uint32 time_out_us); //do not use if tx flow control enabled
Функции для передачи данных:
По умолчанию UART0 и UART1 имеют буфер (для приема и передачи) в 128 байт!!!
(с учетом реализации SDK (UART_RXFIFO_CNT) — приемник также ограничен значением 0x000…FF)
>>По умолчанию для UART0 есть функция из библиотеки osapi.h
int os_printf_plus(const char *format, …) __attribute__ ((format (printf, 1, 2)));
Можно использовать функцию os_printf т.к. сделан дефайн #define os_printf os_printf_plus
Например:
os_printf(«Hello World\r\n»);
Изменить порт для вывода отладочной информации:
UART_SetPrintPort(uint8 uart_no);
Примечание: можно использовать функции из пункта 3.3. System APIs (non_os_sdk_api_reference) для получения «справочной информации о системе»
например: os_printf(«flash #%d\r\n»,system_get_flash_size_map()); //выводит номер flash в enum flash_size_map…
Функция system_print_meminfo(); — она сама вызывает os_printf и выводит информацию о памяти (system_print_meminfo)
>>Для UART0 функции из библиотеки uart.h
void uart0_sendStr(const char *str);
void uart0_tx_buffer(uint8 *buf, uint16 len);
>>Для UART1 функция из библиотеки uart.h
void uart1_sendStr_no_wait(const char *str);
>>Функция отправки 1 символа из библиотеки uart.h
uart_tx_one_char(uint8 uart, uint8 TxChar);
