面包屑图标 当前位置: 首页
AI资讯
热点详情

树莓派PICO PIO完整使用方法与步骤详解教程

AI热点日报
AI热点日报时间:2026-07-20
热点解读

树莓派Pico的RP2040拥有8个可编程I O状态机(PIO),可自定义硬件接口,较FPGA更易用。通过 pio汇编、C调用及CMake生成头文件,实现串口打印“hello”程序。

在树莓派 Pico 这块小巧的开发板上,总能带给我们惊喜。它搭载的 RP2040 芯片内置了 8 个可编程 I/O(PIO)状态机,专门用于实现自定义外设——听起来是不是有点像 FPGA?没错,PIO 确实能让开发者灵活地按需定制硬件接口,而且上手门槛比 FPGA 低得多,是树莓派 Pico PIO 使用中的一大亮点。

树莓派PICO pio使用

可编程 I/O(PIO)是 RP2040 的一项全新硬件设计。简单来说,你可以通过 PIO 创建新的或额外的硬件接口,模拟更多、更丰富、更快的通信协议——这对提升性能、扩展功能来说,是非常实用的手段,也是树莓派 Pico 自定义硬件接口的核心方式。

相比 FPGA,PIO 的优势很明显:FPGA 往往更贵,且需要学习完全不同的编程模式。而 PIO 只需用汇编语言就能搞定,开发者无需适应 FPGA 的思维方式,就能快速实现自定义硬件接口,尤其适合那些需要 PIO 状态机配置的嵌入式项目。

不妨看一个简单的 demo,主要包含一个用汇编写的 .pio 文件、几个 C 文件,以及 CMake 配置文件,最终实现通过串口打印 "hello" 的功能,完美展示 PIO 汇编语言开发流程。

pio 文件(hello.pio)

.program hello

; Repeatedly get one word of data from the TX FIFO, stalling when the FIFO is
; empty. Write the least significant bit to the OUT pin group.
loop:
    pull
    out pins, 1
    jmp loop

% c-sdk {
static inline void hello_program_init(PIO pio, uint sm, uint offset, uint pin) {
    pio_sm_config c = hello_program_get_default_config(offset);
    // Map the state machine's OUT pin group to one pin, namely the pin
    // parameter to this function.
    sm_config_set_out_pins(&c, pin, 1);
    // Set this pin's GPIO function (connect PIO to the pad)
    pio_gpio_init(pio, pin);
    // Set the pin direction to output at the PIO
    pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
    // Load our configuration, and jump to the start of the program
    pio_sm_init(pio, sm, offset, &c);
    // Set the state machine running
    pio_sm_set_enabled(pio, sm, true);
}
%}

整个流程大致分三步:

  • 将程序加载到 PIO 的指令存储器中;
  • 配置 PIO 状态机并运行程序;
  • 在状态机运行期间与之交互,实现数据收发。

C 文件(hello.c)

#include "pico/stdlib.h"
#include "hardware/pio.h"
// Our assembled program:
#include "hello.pio.h"

int main() {
#ifndef PICO_DEFAULT_LED_PIN
#warning pio/hello_pio example requires a board with a regular LED
#else
    // Choose which PIO instance to use (there are two instances)
    PIO pio = pio0;

    // Our assembled program needs to be loaded into this PIO's instruction
    // memory. This SDK function will find a location (offset) in the
    // instruction memory where there is enough space for our program. We need
    // to remember this location!
    uint offset = pio_add_program(pio, &hello_program);

    // Find a free state machine on our chosen PIO (erroring if there are
    // none). Configure it to run our program, and start it, using the
    // helper function we included in our .pio file.
    uint sm = pio_claim_unused_sm(pio, true);
    hello_program_init(pio, sm, offset, PICO_DEFAULT_LED_PIN);

    // The state machine is now running. Any value we push to its TX FIFO will
    // appear on the LED pin.
    while (true) {
        // Blink
        pio_sm_put_blocking(pio, sm, 1);
        sleep_ms(500);
        // Blonk
        pio_sm_put_blocking(pio, sm, 0);
        sleep_ms(500);
    }
#endif
}

注意看,C 文件里引用了 hello.pio.h 这个头文件——它和前面的 .pio 文件对应,但 .pio 本身不能直接在 C 中调用。这时就需要 CMake 来牵线搭桥,把 .pio 和 .c 文件关联起来,最终构建出一个可执行文件,这也是树莓派 Pico PIO 编程中常见的构建方式。

CMake 文件(CMakeLists.txt)

add_executable(hello_pio)
pico_generate_pio_header(hello_pio ${CMAKE_CURRENT_LIST_DIR}/hello.pio)
target_sources(hello_pio PRIVATE hello.c)
target_link_libraries(hello_pio PRIVATE
    pico_stdlib
    hardware_pio
)
pico_add_extra_outputs(hello_pio)
#add url via pico_set_program_url
example_auto_set_url(hello_pio)

其中关键的魔法就是 pico_generate_pio_header 这条指令,它会将汇编语言写的 .pio 文件自动生成对应的 .h 头文件,供 C 文件调用。配合 Pico 官方 SDK,就能构建出一个串口打印 "hello" 的程序,让开发者轻松上手 PIO 状态机配置。

其他

其实最初注意到这个功能,是在移植 Pico W 板载 Wi-Fi 的过程中——因为需要用到一个叫 cyw43_bus_pio_spi.pio 的 PIO 程序。当时 RT-Thread 那边用的是 Scons 构建系统,所以就先借助 pico-examples 里的 CMake 生成对应的 .h 文件(cyw43_bus_pio_spi.pio.h),然后直接复制过来使用。这个方法虽然有点绕,但胜在简单可靠,也算是 PIO 灵活性的一个现实注脚,体现了树莓派 Pico 自定义硬件接口的实用价值。

热点追踪提示词
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:树莓派PICO PIO完整使用方法与步骤详解教程要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
来源:https://m.elecfans.com/article/2272773.html
树莓

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关热点
AI热点2026-07-21 09:10
技嘉发布RTX 5080木艺显卡与X870E蝶翼主板的独特设计

在COMPUTEX2026展会上,技嘉展示了AORUSGeForceRTX5080INFINITYWOOD显卡和AORUSX870EINFINITYNEXT主板。RTX5080显卡采用白色主题与木色元素装饰,设计独特;X870E主板则以蝴蝶翅膀为灵感,采用类蜂窝结构和金属3D打印

AI热点2026-07-21 09:10
星际荣耀火箭海上回收导航系统关键试验成功

星际荣耀公司近日成功完成SQX-3运载火箭海上回收高精度导航系统的无人机挂飞试验。该试验在广东阳江海域进行,采用创新的半实物动态模拟方案,全面验证了导航系统在复杂海况下的性能。结果表明,系统各项指标均优于设计要求,能够稳定提供火箭与回收船之间的高精度相对导航信息。这标志着该核心系统已完成全部地面验证

AI热点2026-07-21 09:10
Origin Code发布全新英特尔CQDIMM与AMD EXPO ULL内存新品带来AI与渲染性能的强劲提升

PC内存厂商OriginCode近日分别针对英特尔和AMD平台推出专项优化内存。面向英特尔平台的CQDIMM内存,通过与技嘉合作验证了256GB8000MT s的高带宽套条,旨在为本地AI、视频渲染等重载任务提供强大数据吞吐能力,并计划在2026年台北电脑展展出。针对AMD平台,则推出多款支持E

AI热点2026-07-21 09:10
东风本田5月销量环比增长20% CR-V等车型限时购车权益

东风本田公布5月销量达18563台,环比增长20%,其中CR-V销量增长显著。品牌同步推出6月限时购车权益,涵盖CR-V、英仕派、HR-V及思域等多款车型,权益价最低至9 79万元起,并可叠加国家以旧换新补贴及原厂配置加装优惠,为近期有购车计划的消费者提供了具体的价格参考与增值选择。

延伸阅读