使用C語(yǔ)言開(kāi)始學(xué)習Raspberry Pi Pico多核微控制器板

發(fā)布時(shí)間:2023-6-15 10:49    發(fā)布者:eechina
關(guān)鍵詞: C語(yǔ)言 , Raspberry , Pi , Pico
來(lái)源:Digi-Key
作者:Jacob Beningo

嵌入式系統中,有一個(gè)內在的需求,就是要有一個(gè)強大的、低成本的微控制器單元 (MCU)。這些設備不僅在產(chǎn)品中發(fā)揮著(zhù)重要作用,而且在支持測試、快速原型設計和機器學(xué)習 (ML) 之類(lèi)能力方面也發(fā)揮著(zhù)重要作用。然而,使用 MCU 通常需要對 MCU 技術(shù)和底層編程語(yǔ)言有深入的了解。除此之外,開(kāi)發(fā)板的價(jià)格往往在 20 美元到 1000 美元之間,這對許多開(kāi)發(fā)人員來(lái)說(shuō)可能太昂貴了。此外,并不總是有開(kāi)發(fā)板,即使有開(kāi)發(fā)板,設計者也常常要花很多精力讓開(kāi)發(fā)板啟動(dòng)并運行起來(lái)。

本文介紹了作為用于 RP2040 MCU 的低成本開(kāi)發(fā)板的 Raspberry Pi Pico (SC0915),該板能為開(kāi)發(fā)者提供廣泛的功能。文章探討了 Pico 和一些擴展板,研究了 Raspberry Pi Pico 支持的不同軟件開(kāi)發(fā)工具包,并演示了如何使用 C SDK 創(chuàng )建一個(gè) LED 閃光應用。

Raspberry Pi Pico 簡(jiǎn)介

Raspberry Pi Pico 作為 RP2040 微控制器的開(kāi)發(fā)平臺而于 2021 年首次推出。Pico 可以作為獨立的開(kāi)發(fā)板使用,或者通過(guò)邊緣連接焊接到載板上,因此可以直接設計導入產(chǎn)品(圖 1)。因其低于 5 美元的成本及其多用途特性,Pico 已經(jīng)成為創(chuàng )客和專(zhuān)業(yè)開(kāi)發(fā)者的一個(gè)很受歡迎的解決方案。


圖 1:Raspberry Pi Pico 是一塊低成本的開(kāi)發(fā)板,包含了在 RP2040 微控制器上開(kāi)發(fā)應用所需的一切。(圖片來(lái)源:Raspberry Pi)

RP2040 帶有一個(gè)雙核 Arm® Cortex®-M0+ 處理器,時(shí)鐘頻率為 133 兆赫(MHz),包括高至 264 千字節 (Kb) 的 SRAM。RP2040 不包括片上閃存。不過(guò) Raspberry Pi Pico 提供了一個(gè) 2 兆字節 (Mb) 的外部閃存芯片,通過(guò)一個(gè)四路串行外設接口 (QSPI) 與 RP2040 連接。該板還提供了一個(gè)用戶(hù) LED,一個(gè)鎖相環(huán) (PLL) 用來(lái)創(chuàng )建穩定高速 CPU 時(shí)鐘的晶體振蕩器,以及一個(gè)用來(lái)配置處理器是正常引導還是進(jìn)入引導程序的按鈕。

一個(gè)廣泛的生態(tài)系統

Raspberry Pi Pico 已經(jīng)有了一個(gè)廣泛的生態(tài)系統,允許開(kāi)發(fā)者選擇使用 MicroPython 或 C 軟件開(kāi)發(fā)工具包來(lái)為電路板編寫(xiě)應用程序。關(guān)于 Raspberry Pi Pico 還有一點(diǎn)有趣的要說(shuō)明的是,并不是只有一塊開(kāi)發(fā)板可用。而是有三個(gè);只有一個(gè)標準配置的原版 SC0915、包括針座連接器的 SC0917以及帶有用于聯(lián)網(wǎng)應用的低成本 Wi-Fi 芯片的 SC0918(圖 2)。


