深爱那个女人 2026-04-10 16:32 采纳率: 100%
浏览 8
已结题

STM32F103C8T6 点亮LED过程遇到的奇葩问题

STM32F103C8T6 点亮LED过程遇到的奇葩问题

  • 问题描述:

在使用STM32F103C8T6最小开发板中使用一套代码产生不同的结果。

  • 问题排除:

    1. LED为板载灯非外接灯,所以不存在外接接触不良问题。
    2. 两套代码均可烧录成功,只是结果出问题,keil的配置也是相同,所以配置问题的原因并不大。
    3. 代码的本意为LED闪烁,一套代码正常闪烁,一套为常亮,所以硬件问题基本排除。
    4. 除了标准库函数外另有delay自定义延时库,但两个项目中使用的是同一个库文件,所以自定义库的问题基本排除。
    5. 项目路径均为英文路径,路径中文问题基本排除。
  • 代码结构及运行环境

两个项目分别在不同的路径,但标准库的来源不同,正常运行的标准库来源是 B站up 铁头山羊 的模板代码,在模板基础上在main.c中添加亮灯代码,编译烧录正常运行,正常闪烁。

目录结构如图:

img

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

目录结构如图:

img

  • 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);
  
    }
}
  • 关键配置图
  1. 正常闪烁项目配置展示

img

img

img

img

img

img

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

img

img

img

img

img

img

END

  • 写回答

6条回答 默认 最新

  • 深爱那个女人 2026-04-20 17:58
    关注

    非常感谢几位热心的朋友关注此问题,此问题经过逐步调试,出现此问题的原因是没有合理配置中断函数,使用UP的模板正常运行是因为模板完整配置了延时中断函数,我自己拉取的标准库并没有配置模板函数SysTick_Handler()导致陷入死循环,引脚第一个使能的又是RESET所以看不到LED亮起。所以我重新配置了中断,现在已经正常运行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月12日
  • 已采纳回答 5月12日
  • 创建了问题 4月10日