1.LED
目录
1.认识LED
如图所示,这就是我们本次实验用到的LED发光二极管。
我们可以看到,有一端引脚长,一端引脚短。其中长的那端是正极,短的就是负极。正极接电源,负极接地,小灯才能亮。
2.拓展
RGB模块,如果你需要发出不同颜色的光,那么一个RGB模块就够了。
它的使用也很简单,看下面的引脚图,其中R、G、B分别代表红色、绿色、蓝色,其中GND接地,你想发出什么颜色的光就把它的接口接到电源,那么就能够得到我们想要发出的光了。
3.如何接线
接线有很多种不同的方法。
这也取决于你的LED二极管在面包板上的连接方式。
我们本次实验主要是想要通过stm32的GPIO口输出高低电平来控制LED的亮灭。
(1)如果LED的正极接在stm32的GPIO口,那么它的负极肯定接面包板的GND了,所以这时LED的负极是低电平。那么需要LED亮起来,就需要通过电流,那么LED的正极肯定要给高电平,否则两边都是低电平,电流是肯定没法通过的。也就是GPIO口要给高电平。
(2)那么第二种情况就是LED的负极接在了GPIO口,那么LED的正极需要接在面包板的VCC了,此时LED正极是高电平。此时需要LED亮起来,就需要给GOIO口低电平。否则两边都是高电平,电流也没法通过的。
2.LED闪烁代码
#include "stm32f10x.h" //最基础的头文件
#include "Delay.h" //一个延时函数,可以由stc-icp自动生成
int main(void)
{
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA,ENABLE);
//RCC:时钟配置,控制提供给各种模块时钟信号的通断
//简而言之,时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令
//就像车子动起来就要加油一样
//再来讲讲APB2,首先讲讲APB
//APB是高级外设总线,主要用于低宽带的周边外设之间的连接,分为APB1与APB2
//举个例子,APB就像一条线,连接外设的线
//APB1和APB2是两条不同的使能线,能够使能不同的外设
//所以前面的函数就是起到了利用RCC来开启APB2总线的作用
//参数:第一个参数的意思就是在开启APB2总线后,在开启APB2上的GPIOA通用输入输出口
//GPIO:通用输入输出,顾名思义,就是用来输入数据和输出数据的,分为GPIOA和GPIOB
//ENABLE,使能的意思,也就是使能GPIOA,用来输入或者输出数据
GPIO_InitTypeDef GPIO_InitStructure;
//这句话声明一个结构体,名字是GPIO_InitStructure,结构体原型由GPIO_InitTypeDef 确定,在stm32中用来初始化GPIO。
//为什么要初始化GPIO呢
//GPIO是一个通用输入输出,通用的,所以它的某些相关信息是有固定格式的
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD ;
//配置GPIO的输出模式(输出:OUT)
//GPIO共有8种引脚配置,尚不了解的可以去看我主页的 GPIO8种引脚工作模式配置详细解释 这篇文章,希望对你有帮助
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
//配置GPIO的输出口,这里是0口
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//配置GPIO引脚速度,一般都是50MHz,这个不必过多纠结
//以上就是GPIO结构体成员变量的初始化,各个参数能够被配置为什么样子,在库中是有固定的格式的
GPIO_Init(GPIOA,&GPIO_InitStructure);
//最后将配置好的参数利用指针放入结构体中(&GPIO_InitStructure)
//这里的第一个参数为GPIOA,说明这里开启的是GPIOA总线,而且开启的是0口,在stm32板上对应的就是A0口
while(1){
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
//该函数用来写某一个GPIO口(GPIOA线,GPIO_Pin_0口,也就是A0口,Bit_SET高电平)的电平高低,电平的高低就决定了电流是否能够通过,电流能够通过,灯亮,反之,灯不亮
Delay_ms(500);
//延时函数,这里延时500ms,为什么要进行延时?
//这里我们是对同一个GPIO口写入高低电平,可是在stm32内部,它执行代码的速度非常快
//这里如果不延时,那么LED起亮的时间会非常短暂,非常非常短暂,人眼根本看不到
//所以加个延时就是为了能够让人眼看到LED闪烁的现象
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
//Bit_RESET低电平
Delay_ms(500);
//那么问题来了,我们怎么知道LED是给高电平亮还是低电平亮呢
//这就要看stm32开发板上我们自己的接线了(前面也讲了,可以再翻上去看看)
GPIO_SetBits(GPIOA, GPIO_Pin_0);//高
Delay_ms (500);
GPIO_ResetBits( GPIOA, GPIO_Pin_0);//低
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)1);
//BitACtion:BitAction是一种用于对单个位进行操作的数据类型
//用于设置或清零32位单片机中的某个位。
//在库文件stm32f10x_gpio中,BitAction是一个枚举类型的变量,表示位是高电平还是低电平。
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0);
Delay_ms(500);
//另外两种在GPIO口置高低电平的函数
}
}