使用libopencm3开发STM32G0时GPIO输入功能无法正常生效问题求助
问题排查与解决方案
核心错误原因
你代码的核心问题是没有提前开启GPIOB对应的外设时钟,STM32系列所有外设寄存器操作都必须先开启对应外设的时钟,否则寄存器无法写入,读操作也会返回无效值(你观察到的MODER寄存器值为0xffffffff就是未开启时钟时的典型异常返回值)。
修正步骤
- 首先添加RCC时钟相关头文件,在原有gpio.h引入的基础上加入:
#include <libopencm3/stm32/rcc.h>
- 在
setupGpio函数最开头添加GPIOB时钟使能代码:
rcc_periph_clock_enable(RCC_GPIOB);
- 修正后的完整
setupGpio函数如下:
void setupGpio(void) { // 先开启GPIOB外设时钟 rcc_periph_clock_enable(RCC_GPIOB); // 配置所有GPIOB引脚为下拉输入 gpio_mode_setup(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, GPIO_ALL); }
补充验证说明
烧录修正后的代码后可以再读取GPIOB_MODER寄存器,输入模式对应的MODER位值为00,全引脚配置为输入后寄存器值应为0x00000000,符合预期。
内容的提问来源于stack exchange,提问作者Dinera
相关产品推荐
相关产品推荐

