Raspberry Pi Pico 具有 26 個 GPIO 引腳,GPIO 也是在 MCU 中最基本運作的基礎. 這裡開始打算用一個 C/C++ SDK 程序 對 GPIO 的操作測試。程式文件在 Raspberry 官方網站上都有提供,可以在這個頁面下載. ( https://www.raspberrypi.com/documentation/microcontrollers/c_sdk.html )
官方的範例有個名為 hello_7segment 的程式範例,我這裡將改成用 hello_7segment 內使用的方法,來做跑馬燈的功能。並有 Button 中斷控制做啟動及停止。
電路
電路中的 LED 是從 GP2 接到 GP9 ,共 8 個 LED。GP10 接一個彈跳開關。
主程式碼
int main(){
stdio_init_all();
for(int x = Shift_GPIO; x < Shift_GPIO + 8; x++){
gpio_init(x);
gpio_set_dir(x,GPIO_OUT);
gpio_set_outover(x,GPIO_OVERRIDE_INVERT);
}
gpio_set_irq_enabled_with_callback(10, GPIO_IRQ_EDGE_FALL, true, &gpio_callback);
gpio_init(PICO_DEFAULT_LED_PIN);
gpio_set_dir(PICO_DEFAULT_LED_PIN, GPIO_OUT);
uint8_t y;
while(true){
if(OnButton) {
uint32_t mask = bits[y] << Shift_GPIO;
gpio_set_mask(mask);
sleep_ms(1000);
gpio_clr_mask(mask);
y++;
if(y >= 8){
y=0;
}
}
}
return 0;
}
Button 按鍵副程式
void gpio_callback(uint gpio,uint32_t events){
if(events == 0x4)
{
if(OnButton){
OnButton = 0;
gpio_put(PICO_DEFAULT_LED_PIN, 1);
}
else{
OnButton = 1;
gpio_put(PICO_DEFAULT_LED_PIN, 0);
}
}
}
呈現的結果是
按 Button 開始跑馬燈 , GP25 LED 不亮
再按 Button 停止跑馬燈, GP25 LED 亮起
gpio_set_outover : 設定 GPIO 輸出模式 ,一般 / 反向 / HIGH / LOW 。 程式是 設定反向
gpio_set_mask : 致能 GPIO 不被改變, 直到執行 gpio_clr_mask, 這與 gpio_put 用法不同。
範例程式
https://github.com/cold63/Pico_C_Project/blob/main/gpio_1/main.c