目录
1. PKE8720DF-C13-F10开发板UART端口配置
2. Arduino添加 “UART 回送用户输入的单个字符” Sketch code
1. PKE8720DF-C13-F10开发板UART端口配置
如下图所示,PKE8720DF-C13-F10提供三组UART:
(1)SERIAL1_TX(PB19) ,SERIAL1_RX(PB18);(本文选择这一组)
(2)SERIAL2_TX(PA12) ,SERIAL2_RX(PA13);
(3)LOG_TX(PA7), LOG_RX(PA8)。
PKE8720DF-C13-F10开发板简介 与 配置Arduino开发环境 请参照上一篇文章 :Arduino 配置PKE8720DF-C13-F10开发板——“Blink” 周期性点亮LED灯_zoey_O_o__的博客-CSDN博客
2. Arduino添加 “UART 回送用户输入的单个字符” Sketch code
由于Arduino 基于board“ AMB25/AMB26 (RTL8720DF) ”没有直接可用的UART Examples,这里我们需要自己新建一个sketch:
具体code 如下:
#include "device.h"
#include "serial_api.h"
#include "serial_ex_api.h"
#define UART_TX PB_19
#define UART_RX PB_18
serial_t sobj;
void uart_send_string(serial_t *sobj, char *pstr)
{
unsigned int i=0;
while (*(pstr+i) != 0) {
serial_putc(sobj, *(pstr+i));
i++;
}
}
void setup() {
// put your setup code here, to run once:
serial_init(&sobj,UART_TX,UART_RX);
serial_baud(&sobj,38400);
serial_format(&sobj, 8, ParityNone, 1);
uart_send_string(&sobj, "UART API Demo...\r\n");
uart_send_string(&sobj, "Hello World!!\r\n");
}
void loop() {
// put your main code here, to run repeatedly:
char rc='0';
while(1){
rc = serial_getc(&sobj);
serial_putc(&sobj, rc);
}
}
3.代码解析
包含的三个头文件 "device.h" ,"serial_api.h" 和 "serial_ex_api.h" 为了调用实现UART功能的函数,可以在源码中查询GitHub - ambiot/ambd_arduino: AmebaD Arduino third-party package SDK
定义TX,RX的pin 脚:
#define UART_TX PB_19
#define UART_RX PB_18
定义serial对象:
serial_t sobj;
定义“uart_send_string” 函数:
void uart_send_string(serial_t *sobj, char *pstr)
{
unsigned int i=0;
while (*(pstr+i) != 0) {
serial_putc(sobj, *(pstr+i));
i++;
}
}
内部的“serial_putc”函数如下:
void serial_putc(serial_t *obj, int c)
{
PMBED_UART_ADAPTER puart_adapter=&(uart_adapter[obj->uart_idx]);
while (!serial_writable(obj));
UART_CharPut(puart_adapter->UARTx, (c & 0xFF));
if (serial_irq_en[obj->uart_idx] & SERIAL_TX_IRQ_EN) {
// UnMask TX FIFO empty IRQ
UART_INTConfig(puart_adapter->UARTx, RUART_IER_ETBEI, ENABLE);
}
}
通过UART按字节传输字符。
配置 setup函数:
void setup() {
// put your setup code here, to run once:
serial_init(&sobj,UART_TX,UART_RX);
serial_baud(&sobj,38400);
serial_format(&sobj, 8, ParityNone, 1);
uart_send_string(&sobj, "UART API Demo...\r\n");
uart_send_string(&sobj, "Hello World!!\r\n");
}
初始化UART设备,设置UART 的波特率为38400HZ,设置serial格式:Data bits=8;奇偶校验 disable;stop bits=1。开机界面语言设置:
配置loop函数:
void loop() {
// put your main code here, to run repeatedly:
char rc='0';
while(1){
rc = serial_getc(&sobj);
serial_putc(&sobj, rc);
}
}
内部的“serial_getc”函数如下:
int serial_getc(serial_t *obj)
{
PMBED_UART_ADAPTER puart_adapter=&(uart_adapter[obj->uart_idx]);
u8 RxByte = 0;
while (!serial_readable(obj));
UART_CharGet(puart_adapter->UARTx, &RxByte);
return (int)RxByte;
}
从UART口获取字节,返回到char rc;再通过“serial_putc” 函数把 rc 发送到UART,实现回显功能。
4.连接开发板
(1)材料准备
- 1 块 PKE8720DF-C13-F10开发板
- 1 根 USB转type-C数据线
- 1 块 USB转TTL adapter
- 3 根 杜邦线
(2)电路连接
UART_TX(_PB_19)连接到USB转TTL adapter上面的RX;
UART_RX(_PB_18)连接到USB转TTL adapter上面的TX;
将USB转TTL adapter上面的GND接到板子上的GND,如下图所示:
(3)端口查看
将USB转TTL的adapter和USB转type-C数据线都插入电脑,查看设备管理器:
USB转type-C数据线:COM16
USB转TTL的adapter:COM24
(4)Arduino 编译和烧录
Arduino 烧录的port 还是选择USB转type-C数据线的port:COM16
进入Arduino 之前新增的UART.ino Sketch=>Upload
烧录成功:
5.实验结果
UART 结果从 USB转TTL的adapter(COM24)输出,选择Trace tool来观察实验结果,实验前需要配置如下参数(与code中一致):
依次敲a,b,c,d,e,f,g,可以看到UART回显如下: