Raspberry Pi Pico 是今年年初树莓派基金会发布的首款微控制器级产品,基于一款全新的 RP2040 芯片构建,售价仅 4 美元。

今年年初看到新品这个便买了一块回来玩,当时它的相关开发资料还并不完善,入手后按照手册搭建了环境并跑了一些例程,便放在一旁吃灰了。

近日在更新 u8g2 库时,偶然发现支持的平台中有 RP2040,便又翻出来测试。

随着今年的芯片涨价热潮,之前的消费级 32 位芯片市场价翻了几倍,RP2040 芯片是双核 Arm Cortex-M0+,主频可达 133MHz,看了下某宝零售七八块钱一片,目前看来算是性价比比较高的了。

简单说一下我个人认为 RP2040 的优缺点:

优点:

  • 外设齐全,UART、SPI、I2C 各两个,且有 8 个 PIO 状态机,用于自定义外围设备支持;
  • 引脚排列按顺序,核心板上基本全是直接一条线连接,可谓强迫症福音;
  • 主频高,差不多是 Cortex-M3 的 STM32F1 系列主频的 2 倍。

缺点:

  • USB 还是 1.1,接口也是 Micro-B,我自己画的话肯定改成 16-pin USB-C 接口;
  • 和 Esp32 一样需要外挂 FLASH,不过板子上的 QSPI FLASH 芯片还挺可爱的,以前都没有见过这么小封装的。

随着 Adafruit、Pimoroni、parkFun 等厂商的加入,RP2040 的生态也逐渐在完善,如果后期供货充足的话完全可以作为中低端单片机的替代品。

有很多人用 Micro Python 来开发,我比较习惯用 cpp 开发,下面简单介绍一下使用 Arduino 框架开发树莓派 Pico 的方法。

环境搭建

我使用的开发环境是 PlatformIO,当然 Arduino IDE 也可以用,我使用 PIO 的主要原因就是它是基于 VS Code 的,比较符合我的使用习惯。PIO 和 Arduino IDE 的主要区别有二,一是 PIO 的库文件是放在每个工程下的,一个工程里面的库文件修改不会影响其他工程;二是语法较为严谨,类似在 Arduino IDE 中先调用再声明的用法是不允许的,也没有默认包含 Arduino.h。PlatformIO 在 VS Code 扩展商店就可以安装,安装时间可能比较久。

在 PIO 的 Platforms 选项中安装 RP2040:

RP2040 Platform

在 PIO Home 页面新建工程,选择开发板为 Raspberry Pi Pico,并填写工程名称、选择存储位置。

工程示例

在 Libraries 中搜索 u8g2,添加到刚才的工程。打开库中的示例(./.pio/libdeps/pico/U8g2/examples),复制一个到 ./src/main.cpp

取消注释一个屏幕对象,比如下面两个分别是 u8x8 方式的软件 SPI 和硬件 SPI 的声明方式。使用的屏幕驱动是 SSD1306,这个型号最近有 SSD1315 可做替换,SSD1315 砍掉了并口,屏幕边缘缩小了一圈,做 SPI 和 I2C 模块用 SSD1315 可以节省几块钱成本。

U8X8_SSD1306_128X64_NONAME_4W_SW_SPI u8x8(/* clock=*/20, /* data=*/19, /* cs=*/16, /* dc=*/17, /* reset=*/18);
//U8X8_SSD1306_128X64_NONAME_4W_HW_SPI u8x8(/* cs=*/ 16, /* dc=*/ 17, /* reset=*/ 18);

修改引脚后保存编译,生成的固件位置在 ./.pio/build/pico/firmware.uf2,以烧录模式连接开发板上电(按住 BOOTSEL),将固件拖入模拟 U 盘中即可完成烧录。PIO 中有上传工具,但总是报上传错误,目前还未解决。

我使用的是 u8x8 中的 Terminal 示例,该示例可以打印出当前程序运行的时间。使用软件 SPI 实现时,效果如下:

软件模拟 SPI 驱动屏幕

硬件 SPI 的连接方式是 SCK 接 GPIO2,MOSI 接 GPIO3,相关的宏定义可以在 pins_arduino.h 中找到,内容如下:

// Serial
#define PIN_SERIAL_TX (0ul)
#define PIN_SERIAL_RX (1ul)

// SPI
#define PIN_SPI_MISO  (4u)
#define PIN_SPI_MOSI  (3u)
#define PIN_SPI_SCK   (2u)
#define PIN_SPI_SS    (5u)

// Wire
#define PIN_WIRE_SDA        (6u)
#define PIN_WIRE_SCL        (7u)

使用硬件 SPI 连接,修改程序下载,效果如下:

硬件 SPI 驱动屏幕

对比每次刷新时间可以看出按照默认配置硬件 SPI 比软件模拟 SPI 快了不少。

使用 Arduino 框架的意义就在于可以方便地在不同平台上移植,RP2040 对 Arduino 框架的适配也会加速其生态的完善,目前 RP2040 芯片刚开始供货,某宝大多是订货,少有现货,准备等有大量供货时再做点开发板玩玩。

Last modification:August 7, 2021
如果觉得我的文章对你有用,请随意赞赏