STM32实战教程:点灯实验详解
##01_点灯
**控制引脚输出高低电平,控制led灯亮灭**
准备条件
(1)看原理图,确认引脚和led的工作方式(开漏还是推挽)
(2)GPIO相关的函数学习,搭配DeepSeek食用效果更佳
(1)确认引脚
LED1 – PB0
LED2 – PB1
(2)确认输出的模式
前面有输出0/1,后面有GND,下图就是推挽模式
写1时,电流经过发光二极管,到gnd
写0时,都是低电平,二极管不导通,也就不发光
开漏接法的原理图
左侧持续3V3,右侧控制引脚
写0,NMOS导通,接GND
写1,悬空,高阻态模式
(3)二极管发光原理
二极管导通电压是0.7V,电流2-10mA(器件的属性不用深究)
选择的电阻应该在 (3.3-0.7)V/0.002A=1300Ω到
(3.3-0.7)V/0.010A=260Ω之内,均可点亮LED
这里取5mA 则 2.6/0.005=520Ω,现实中没有520欧的电阻,我们取510Ω电阻
Vss即GND
图中无任何控制引脚,可能导致LED一上电就一直点亮
下图是推挽模式
下图是开漏模式
(4)创建项目
直接用别人创建的项目模板或者跟着下面的步骤一步一步来
直接用别人创建的项目模板或者跟着步骤一步一步来【STM32】STM32F103C8T6 创建工程模版详解(固件库)_stm32f103c8t6新建工程-CSDN博客
(5)使用VSCode搭配Keil5使用
(6)创建项目完成
这里直接使用别人创建好的模板
创建好后main函数最后一个括号后面要回车
原因:Keil MDK忽略警告, 包括文件末尾空白行, 未使用等警告 – svchao – 博客园
(7)时钟树简化图
时钟树:简而言之,就是,按需分配时钟信号,并确保时钟信号在整个电路中同步传输
(8)框架图简图
(9)项目创建好后,开始写代码
初期先在main函数中写,后续再模块化编程
(10)点亮LED的思路
(1)开启时钟:
开启GPIO的时钟是为了使GPIO端口能够正常工作和进行输入输出操作
(2)GPIO的初始化
(3)控制引脚的电平
(11)GPIO初始化
(1)GPIO_InitTypeDef是一个结构体 ,这里声明一个结构体变量GPIO_InitStructure用于访问结构的成员
(2)右键转到定义
三个成员变量,分别用于设置引脚/速度/模式
引脚:
速度:
模式:
(12)实现LED的点亮
(13)代码
#include "stm32f10x.h"
int main(void)
{
//1.使能GPIO时钟开启时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//2.初始化GPIO
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
while (1)
{
/* code */
GPIO_SetBits(GPIOB, GPIO_Pin_0); // 设置PB0为高电平,点亮LED
}
}
/*
PB0 -led1
PB1 -led2
led:推挽输出模式
*/
(14)程序下载到单片机
先设置是哪种工具,再Download
或
板子集成了ISP功能,直接把生成的hex文件发送给单片机
##资料来源自bilibil仅做学习用途
作者:喵喵队_摸大鱼


















