mcpField
G
gpio-baremetal

gpio-baremetal

github.com/mohitmishra786开发269306 次安装18 周前更新
代码仓库

关于 gpio-baremetal

gpio-baremetal 指导开发者在不使用 HAL 的情况下配置 GPIO,包括引脚模式、复用功能、上下拉和中断,并提供 STM32、nRF52 与 ESP32 相关示例。

主要功能

  1. 01输入与输出配置
  2. 02复用功能引脚映射
  3. 03上拉与下拉配置
  4. 04引脚变化中断配置
  5. 05STM32、nRF52 和 ESP32 示例

适用场景

  1. 01点亮 LED 或读取按钮
  2. 02将引脚映射到 USART 或 SPI
  3. 03配置边沿触发的 EXTI 中断
  4. 04在不同厂商间移植 GPIO 代码

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill gpio-baremetal

安装后在 Claude Code 中输入/gpio-baremetal确认已加载。

详细介绍

GPIO(裸机)

用途

不使用 HAL 配置和使用 GPIO:输入/输出模式、复用功能映射、上拉/下拉、速度/压摆率,以及用于 LED、按钮和外设引脚复用的引脚变化中断。

适用场景

  • 在启动 UART/SPI 前闪烁 LED 或读取按钮
  • 将引脚复用为 USART/SPI 复用功能
  • 在引脚边沿触发 EXTI 线路中断
  • 在不同厂商的平台间移植 GPIO 代码

工作流

1. STM32 GPIO 模式
/* Enable GPIOA clock */
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;

/* PA5 output — MODER[11:10] = 01 */
GPIOA->MODER &= ~(3U << (5 * 2));
GPIOA->MODER |=  (1U << (5 * 2));

/* Toggle via BSRR — atomic set/reset */
GPIOA->BSRR = (1U << 5);       /* set */
GPIOA->BSRR = (1U << (5+16));  /* reset */

复用功能(例如,PA2 上的 USART2 TX):

GPIOA->MODER &= ~(3U << (2*2));
GPIOA->MODER |=  (2U << (2*2));           /* AF mode */
GPIOA->AFR[0] &= ~(0xFU << (2*4));
GPIOA->AFR[0] |=  (7U << (2*4));          /* AF7 = USART2 */
2. 配置带上拉的输入
/* PC13 input, pull-up */
GPIOC->MODER &= ~(3U << (13*2));          /* input mode 00 */
GPIOC->PUPDR &= ~(3U << (13*2));
GPIOC->PUPDR |=  (1U << (13*2));          /* pull-up */

int pressed = !(GPIOC->IDR & (1U << 13)); /* active low */
3. EXTI 中断(STM32)
/* SYSCFG: map EXTI13 to PC13 */
SYSCFG->EXTICR[3] = (SYSCFG->EXTICR[3] & ~0xFU) | 0x2;  /* port C */
EXTI->IMR  |= (1U << 13);
EXTI->FTSR |= (1U << 13);  /* falling edge */
NVIC_EnableIRQ(EXTI15_10_IRQn);

ISR:检查 EXTI->PR,通过写入 1 清除。

4. nRF52 / ESP32 注意事项
平台模式
nRF52NRF_P0->PIN_CNF[n] — 方向、上拉/下拉、驱动能力
ESP32GPIO.out_w1ts、GPIO.enable;使用 IO_MUX 设置功能

配置引脚前,务必启用外设时钟/电源域。

5. Agent 用法
/gpio-baremetal Configure PA2 as USART2 TX alternate function on STM32F4

常见问题

症状原因修复方法
引脚状态卡住MODER 错误 / 未配置为 AF重新查看 RM 引脚表
EXTI 持续触发未消抖 / 输入浮空启用上拉/下拉;在软件中消抖
AF 不匹配AFR 半字节错误查阅 RM 中针对具体引脚的 AF 表
无法看到电平切换端口位错误 / LED 为低电平点亮检查原理图

相关技能

  • skills/baremetal/mmio-and-bit-manipulation — BSRR/MODER 掩码
  • skills/baremetal/peripherals-from-datasheet — RM 引脚排列图
  • skills/baremetal/uart-serial-baremetal — 串行通信的 AF 复用

评论

支持 Markdown