Raspberry Pi Pico入门
文件列表(压缩包大小 3.14M)
免费
概述
本例程将会让你了解如何为Raspberry Pi Pico设置环境并为其创建自定义程序
你可能已经听说过有关Raspberry Pi的有关它们的小型,信用卡大小的计算机阵容的信息,这些计算机可以运行Linux操作系统。它们非常适用于需要低功耗,良好连接性和大量计算能力的情况,但是在需要实时性能和精确定时的情况下效果不佳。
这就是Raspberry Pi Pico擅长的地方。它具有许多出色的外设,包括I2C,SPI,USB等。Pico在定制芯片上包含两个快速的Arm Cortex-M0 +内核,以及一个称为可编程I / O(简称PIO)的特殊子系统。它使程序员可以创建专用的状态机(最多8个),这些状态机可以使用引脚处理IO任务,而无需进行大量的CPU交互,从而为两个任务腾出了两个内核。
仅加载文本编辑器并开始为具有中等高级功能的电路板编程是相当困难的。软件开发套件(SDK)只是一组库,一个编译器/链接器,调试器,有时还包括一个框架。因此,SDK可以提供必要的工具,而不是切换汇编中的特定寄存器并尝试设置汇编程序进行编译。
本指南介绍的是C / C ++ SDK,而不是MicroPython的SDK,并假定开发是在基于Debian或Ubuntu的OS环境中进行的。
首先在某种类型的用户文件夹中创建一个新目录,例如,使用以下命令在主目录中:
mkdir pico
然后输入
cd pico
接下来,运行以下三个命令来安装SDK和更新USB库:
git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update --init
然后离开那个文件夹并进入pico文件夹
cd ..
最后将示例克隆到另一个文件夹中pico-examples
:
git clone -b master https://github.com/raspberrypi/pico-examples.git
然后只需运行以下两个命令来安装CMake和用于Arm的GNU嵌入式工具链,这就是你编写的代码将如何转换为机器指令的方式:
sudo apt update
sudo apt install cmake gcc-arm-none-eabi build-essential
就是这样!现在已经安装了工具链和SDK,是时候开始对Pico进行编程了。
在几乎所有新的微控制器开始使用时,使LED闪烁是开发人员首先要做的事情之一,Pico也不例外。在pico
文件夹中,键入
cd pico-examples
查看示例项目。然后创建并输入build
目录
mkdir build
cd build
并使用创建PICO_SDK_PATH
环境变量
export PICO_SDK_PATH=../../pico-sdk
最后用
cmake ..
默认情况下,CMake配置为生成发布版本,其中不包含调试所需的信息。要构建调试版本,请运行
cmake -DCMAKE_BUILD_TYPE=Debug
现在我们可以构建眨眼程序了。类型
cd blink
进入眨眼示例文件夹。其内容应如下所示:
这里有两个构建选项。首先是简单地运行,make
或者make -jT
在哪里运行T
并发进程(通常是CPU拥有的内核数),因此对于Raspberry Pi 4,你可以运行
make -j4
现在你应该能够同时看到blink.elf和blink.uf2文件。elf文件由调试器使用,而uf2文件可以复制到RP2040大容量存储设备上。
对Pico进行编程非常简单。按住开发板上的BOOTSEL按钮的同时,插入Micro USB电缆。
现在,你应该能够看到名为RPI-RP2
以下文件的设备:
在桌面上,将uf2文件从以前使用的文件夹拖到build/blink
USB大容量存储设备。这将导致浏览器窗口关闭,并使Pico开始闪烁其板载LED。你也可以用相同的方式插入Pico(在插入micro USB电缆的同时按住BOOTSEL按钮),然后使用
dmesg | tail
然后为文件系统创建一个新目录:
sudo mkdir -p /mnt/pico
并安装设备:
sudo mount /dev/sdDp /mnt/pico
其中D
是该装置(a
,b
,c
等),并且p
是分区(应为1)。因此,对于Pico sda
,它看起来像
sudo mount /dev/sda1 /mnt/pico
然后用复制
sudo cp blink.uf2 /mnt/pico
sudo sync
然后用
sudo unmount /mnt/pico
如果你以前有使用C或C ++的经验,那么你会知道要将数据从一个数组复制到另一个数组,通常需要从源数组进行迭代(读取),然后将相同的数据移至目标数组(将其写入)到目的地)。当使用Arduino Uno和一串可寻址RGB LED之类的东西时,Atmega 328p必须获取一个彩色数据缓冲区,并逐个通过GPIO引脚传输它,这意味着CPU不能做其他事情。
你还可以尝试想象一个具有两个设备的系统,其中一个设备通过某种协议将数据发送到Pico,然后Pico需要将该数据放入RAM中的某种缓冲区中,以备后用。为什么不使用专用硬件来执行此操作,而不是让CPU内核不断等待新数据到达然后存储呢?这是直接内存访问(DMA )的基本原理。
回到该pico/pico-examples/build
文件夹,然后dma
使用
cd ~/pico/pico-examples/build/dma
你应该看到三个与各种示例相关的文件夹,现在我们来看一个名为的文件夹hello_dma
。在文件夹中,它应如下所示:
如果在此处运行make,它将生成可以加载到板上的常用elf和uf2文件。你可以通过将UART转USB转换器连接到Pico的硬件UART引脚和接地引脚来查看输出。现在,我们来看一下代码的实际工作方式。输入以下内容转到包含源代码的文件夹
cd ~/pico/pico-examples/dma/hello_dma/
然后在文本编辑器中查看hello_dma.c
文件。看起来像这样:
你会看到有一个chars
称为()的字符数组,src
当程序加载到芯片上时会存储在闪存中(因为它是const
)。在它下面有一个指向内存中位置的指针,该位置dst
具有与常量数组相同的空间分配。调用后将stdio_init_all()
UART端口设置为类似功能printf
,你可以看到请求了DMA通道请求chan
。然后,从第27行到第30行,创建一个dma_channel_config
结构并将其配置为在每次传输时递增源指针和目标指针,并设置为一次传输8位。
在dma_channel_configure()
调用中,将设置目标指针和源指针以及传输次数。进行呼叫后,传输将立即开始并在传输了正确的字节数之后完成。由于在此示例中处理器没有其他操作,因此dma_channel_wait_for_finish_blocking()
只需等待传输完成然后返回即可。最后,使用将来自目标缓冲区的数据打印到UART外设puts()
。
所有需要的文件在下载区均可找到。
via:Getting Started with the Raspberry Pi Pico - Hackster.io
如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈
评论(0)