STM32 01 LED点灯(第一天学习)

📅 2026/7/6 3:17:26 👁️ 阅读次数 📝 编程学习
STM32 01 LED点灯(第一天学习)

一、前言

今天是我正式接触STM32的第一天,之前只是简单看过相关理论,今天第一次动手实操点灯实验。目前我基础很差,还不会代码封装、工程分层这类技巧,只能写最直白简单的代码,把这次实验完整记录下来,方便日后复盘,也给同样刚入门的同学做个参考,大佬们看到有写得不对的地方欢迎指正。

二、实验目标

初步认识STM32的GPIO输出功能,控制板载LED周期性亮灭闪烁。

三、本地工程真实结构

我使用的是基础空白模板工程,文件夹只有系统自带的四类,没有Hardware文件夹,也没有新建单独的驱动文件:

  1. Start:芯片启动文件,固定自带,不用修改
  2. Library:官方底层标准库,提供外设相关函数
  3. System:存放系统时钟、延时工具函数
  4. User:唯一可以自行编写代码的目录

现阶段我完全不懂得代码分层封装,所有操作逻辑直接写在User下的main.c主函数内,不额外新建.c/.h驱动文件,贴合刚上手的学习水平。

四、硬件原理(浅显理解)

  1. 开发板自带LED连接在PC13引脚;
  2. 引脚输出低电平,LED导通点亮;输出高电平,LED断电熄灭;
  3. 电路里需要串联220Ω限流电阻,避免电流过大烧毁灯珠,这点是学长提醒我的。

五、完整代码

`#include"stm32f10x.h"// Device header#include"delay.h"intmain(){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);while(1){GPIO_ResetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);GPIO_SetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);}}

六、个人粗浅学习感悟

作为刚入门的新手,我现在对知识点的理解还特别浅薄,简单梳理一下今天学到的内容:

  1. STM32的GPIO外设默认关闭时钟,如果忘记添加开启时钟的代码,LED完全没有任何反应,这是我踩的第一个大坑;
  2. 引脚模式必须设置为推挽输出,只有这个模式才能主动输出高低电平,选错模式无法驱动LED;
  3. GPIO_ResetBits用来拉低引脚电平、点亮灯光,GPIO_SetBits拉高电平、关闭灯光,最开始我记反了,反复试了好几次才分清;
  4. while(1)无限死循环是单片机程序的核心,能让亮灭逻辑不断重复,实现持续闪烁的效果。

七、今天踩过的所有坑

  1. 漏写时钟开启代码,上电后LED毫无动静,排查很久才找到问题;
  2. 不清楚引脚速度参数的作用,暂时先照搬教程里的50MHz;
  3. 高低电平逻辑混淆,上电后LED一直常亮,无法熄灭;