圖 2:Raspberry Pi Pico 有三種配置。(圖片來(lái)源:Beningo Embedded Group, LLC)

這些版本中的每一個(gè)板子的引腳尺寸都是相同的。板子邊緣連接由 40 針邊緣連接組成,用于圖 3 所示的外圍設備和連接選件。其中包括電源、地線(xiàn)、通用異步接收器和發(fā)射器 (UART)、通用輸入和輸出 (GPIO)、脈沖寬度調制 (PWM)、模數轉換器 (ADC)、串行外設互連 (SPI)、內部集成電路 (I2C) 接口和調試。


圖 3:Raspberry Pi Pico 邊緣連接引腳分配提供了多種多樣的外設接入方式。(圖片來(lái)源:Raspberry Pi)

分線(xiàn)板選件

當 Raspberry Pi 要用于快速原型開(kāi)發(fā)時(shí),有必要方便接入電路板的邊緣連接器。接入它們的一個(gè)選擇是使用焊接針座并使用試驗板。但這種解決方案往往會(huì )導致線(xiàn)路混亂,并從而導致差錯。因此,取而代之的是,有多種分線(xiàn)板的選擇,將邊緣連接器擴展到更容易獲得的接口。

例如,Bridgetek 的 MM2040EV Pico 模塊板將大部分邊緣連接器分解為插針和插座連接。此外,還有 Seeed Studio 為 Pico 提供的 103100142 盾板,能以連接器的形式提供每個(gè)外設接口。每個(gè)連接器都與擴展板引腳兼容,以便增加像慣性傳感器、電機驅動(dòng)器和測距儀之類(lèi)功能。

用 C 還是用 MicroPython?

嵌入式系統傳統上都是用 C 語(yǔ)言編寫(xiě)的,因為它兼顧了低層的控制和高層的系統應用方法。今天 C 語(yǔ)言的問(wèn)題是,它是一種過(guò)時(shí)的、有著(zhù) 50 年歷史的編程語(yǔ)言,在大學(xué)里很少被教授。也更容易意外引入漏洞并造成損壞。盡管有這些潛在的問(wèn)題,但 C 語(yǔ)言仍然是大多數嵌入式系統開(kāi)發(fā)的首選語(yǔ)言。

Raspberry Pi Pico 生態(tài)系統提供的一個(gè)替代 C 語(yǔ)言的方案是 MicroPython。MicroPython 是一個(gè) CPython 端口,旨在運行在基于 MCU 的系統上。雖然它無(wú)疑是一個(gè)比 C 語(yǔ)言更重度消耗處理器的用戶(hù),但它是一種現代語(yǔ)言,許多開(kāi)發(fā)人員都熟悉和適應它。MicroPython 可以抽象出 MCU 和硬件的低層細節。硬件訪(fǎng)問(wèn)是通過(guò)高級應用編程接口 (API) 進(jìn)行的,很容易學(xué)習——這是在項目期限緊迫的情況下的一個(gè)重要因素。

當選擇使用哪種軟件開(kāi)發(fā)工具包 (SDK) 時(shí)(C 或 MicroPython),開(kāi)發(fā)者需要關(guān)注其具體的需求。與 MicroPython 相比,使用 C 語(yǔ)言將提供對 MCU 寄存器的低層訪(fǎng)問(wèn),具有更小的內存占用,而且效率更高。

設置 C SDK

當使用 C SDK 創(chuàng )建 LED 閃爍應用時(shí),有幾種選擇。第一種是查看 SDK 文檔并按照說(shuō)明進(jìn)行操作。第二種是使用預設的 Docker 容器來(lái)自動(dòng)安裝所有必要的工具,以便開(kāi)始使用。第三種選擇是手動(dòng)安裝工具鏈和 Raspberry Pi Pico 示例代碼,包括:

Git
Python 3
Cmake
gcc-arm-none-eabi \
libnewlib-arm-none-eabi
可以通過(guò)使用以下命令克隆 Raspberry Pi 的 git repo 來(lái)完成獲取 Raspberry Pi Pico 示例代碼:

git clone https://github.com/raspberrypi/pico-sdk /home/sdk/pico-sdk && \

cd /home/sdk/pico-sdk && \

git submodule update --init &&

這些庫和源代碼安裝完畢后,下一步就是探索和編譯 LED 閃爍應用程序。

編寫(xiě)第一個(gè)閃爍應用程序

C SDK 帶有一個(gè)閃爍實(shí)例,開(kāi)發(fā)者可以用它來(lái)建立其第一個(gè)應用程序。以下代碼清單使用 Pico 的板載 LED 和 PICO_DEFAULT_LED_PIN 指令來(lái)設置 I/O 引腳,并以 250 毫秒 (ms) 的延遲進(jìn)行閃爍。

副本

        /**
         * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
         *
         * SPDX-License-Identifier: BSD-3-Clause
         */       

        #include "pico/stdlib.h"       

        int main() {
        #ifndef PICO_DEFAULT_LED_PIN
        #warning blink example requires a board with a regular LED
        #else
            const uint LED_PIN = PICO_DEFAULT_LED_PIN;
            gpio_init(LED_PIN);
            gpio_set_dir(LED_PIN, GPIO_OUT);
            while (true) {
                gpio_put(LED_PIN, 1);
                sleep_ms(250);
                gpio_put(LED_PIN, 0);
                sleep_ms(250);
            }
        #endif
        }

代碼清單:Raspberry Pi Pico 使用 PICO_DEFAULT_LED_PIN 指令來(lái)設置 I/O 引腳,并以 250 毫秒的延遲進(jìn)行閃爍。(代碼來(lái)源:Raspberry Pi)

根據清單,LED_PIN 被指定為默認引腳;然后調用 C gpio API。gpio_init 用于初始化引腳,而 gpio_set_dir 則用于將 LED_PIN 設置為輸出。然后創(chuàng )建一個(gè)無(wú)限循環(huán),每 250 毫秒切換一次 LED 的狀態(tài)。

編譯應用程序是相對簡(jiǎn)單的。首先,開(kāi)發(fā)者需要使用以下命令在他們的 Raspberry Pi Pico 文件夾中創(chuàng )建一個(gè)構建目錄:

mkdir build

cd build

接下來(lái),cmake 需要通過(guò)執行以下命令為構建做準備:

cmake

現在,開(kāi)發(fā)者可以換到 blinky 目錄并運行 make:

cd blink

make

構建過(guò)程的輸出將是一個(gè) blinky.uf2 文件。通過(guò)按住 BOOTSEL 引腳并給電路板通電,可以將編譯好的程序加載到 Raspberry Pi Pico 上。然后,RP2 將作為一個(gè)大容量存儲設備出現。開(kāi)發(fā)者需要將 blinky.uf2 文件拖到驅動(dòng)器上,這時(shí),引導程序將安裝該應用程序。一旦完成,LED 應該就會(huì )開(kāi)始閃爍。

結語(yǔ)

對于希望能夠掌控開(kāi)發(fā)節奏的嵌入式開(kāi)發(fā)者來(lái)說(shuō),Raspberry Pi Pico 是一個(gè)很有吸引力的解決方案。這個(gè)方案提供多種選擇,包括獨立的解決方案或帶有無(wú)線(xiàn)連接的板卡。此外,其生態(tài)系統支持 C 和 C++,以及 MicroPython。開(kāi)發(fā)人員可以選擇最適合其應用的語(yǔ)言,然后利用相應的 SDK 來(lái)加速軟件開(kāi)發(fā)。
本文地址:http://selenalain.com/thread-826197-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)在線(xiàn)工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页