Программирование Raspberry Pi Pico с помощью C/C++ SDK

В 2012 году организация Raspberry Pi Foundation представила миру свой одноплатный компьютер Raspberry Pi, который первоначально предназначался для обучения детей основам компьютерной техники и программирования, но позже для него нашлось и множество других применений. Спустя 9 лет после этого, в 2021 году, свет увидела микроконтроллерная плата Raspberry Pi Pico. По сути, это достаточно бюджетный микроконтроллер, цены на который начинаются от $4. Однако несмотря на низкую цену он содержит в своем составе двухъядерный ARM процессор и цифровые/аналоговые контакты ввода/вывода, способные выполнять еще и ряд специальных функций. Поэтому данный микроконтроллер отлично подходит для применения во встраиваемых системах.

Внешний вид проекта программирования платы Raspberry Pi Pico с помощью C/C++ SDK

В данной статье мы рассмотрим основы программирования платы Raspberry Pi Pico с помощью C/C++ SDK (Software Development Kit – набор инструментальных средств разработки программного обеспечения). Также на нашем сайте вы можете посмотреть всю серию обучающих статей по Raspberry Pi Pico.

Краткое введение в Raspberry Pi Pico

Сердцем платы Raspberry Pi Pico является двухъядерный ARM процессор на ядре Cortex M0+, который может быть разогнан до частоты 133MHz. Плата содержит 264 Кб ОЗУ (SRAM) и 2 Мб встроенной флеш-памяти, которую можно увеличить до 16 Мб с помощью внешнего модуля памяти, подключаемой через шину Quad-SPI.

Плата Raspberry Pi Pico содержит 26 многофункциональных контактов ввода/вывода (GPIOs), которые работают с цифровыми уровнями напряжения 3.3v, три из этих контактов могут работать в качестве аналоговых входов, то есть выполнять функции АЦП в плате. Плата может получать питание через разъем micro-USB, внешних источников питания или батареек. Также важным достоинством платы является то, что не требуется никакого внешнего программатора для ее программирования поскольку она поддерживает технологию “Drag-and-Drop” и автоматически определяется компьютером при ее подключении по USB (технология mass storage).

Внешний вид платы Raspberry Pi Pico с обозначением элементов на ней показан на следующем рисунке.
Как мы видим из представленного рисунка, плата Raspberry Pi Pico имеет 40 контактов, 26 из которых являются многофункциональными контактами ввода/вывода (GPIOs). Также плата содержит встроенный светодиод, подключенный к контакту GPIO25. Одним из недостатков платы является отсутствие у нее кнопки сброса, но зато у нее есть контакт RUN, который выполняет функцию контакта сброса если мы замыкаем его на землю (Ground).

Внешний вид платы Raspberry Pi Pico с обозначением элементов на ней

Назначение контактов (распиновка) платы Raspberry Pi Pico представлено на следующем рисунке.

Назначение контактов (распиновка) платы Raspberry Pi Pico

Установка C/C++ SDK для Raspberry Pi Pico на Linux систему

Для установки C/C++ SDK для программирования платы Raspberry Pi Pico автор данного проекта (ссылка на оригинал приведена в конце статьи) использовал операционную систему Ubuntu 20.04 LTS.

Организация Raspberry Pi Foundation поставляет скрипт установки для операционных систем Linux и Raspberry Pi OS, который автоматически создает и устанавливает все необходимые компоненты для C/C++ SDK и кросс-платформенной IDE Visual Studio Code. Для скачивания скрипта установки (setup script) C/C++ SDK выполните следующую последовательность команд:

Примечание: на своей операционной системе Ubuntu 20.04 LTS - 64Bit автор проекта столкнулся с проблемой, суть которой заключалась в том, что скрипт установки скачивал и устанавливал Visual Studio Code IDE. Поэтому он блокировал загрузку VSCode IDE и потом скачивал и устанавливал IDE отдельно.

Также, как и скрипт установки, мы можем установить компоненты SDK и IDE последовательно, один за другим, используя приведенные ниже команды.

Установка необходимых компонентов

Для этого выполните следующую последовательность команд.

Установка компонентов SDK и IDE

Скачивание C/C++ SDK с репозитория и обновление путей для SDK

Для этого выполните следующую последовательность команд.

Обновление путей для SDK

После скачивания SDK и репозитория с примерами настало время обновить Environment variable (переменную среды) для каждого пути репозитория (repository’s path) используя параметры PICO_SDK_PATH”, “PICO_EXAMPLES_PATH”, “PICO_EXTRAS_PATH”, “PICO_PLAYGROUND_PATH”. Также пользователи могут обновить environment variable когда они работают на Raspberry Pi Pico.

Обновление окружения SDK

Скачивание и установка Picotool и Picoprobe

Нам необходимо скачать и установить Picotool чтобы извлекать информацию из двоичного кода Raspberry Pi Pico.

Установка Picotool

После установки Picotool можно приступать к скачиванию и установке Picobrobe. С помощью программного обеспечения Picoprobe мы сможем использовать плату Raspberry Pi Pico в качестве устройства для программирования/отладки другой платы Raspberry Pi Pico.

Установка Picoprobe

Скачивание и установка компилятора OpenOCD

После выполнения предыдущих шагов настало время для скачивания и установки компилятора OpenOCD, который будет использоваться для отладки программ (debugging) для Raspberry Pi Pico.

Скачивание компилятора OpenOCD

Установка компилятора OpenOCD (часть 1)

