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
相关产品推荐
相关产品推荐

