STM32F103C8T6 点亮LED过程遇到的奇葩问题
- 问题描述:
在使用STM32F103C8T6最小开发板中使用一套代码产生不同的结果。
问题排除:
- LED为板载灯非外接灯,所以不存在外接接触不良问题。
- 两套代码均可烧录成功,只是结果出问题,keil的配置也是相同,所以配置问题的原因并不大。
- 代码的本意为LED闪烁,一套代码正常闪烁,一套为常亮,所以硬件问题基本排除。
- 除了标准库函数外另有
delay自定义延时库,但两个项目中使用的是同一个库文件,所以自定义库的问题基本排除。 - 项目路径均为英文路径,路径中文问题基本排除。
代码结构及运行环境
两个项目分别在不同的路径,但标准库的来源不同,正常运行的标准库来源是 B站up 铁头山羊 的模板代码,在模板基础上在main.c中添加亮灯代码,编译烧录正常运行,正常闪烁。
目录结构如图:

非正常运行的标准库来源ST官网下载的STM32F10x_StdPeriph_Lib_V3.6.0,新建项目后拷贝固件库到项目的目录下使用。
目录结构如图:

main.c代码展示
// main.c
# include "stm32f10x.h"
# include "delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD; # 此处的开漏模式尝试改过GPIO_Mode_Out_PP 并无效果
GPIO_Init(GPIOC,&GPIO_InitStruct);
while(1)
{
GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET);
Delay(1000);
GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);
Delay(1000);
}
}
- 关键配置图
- 正常闪烁项目配置展示






- 不闪烁的问题代码配置展示






END