Arduino for PKE8720DF-C13-F10——UART产生时钟信号

目录

        1. PKE8720DF-C13-F10开发板UART端口配置

        2. Arduino IDE——使用UART产生时钟信号

1) 所需材料

2) 电路连接

3) 代码解析

4) 逻辑分析仪UART设定

5) 实验结果


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

    #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,符合预期。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值