目录
1. PKE8720DF-C13-F10开发板UART端口配置
1. PKE8720DF-C13-F10开发板UART端口配置
PKE8720DF-C13-F10提供三组UART,SERIAL1_TX(PB19) 和 SERIAL1_RX(PB18)、SERIAL2_TX(PA12) 和 SERIAL2_RX(PA13)、LOG_TX(PA7) 和 LOG_RX(PA8)。
PKE8720DF-C13-F10开发板详细信息以及Arduino IDE配置方法可以参考之前的文章:使用PKE8720DF-C13-F10实现Arduino example——Button_deer_vickey的博客-CSDN博客
2. Arduino IDE——使用UART产生时钟信号
1) 所需材料
- 1 x 逻辑分析仪 or 示波器 (本文使用逻辑分析仪)
- 1 x PKE8720DF-C13-F10开发板
- 1 x USB转type-C数据线
2) 电路连接
- 逻辑分析仪 A0 连接到开发板 UART Tx (SERIAL1_TX,PB19)
- 逻辑分析仪 GND 连接到开发板 GND
3) 代码解析
完整的源代码文件 UART_CLOCK.ino 可以在下面的链接下载:https://download.csdn.net/download/deer_vickey/88150311?spm=1001.2014.3001.5503
include files
-
为了实现UART功能,需要包含以下的头文件,调用的函数可以在ambd_arduino源代码中查询,源代码可以从github下载:GitHub - ambiot/ambd_arduino: AmebaD Arduino third-party package SDK
#include "device.h"
#include "serial_api.h"
#include "serial_ex_api.h"
globale variables
- PKE8720DF-C13-F10提供了三组UART,使用其中的SERIAL1这组UART来产生时钟信号,定义UART_TX及UART_RX对应的Pin脚
#define UART_TX PB_19 //UART0 TX:PB_19
#define UART_RX PB_18 //UART0 RX:PB_18
- sim_clock这个数组用来储存UART需要发送的时钟信号,在setup()函数中赋值
#define SREAM_LEN 128
char sim_clock[SREAM_LEN+1];
volatile uint32_t is_stop = 0;
static serial_t sobj_clk;
setup()
- 首先对sim_clock进行赋值操作,0x55对应二进制数 0101 0101,0和1的间隔出现分别代表低电平和高电平,因此可以用作时钟信号
- Frequency 只支持33kHz, 36kHz, 36.7kHz 38kHz, 40kHz, 56kHz,在本例中我们使用33 kHz,即buadrate = frequency * 2 = 66 kBits/s。因此可以计算出高、低电平的持续时间均为 1/66000 = 15.15 us
- 需要注意的是,在这个例子中,串口数据格式 (serial_format() function )中的停止位需要设为0,来实现时钟信号的连续 0、1 跳变。
void setup() {
// put your setup code here, to run once:
int i;
for (i = 0; i < SREAM_LEN; i++) {
sim_clock[i] = 0x55;
}
sim_clock[i] = 0;
serial_init(&sobj_clk,UART_TX,UART_RX);
serial_baud(&sobj_clk, 33000*2);
serial_format(&sobj_clk, 8, ParityNone, 0);
serial_send_comp_handler(&sobj_clk, (void*)uart_clock_send_string_done, (uint32_t) &sobj_clk);
}
loop()
- 调用 serial_send_stream_dma() 函数,使用 DMA mode 传送数据
void loop() {
// put your main code here, to run repeatedly:
int32_t ret=0;
is_stop = 0;
ret = serial_send_stream_dma(&sobj_clk, sim_clock, _strlen(sim_clock));
if (ret != 0)
{
DBG_8195A("%s Error(%d)\n", __FUNCTION__, ret);
}
}
4) 逻辑分析仪UART设定
- 原则上采样频率是 frequency 的2倍即可,但是为了获得更精确的波形,这里选择最高的 200MHz 的采样频率
- 触发条件选择上升沿和下降沿触发
5) 实验结果
如下图,可以看到逻辑分析仪 rx A0 输出的波形为固定频率的方波,占空比为50%,高电平和低电平的持续时间都是15.15 us,符合预期。