手把手教你点亮LED灯(附代码) | 零基础入门STM32第二十五步

主题内容教学目的/扩展视频
独立LED电路驱动及GPIO电平输出LED电路原理,设置IO端口,4种方式开关LED。了解LED驱动电路的设计,学会用多种库函数操作IO。

师从洋桃电子,杜洋老师



🚩 学习目标

通过本文你将掌握:

  1. LED硬件电路原理
  2. GPIO寄存器与库函数操作

🔧 硬件准备

1. 电路原理分析

  • LED接法:共阳/共阴接法判断(⬇️图示为共阴接法,高电平点亮)
  • 限流电阻计算
    以红色LED为例(压降2.1V,工作电流10mA):
    R = (3.3V - 2.1V) / 0.01A = 120Ω
    
  • 核心板LED位置
(图1:指示灯部分原理图)

2. GPIO模式选择

模式适用场景配置要点
推挽输出LED控制输出电流强,驱动能力好
开漏输出总线设备需外接上拉电阻
复用功能外设接口如USART、SPI通信

💻 基础代码实现(部分)

1. 初始化函数详解

  • led.c
#include "led.h"

void LED_Init(void){ //LED灯的接口初始化
	GPIO_InitTypeDef  GPIO_InitStructure; 	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);       
    GPIO_InitStructure.GPIO_Pin = LED1 | LED2; //选择端口号(0~15或all)                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式       
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)    
	GPIO_Init(LEDPORT, &GPIO_InitStructure);
}
  • led.h
#ifndef __LED_H
#define __LED_H	 
#include "sys.h"

//#define LED1 PBout(0)// PB0
//#define LED2 PBout(1)// PB1	
#define LEDPORT	GPIOB	//定义IO接口
#define LED1	GPIO_Pin_0	//定义IO接口
#define LED2	GPIO_Pin_1	//定义IO接口



void LED_Init(void);//初始化

		 				    
#endif

…(部分展示)

2. 主程序

#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "led.h"


int main (void){//主程序
	RCC_Configuration(); //时钟设置
	LED_Init();
	while(1){
		
		//方法1:
		GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1
		delay_us(50000); //延时1秒
		GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0
		delay_us(50000); //延时1秒
	}
}

▲ ⏬完整示例代码:四种方法实现的LED闪灯程序


🔍 常见问题排查表

现象排查步骤解决方案
LED完全不亮1. 测量VCC与GND电压
2. 检查限流电阻值
更换120Ω电阻
闪烁频率异常校准系统时钟配置使用示波器测量实际时钟频率
多LED干扰检查GPIO模式是否为推挽输出避免使用浮空输入模式

📸 附录一 GPIO库函数

函数名描述
GPIO_DeInit将外设 GPIOx 寄存器重设为缺省值
GPIO_AFIODeInit将复用功能(重映射事件控制和 EXTI 设置)重设为缺省值
GPIO_Init根据 GPIO_InitStruct 中指定的参数初始化外设 GPIOx 寄存器
GPIO_StructInit把 GPIO_InitStruct 中的每一个参数按缺省值填入
GPIO_ReadInputDataBit读取指定端口管脚的输入
GPIO_ReadInputData读取指定的 GPIO 端口输入
GPIO_ReadOutputDataBit读取指定端口管脚的输出
GPIO_ReadOutputData读取指定的 GPIO 端口输出
GPIO_SetBits设置指定的数据端口位
GPIO_ResetBits清除指定的数据端口位
GPIO_WriteBit设置或者清除指定的数据端口位
GPIO_Write向指定 GPIO 数据端口写入数据
GPIO_PinLockConfig锁定 GPIO 管脚设置寄存器
GPIO_EventOutputConfig选择 GPIO 管脚用作事件输出
GPIO_EventOutputCmd使能或者失能事件输出
GPIO_PinRemapConfig改变指定管脚的映射
GPIO_EXTILineConfig选择 GPIO 管脚用作外部中断线路
函数名GPIO_WriteBit
函数原型void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
功能描述设置或者清除指定的数据端口位
输入参数 1GPIOx: x 可以是 A, B, C, D 或者 E,来选择 GPIO 外设
输入参数 2GPIO_Pin: 待设置或者清除的端口位
该参数可以取 GPIO_Pin_x (x 可以是 0-15) 的任意组合
参阅 Section: GPIO_Pin 查阅更多该参数允许取值范围
输入参数 3BitVal: 该参数指定了待写入的值
该参数必须取枚举 BitAction 的其中一个值
Bit_RESET: 清除数据端口位
Bit_SET: 设置数据端口位
输出参数
返回值
先决条件
被调用函数
示例/* Set the GPIOA port pin 15 */
GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET);

🔗 相关资源

[1] 洋桃电子B站课程-STM32入门100步
[2] STM32F103xx官方数据手册
[3] STM32F103X8-B数据手册(中文)
[4] STM32F103固件函数库用户手册(中文)
[5] 四种方法实现的LED闪灯程序


💬 技术讨论(请在评论区留言~)

📌 下期预告:下一期将探讨更多点亮LED的方法,欢迎持续关注!

点击查阅🔍往期【STM32专栏】文章

版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版:洋桃1号开发版(基于STM32F103C8T6)
更新日志

  • v1.0 初始版本(2025-02-25)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值