You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32F103C6T6开发板PC13 LED无法关闭问题求助

STM32F103C6T6 PC13 LED闪烁问题解决

STM32F103C6T6的PC13引脚LED通常为低电平点亮、高电平熄灭(硬件设计上引脚接LED负极,正极经电阻接3.3V),你的代码问题主要出在寄存器操作逻辑错误,以下是逐个修正方案:

1. ODR寄存器操作代码修正

原代码中关闭LED的语句逻辑错误,GPIOC->ODR &= GPIO_ODR_ODR13会将ODR寄存器其他位清零且无法置位PC13,正确写法应使用|=来拉高引脚:

/* USER CODE BEGIN WHILE */
while (1)
{
    GPIOC->ODR &= ~GPIO_ODR_ODR13; // 拉低PC13,点亮LED
    HAL_Delay(500);
    GPIOC->ODR |= GPIO_ODR_ODR13;  // 拉高PC13,熄灭LED
    HAL_Delay(500);    
}
/* USER CODE END WHILE */

2. BSRR寄存器操作代码修正

BSRR是只写寄存器,低16位(BSx)用于置位引脚,高16位(BRx)用于复位引脚,不能用&=修改,需直接写入对应位:

/* USER CODE BEGIN WHILE */
while (1)
{
    GPIOC->BSRR = GPIO_BSRR_BR13; // 拉低PC13,点亮LED(BR13对应高16位第13位)
    HAL_Delay(500);
    GPIOC->BSRR = GPIO_BSRR_BS13; // 拉高PC13,熄灭LED(BS13对应低16位第13位)
    HAL_Delay(500);
}
/* USER CODE END WHILE */

3. HAL库函数代码修正

若当前代码能点亮但无法熄灭,先检查GPIO初始化:确保PC13被配置为推挽输出模式,未误设为输入或下拉模式。若硬件电平逻辑与常规相反(高电平点亮),则调换电平参数:

while (1)
{
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);    // 拉高PC13,点亮LED(适配高电平点亮的硬件)
    HAL_Delay(500);
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);  // 拉低PC13,熄灭LED
    HAL_Delay(500);
}

额外注意事项

PC13是STM32F1系列的RTC备用引脚,默认可能带有上拉电阻,初始化时需确保将其配置为普通GPIO输出模式(如在CubeMX中选择GPIO_Output,根据硬件调整上下拉设置)。

内容的提问来源于stack exchange,提问作者zewirka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 10:44:55