Установка компилятора OpenOCD (часть 2)

Установка компилятора OpenOCD (часть 3)

Скачивание и установка Visual Studio Code IDE

После скачивания и установки всех необходимых компонентов SDK и отладчика можно приступать к установке кросс-платформенной IDE Visual Studio Code для быстрой и простой разработки программ. Поскольку автор проекта использовал операционную систему Ubuntu 20.04LTS - 64 bit, он скачал файл code_1.xx.xx_amd64.deb с официального веб-сайта Visual Studio и с его помощью установил VSCode IDE. После того, как установка VSCode IDE будет завершена, нам необходимо установить ряд расширений для IDE (интегрированной среды разработки), чтобы мы могли производить отладку программ для Raspberry Pi Pico из VSCode IDE.

Скачивание и установка Visual Studio Code IDE

Процесс установки Visual Studio Code IDE

Компиляция первого проекта (мигание светодиодом)

Теперь, когда у нас все готово для работы, давайте попробуем скомпилировать наш первый проект – программу мигания светодиодом для платы Raspberry Pi Pico используя язык C, чтобы проверить что все необходимые нам установленные компоненты (IDE, компилятор и библиотека) работают корректно. Более подробно работу проекта можно посмотреть на видео, приведенном в конце статьи.

Местоположение встроенного светодиода на плате Raspberry Pi Pico

Создайте подкаталог “pico_workspace” внутри каталога ~/raspberry-pi-pico/ и откройте VisualStudio Code. Затем нажмите на вкладку Explorer” в верхнем левом углу или нажмите Ctrl+Shift+E и затем нажмите на “Open Folder” под вкладкой explorer. В окне Open Folder проследуйте по пути ~/raspberry-pi-pico/pico_workspace и создайте там каталог с именем “blink-led”, после чего нажмите на кнопку OK.

Открытие каталога в VisualStudio Code

Создание нового проекта в VisualStudio Code

После создания и импортирования каталога проекта мигания светодиода (blink-led project folder) создайте файл выбрав пункт меню “File->New File или Ctrl+N” и затем нажмите Ctrl+S чтобы сохранить его как “main.c”. После сохранения файла напишите код программы мигания светодиодом в файле “main.c”.

Программа для мигания светодиодом в VisualStudio Code

C/C++ SDK для Raspberry Pi Pico поставляется вместе с инструментом автоматизации CMake. Поэтому, после создания .C файла проекта нам необходимо создать файл “CMakeLists.txt”, который содержит инструкции, описывающие исходные файлы проекта (sources files) и цели (выполнимые файлы, библиотеки).

Инструкции в файле CMakeLists.txt

После этого перезапустите Visual Studio Code для установки расширения Cmake для автоматической конфигурации нашего проекта мигания светодиодом. После перезапуска вы увидите лог CMake в выходном окне внизу.

Лог нашей программы в VisualStudio Code

Затем нажмите на иконку Build внизу строки текущего состояния (status bar) чтобы скомпоновать проект мигания светодиодом и создать файл .uf2. Процесс компоновки проекта будет отображаться в выходном окне логов. После успешной компоновки проекта статус компоновки также будет показан в этом окне.

Иконка Build внизу строки текущего состояния

Компоновка нашего проекта в Visual Studio Code

Примечание: убедитесь в том, что вы выбрали правильные инструментальные средства (toolchain) для кросс-компиляции “GCC x.x.x arm-none-eabi”. Если инструментальные средства неправильные, то нажмите на иконку Wrench+ScrewDriver внизу строки текущего состояния (status bar) и выберите правильный toolchain из списка как показано на следующем рисунке.

Правильный toolchain для кросс-компиляции проекта

Выбор правильного toolchain'а для кросс-компиляции проекта

Загрузка кода программы в плату Raspberry Pi Pico

Как нам уже известно, нам не нужен никакой внешний программатор для программирования платы Raspberry Pi Pico поскольку она поддерживает технологию drag and drop. Для программирования платы нам необходимо подключить ее по USB к компьютеру и нажать на ней кнопку BOOTSEL – эту кнопку необходимо удерживать до тех пор, пока плата не определится системой, после этого кнопку можно отпустить.

Местоположение кнопки BOOTSEL на плате Raspberry Pi Pico

Кнопка BOOTSEL на плате Raspberry Pi Pico служит для перевода платы в режим Bootloader Mass-storage system, чтобы в нее можно было загружать новую программу. После того как плата будет переведена в режим загрузки (bootloader mode), с помощью технологии Mass-storage она будет смонтирована в системе как носитель с именем RPI-RP2. Нажмите на этот смонтированный носитель RPI-RP2 и откройте его.

Открытие смонтированного носителя RPI-RP2

Теперь можно приступать к загрузке нашей программы мигания светодиодом в плату. Когда мы компоновали (build) проект, в каталоге ~/raspberry-pi-pico/pico_workspace/blink-led/build был создан двоичный файл UF2. После того, как плата Raspberry Pi Pico была смонтирована (определена) в системе, нам необходимо скопировать этот файл blink-led.uf2 на смонтированный носитель RPI-RP2, после чего плата Raspberry Pi Pico самостоятельно автоматически перезагрузится и встроенный в плату светодиод начнет мигать.

Тестирование работы проекта

Более подробно все вопросы, рассмотренные в статье, вы можете посмотреть в представленном в конце статьи видео.

Исходный код программы на C++

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
176 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *