Raspberry Pi Pico - 生成有限长度的方波

Raspberry Pi Pico - Generate finite length square wave

我有一个关于使用 Raspberry Pi Pico 生成有限长度方波的问题。例如,我想生成一个周期为 100 的 20 kHz 方波,或者生成一个精确为 1 毫秒的 20 kHz 方波。我无法准确控制它。

生成无限长的方波很容易,网上有很多例子。我可以使用 PIO 来实现它。例如,以下代码可以这样做:

import rp2
from machine import Pin 
@rp2.asm_pio(set_init=rp2.PIO.OUT_LOW)
def blink():
    set(pins, 1)
    set(pins, 0)

sm = rp2.StateMachine(0, blink, freq=25000, set_base=Pin(26))

sm.active(1)

但是,我不知道如何准确控制方波的length/periods。使用 time.sleep() 根本不准确。

提前致谢!

使用PIO中的“递减X”指令来计算你想要的周期数。可能需要添加一些延迟才能返回方波。 jmp(x_dec, "top_of_loop")。你会挂起,等待一些输入,然后从输入 FIFO 中读取 X 值。然后你会 运行 方波循环,递减 X。当它达到零时,你跳到外循环,在那里你再次等待循环数的新 X 值。我想就是这样!