В зависимости от типа корпуса доступны до 112 пинов ввода-вывода общего назначения (GPIO) — PA0-PA15, PB0-PB15, PC0-PC15, PD0-PD15, PE0-PE15, PF0-PF15 и PG0-PG15 для реализации. Каждый порт GPIO имеет соответствующие регистры управления и настройки.
Каждый из пинов GPIO может быть настроен программно как выход (push-pull or open-drain), вход, вывод альтернативной функции или вывод в аналоговом режиме. Каждый вывод GPIO можно настроить как pull-up, pull-down или floating. Все GPIO рассчитаны на повышенные токи, за исключением аналогового режима.
Настройка режима работы пина осуществляется через регистры CTL0/CTL1. Подробности настройки приведены в Таблице 8-1 User Manual. Текущее значение бита, настроенного как вход, хранится в регистре ISTAT. Состояние пина, настроенного как выход, определяется соответствующим битом регистра OCTL. Bare metal
#include "gd32f30x.h"
int main()
{
/* enable GPIOB clock */
RCU->APB2EN |= RCU_APB2EN_PBEN;
/* configure led pin PB2 as push-pull 50MHz
