Skip to content

Setting Functions

Pico SDK provides a function gpio_set_function() to set the function of a GPIO pin. For example, to set GPIO pin 15 as SPI1 TX, you can use the following code:

gpio_set_function(15, GPIO_FUNC_SPI);

OK, this seems straightforward. But, how do you know whether the SPI is SPI0 or SPI1 and what function of SPI it is? You may add a comment to clarify like follows:

gpio_set_function(15, GPIO_FUNC_SPI); // Set as SPI1 TX

To add this comment, you need to carefully check the Pico SDK documentation to find out that GPIO pin 15 is SPI1 TX. This can be a bit cumbersome, especially if you have many GPIO pins to set.

Using pico-jxglib, you can write this as follows:

GPIO15.set_function_SPI1_TX();

GPIO15 is an instance of the GPIO15_T class, which has a member function named set_function_SPI1_TX() that sets GPIO pin 15 as SPI, specifically SPI1 TX.

Thanks to the code completion feature of your text editor, including VSCode, you can easily find available pin functions after typing GPIO15.set_function_. This makes it much easier to set the function of GPIO pins without needing to refer to the documentation.

GPIO0
GPIO0.set_function_SPI0_RX();
GPIO0.set_function_UART0_TX();
GPIO0.set_function_I2C0_SDA();
GPIO0.set_function_PWM0_A();
GPIO0.set_function_USB_OVCUR_DET();
GPIO1
GPIO1.set_function_SPI0_CSn();
GPIO1.set_function_UART0_RX();
GPIO1.set_function_I2C0_SCL();
GPIO1.set_function_PWM0_B();
GPIO1.set_function_USB_VBUS_DET();
GPIO2
GPIO2.set_function_SPI0_SCK();
GPIO2.set_function_UART0_CTS();
GPIO2.set_function_I2C1_SDA();
GPIO2.set_function_PWM1_A();
GPIO2.set_function_USB_VBUS_DET();
GPIO3
GPIO3.set_function_SPI0_TX();
GPIO3.set_function_UART0_RTS();
GPIO3.set_function_I2C1_SCL();
GPIO3.set_function_PWM1_B();
GPIO3.set_function_USB_OVCUR_DET();
GPIO4
GPIO4.set_function_SPI0_RX();
GPIO4.set_function_UART1_TX();
GPIO4.set_function_I2C0_SDA();
GPIO4.set_function_PWM2_A();
GPIO4.set_function_USB_VBUS_DET();
GPIO5
GPIO5.set_function_SPI0_CSn();
GPIO5.set_function_UART1_RX();
GPIO5.set_function_I2C0_SCL();
GPIO5.set_function_PWM2_B();
GPIO5.set_function_USB_VBUS_EN();
GPIO6
GPIO6.set_function_SPI0_SCK();
GPIO6.set_function_UART1_CTS();
GPIO6.set_function_I2C1_SDA();
GPIO6.set_function_PWM3_A();
GPIO6.set_function_USB_OVCUR_DET();
GPIO7
GPIO7.set_function_SPI0_TX();
GPIO7.set_function_UART1_RTS();
GPIO7.set_function_I2C1_SCL();
GPIO7.set_function_PWM3_B();
GPIO7.set_function_USB_VBUS_DET();
GPIO8
GPIO8.set_function_SPI1_RX();
GPIO8.set_function_UART1_TX();
GPIO8.set_function_I2C0_SDA();
GPIO8.set_function_PWM4_A();
GPIO8.set_function_USB_VBUS_EN();
GPIO9
GPIO9.set_function_SPI1_CSn();
GPIO9.set_function_UART1_RX();
GPIO9.set_function_I2C0_SCL();
GPIO9.set_function_PWM4_B();
GPIO9.set_function_USB_OVCUR_DET();
GPIO10
GPIO10.set_function_SPI1_SCK();
GPIO10.set_function_UART1_CTS();
GPIO10.set_function_I2C1_SDA();
GPIO10.set_function_PWM5_A();
GPIO10.set_function_USB_VBUS_DET();
GPIO11
GPIO11.set_function_SPI1_TX();
GPIO11.set_function_UART1_RTS();
GPIO11.set_function_I2C1_SCL();
GPIO11.set_function_PWM5_B();
GPIO11.set_function_USB_VBUS_EN();
GPIO12
GPIO12.set_function_SPI1_RX();
GPIO12.set_function_UART0_TX();
GPIO12.set_function_I2C0_SDA();
GPIO12.set_function_PWM6_A();
GPIO12.set_function_USB_OVCUR_DET();
GPIO13
GPIO13.set_function_SPI1_CSn();
GPIO13.set_function_UART0_RX();
GPIO13.set_function_I2C0_SCL();
GPIO13.set_function_PWM6_B();
GPIO13.set_function_USB_VBUS_DET();
GPIO14
GPIO14.set_function_SPI1_SCK();
GPIO14.set_function_UART0_CTS();
GPIO14.set_function_I2C1_SDA();
GPIO14.set_function_PWM7_A();
GPIO14.set_function_USB_VBUS_EN();
GPIO15
GPIO15.set_function_SPI1_TX();
GPIO15.set_function_UART0_RTS();
GPIO15.set_function_I2C1_SCL();
GPIO15.set_function_PWM7_B();
GPIO15.set_function_USB_OVCUR_DET();
GPIO16
GPIO16.set_function_SPI0_RX();
GPIO16.set_function_UART0_TX();
GPIO16.set_function_I2C0_SDA();
GPIO16.set_function_PWM0_A();
GPIO16.set_function_USB_VBUS_DET();
GPIO17
GPIO17.set_function_SPI0_CSn();
GPIO17.set_function_UART0_RX();
GPIO17.set_function_I2C0_SCL();
GPIO17.set_function_PWM0_B();
GPIO17.set_function_USB_VBUS_EN();
GPIO18
GPIO18.set_function_SPI0_SCK();
GPIO18.set_function_UART0_CTS();
GPIO18.set_function_I2C1_SDA();
GPIO18.set_function_PWM1_A();
GPIO18.set_function_USB_OVCUR_DET();
GPIO19
GPIO19.set_function_SPI0_TX();
GPIO19.set_function_UART0_RTS();
GPIO19.set_function_I2C0_SCL();
GPIO19.set_function_PWM1_B();
GPIO19.set_function_USB_VBUS_DET();
GPIO20
GPIO20.set_function_SPI0_RX();
GPIO20.set_function_UART1_TX();
GPIO20.set_function_I2C0_SDA();
GPIO20.set_function_PWM2_A();
GPIO20.set_function_CLOCK_GPIN0();
GPIO20.set_function_USB_VBUS_DET();
GPIO21
GPIO21.set_function_SPI0_CSn();
GPIO21.set_function_UART1_RX();
GPIO21.set_function_I2C0_SCL();
GPIO21.set_function_PWM2_B();
GPIO21.set_function_CLOCK_GPOUT0();
GPIO21.set_function_USB_OVCUR_DET();
GPIO22
GPIO22.set_function_SPI0_SCK();
GPIO22.set_function_UART1_CTS();
GPIO22.set_function_I2C1_SDA();
GPIO22.set_function_PWM3_A();
GPIO22.set_function_CLOCK_GPIN1();
GPIO22.set_function_USB_VBUS_DET();
GPIO23
GPIO23.set_function_SPI0_TX();
GPIO23.set_function_UART1_RTS();
GPIO23.set_function_I2C1_SCL();
GPIO23.set_function_PWM3_B();
GPIO23.set_function_CLOCK_GPOUT1();
GPIO23.set_function_USB_VBUS_EN();
GPIO24
GPIO24.set_function_SPI1_RX();
GPIO24.set_function_UART1_TX();
GPIO24.set_function_I2C1_SDA();
GPIO24.set_function_PWM4_A();
GPIO24.set_function_CLOCK_GPOUT2();
GPIO24.set_function_USB_OVCUR_DET();
GPIO25
GPIO25.set_function_SPI1_CSn();
GPIO25.set_function_UART1_RX();
GPIO25.set_function_I2C0_SCL();
GPIO25.set_function_PWM4_B();
GPIO25.set_function_CLOCK_GPOUT3();
GPIO25.set_function_USB_VBUS_DET();
GPIO26
GPIO26.set_function_SPI1_SCK();
GPIO26.set_function_UART0_CTS();
GPIO26.set_function_I2C1_SDA();
GPIO26.set_function_PWM5_A();
GPIO26.set_function_USB_VBUS_EN();
GPIO27
GPIO27.set_function_SPI1_TX();
GPIO27.set_function_UART1_RTS();
GPIO27.set_function_I2C1_SCL();
GPIO27.set_function_PWM5_B();
GPIO27.set_function_USB_OVCUR_DET();
GPIO28
GPIO28.set_function_SPI1_RX();
GPIO28.set_function_UART0_TX();
GPIO28.set_function_I2C0_SDA();
GPIO28.set_function_PWM6_A();
GPIO28.set_function_USB_VBUS_DET();
GPIO29
GPIO29.set_function_SPI1_CSn();
GPIO29.set_function_UART0_RX();
GPIO29.set_function_I2C0_SCL();
GPIO29.set_function_PWM6_B();
GPIO29.set_function_USB_VBUS_EN();