26 décembre 2022
Pré-requis : avoir installé le SDK du Raspberry Pi Pico et avoir un répertoire vide pour le projet.
Les grandes étapes :
Le plus simple :
/home/.../Projets/RpiPico/pico/pico-sdk
Si la variable n’est pas définie, l’une des solutions est d’éditer votre fichier .bashrc et de rajouter, en fonction de votre installation :
export PICO_SDK_PATH=/home/.../Projets/RpiPico/pico/pico-sdk
Rien de sorcier, tant que vous savez où trouver votre fichier :
cp $PICO_SDK_PATH/external/pico_sdk_import.cmake .
Ceci n’est pas le CMakeLists.txt minimal, mais celui que nous utilisons. Il contient deux ajouts :
cmake_minimum_required(VERSION 3.13)
# Requis pour initialiser les variables liées au SDK du Rpi Pico
include(pico_sdk_import.cmake)
project(MonProjectRpiPico C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
# add_executable : nom de l'executable "MonExecutableRpiPico" suivi des fichiers à compiler.
add_executable(MonExecutableRpiPico
MonFichierSource.c
)
# printf vers USB CDC, pas vers l'UART
pico_enable_stdio_usb(MonExecutableRpiPico 1)
pico_enable_stdio_uart(MonExecutableRpiPico 0)
# Requis pour générer le .uf2
pico_add_extra_outputs(MonExecutableRpiPico)
# Notre projet suivi des librairies appelées, notamment celles du SDK.
target_link_libraries(MonExecutableRpiPico pico_stdlib)
# Ajout de la cible Flash, qui programme le Rpi Pico après avoir
add_custom_target(Flash
DEPENDS MonExecutableRpiPico
COMMAND sudo picotool load -f ${PROJECT_BINARY_DIR}/MonExecutableRpiPico.uf2
)
add_compile_options(-Wall)
# Suppression de la conversion automatique LF -> CRLF
add_definitions(-DPICO_STDIO_ENABLE_CRLF_SUPPORT=0)
Enfin, parce que c’est une bonne pratique et qu’éviter de mélanger les fichiers de compilations avec les fichiers sources est une très bonne idée. Et surtout qu’avec cmake, vous allez obtenir 247 répertoires et 501 fichiers - uniquement pour le code de démonstration...
mkdir build
Copier l’un des fichiers d’exemple, comme hello_usb.c ou blink.c dans votre fichier MonFichierSource.c.
Entrer dans le répertoire de compilation, actualiser votre chaîne de compilation et compilez :
cd build/
cmake ..
make Flash
Si votre Pico est en mode BOOT ou a l’USB d’activé, vous devriez le reprogrammer avec succès.
Ce qui suit est grandement extrait de ’Raspberry Pi Pico C/C++ SDK’.
Chaque bibliothèque du SDK est considérée comme une interface au sens de cmake. Elle contient notamment :
Par rapport à des bibliothèques pré-compilées, ceci permet avec un seul dépôt de code, de compiler les bibliothèques avec différentes options, d’obtenir les bibliothèques personnalisées pour notre puce, sans code "mort" qui traîne dans la bibliothèque embarquée et sans impacter les autres projets.
Cette modularité a un coût, chaque bibliothèque doit être ajoutée dans le CMakeLists.txt, en plus des #include à rajouter dans le code. Les noms des modules à rajouter dans le CMakeLists.txt sont indiqués dans Raspberry Pi Pico C/C++ SDK
, dans 4.1. Hardware APIs
et les autres titres 4.x. Pour les noms exacts des fichiers .h à mettre dans les #include, ils sont parfois précisés dans la documentation Doxygen du SDK.
Rajouter un module dans la liste target_link_libraries ajoute un chemin où chercher les #include. Par exemple, ajouter hardware_pwm, rajoutera le chemin :
$PICO_SDK_PATH/src/rp2_common/hardware_pwm/include/
Vous le trouvez avec la commande find $PICO_SDK_PATH/src -name "hardware_pwm"
En regardant le contenu du répertoire, vous trouverez les noms des includes :
└── hardware
└── pwm.h
Donc vous devrez inclure "hardware/pwm.h" pour compiler vos fichiers utilisant les fonctions PWM.