GPIO¶
1 功能概述¶
本例程演示演示 GPIO Driver 的基本功能与使用方法。
例程主要完成以下内容:
配置
P0.4为 GPIO 推挽输出,周期性输出高/低电平(用于驱动 LED,需要将P0.4连接到 J17)初始化串口
UART0(115200)并打印日志,方便观察 GPIO 输出变化配置
P0.7为 GPIO 输入并使能上拉(例程中提供了“按键控制 LED”的注释代码,可按需打开)
2 环境准备¶
硬件设备与线材:
PAN271x EVB 核心板与底板各一块
JLink 仿真器(用于烧录例程程序)
USB-TypeC 线一条(用于底板供电和查看串口打印 Log)
杜邦线数根或跳线帽数个(用于连接各个硬件设备)
硬件接线:
将 EVB 核心板插到底板上
使用 USB-TypeC 线,将 PC USB 插口与 EVB 底板 USB->UART 插口相连
使用杜邦线或跳线帽将 EVB 底板
J8排针对 (P06 & TXD) 和J9排针对 (P05 & RXD) 分别短接起来使用杜邦线将 JLink 仿真器的:
SWD_CLK 引脚与 EVB 底板的 P00 排针相连
SWD_DAT 引脚与 EVB 底板的 P01 排针相连
SWD_GND 引脚与 EVB 底板的 GND 排针相连
GPIO 演示 IO:
P0.4:GPIO 输出脚(例程用于驱动 LED)P0.7:GPIO 输入脚(例程已配置上拉,按键逻辑在注释代码中)P0.4连接到J17用于驱动LED
PC 软件:
串口调试助手(UartAssist)或终端工具(SecureCRT),波特率 115200(用于串口交互)
4 例程演示说明¶
烧录完成后,连接P04和J17;
P04会循环输出高电平和低电平,可观察到LED灯时亮时灭;
4.1 主要流程代码(main.c节选)¶
void LED_GPIOInit(void)
{
SYS_SET_MFP(P0, GPIO_Pin_4, GPIO);
GPIO_SetMode(P0, GPIO_Pin_4, GPIO_MODE_PushPull);
SYS_SET_MFP(P0, GPIO_Pin_7, GPIO);
GPIO_SetMode(P0, GPIO_Pin_7, GPIO_MODE_INPUT);
GPIO_EnablePullupPath(P0, GPIO_Pin_7);
}
int main()
{
Clock_Init();
Sys_Init();
LOG("\nCPU @ %dHz\n", SystemCoreClock);
LED_GPIOInit();
while (1)
{
SYS_delay_10nop(1000000);
GPIO_WriteOutputBit(P0, GPIO_Pin_4, 1);
LOG("LED on\n");
SYS_delay_10nop(1000000);
GPIO_WriteOutputBit(P0, GPIO_Pin_4, 0);
LOG("LED off\n");
}
}
4.2 主要 API 说明¶
SYS_SET_MFP(Px, GPIO_Pin_x, GPIO):将对应引脚的复用功能切换为 GPIO。GPIO_SetMode(Px, GPIO_Pin_x, mode):设置 GPIO 工作模式。输入:
GPIO_MODE_INPUT输出:
GPIO_MODE_PushPull(推挽输出)输出:
GPIO_Mode_OpenDrain(开漏输出)双向检测:
GPIO_MODE_QUASI
GPIO_WritePin(Px, pin, val):以宏方式直接写输出寄存器(例程中给出了替代写法的注释)。GPIO_ReadPin(Px, pin):读取输入电平(例程中给出了“按键控制 LED”的注释逻辑)。GPIO_EnablePullupPath(Px, pin):为输入引脚使能上拉。GPIO_EnablePulldownPath(Px, pin):为输入引脚使能下拉。
4.3 串口输出示例¶
CPU @ 48000000Hz
LED on
LED off
LED on
LED off
...
4.4 注意事项¶
使用 GPIO 之前请确保引脚复用已切到 GPIO(
SYS_SET_MFP),否则可能仍在外设功能下导致读写无效。驱动 LED 时,建议使用推挽输出(
GPIO_MODE_PushPull);若外部电路需要开漏方式,请改为GPIO_Mode_OpenDrain并外接上拉。输入脚如果悬空会导致电平不稳定,建议按需开启上拉/下拉(例程对
P0.7使能了上拉)。