大家好啊,下面我来给大家介绍一下原理图。第一张图为LED灯的原理图,第二张为我的单片机原理图。
D1是一颗发光二极管,这个二极管有竖线的位置是负极,没有竖线的位置是正极,淘宝上买的贴片二极管有颜色的一端为负极;R92为2K电阻,它起到限流的作用,避免通过二极管的电流过大,烧坏二极管;LED的正极直接连到3.3V电压供电,供电后,通过限流电阻限流之后,把二极管所需要电流传递给LED,电流从LED的正极流向负极,进而点亮LED。
LED1对应开发板上的PA11引脚,我们只要给他输出一个低电平就能点亮这颗LED灯。接下来,我将通过编写程序的方式点亮这颗LED。
打开工程文件,创建led.c和led.h两个文件,新建HARDWARE文件夹,并把led.c和led.h两个文件保存在里面。
下面我们将添加文件路径。
添加完文件路径之后,我们把led.c文件添加到工程中,之后我们便可以在led.c和led.h文件中编写我们的代码了。
第一步进行系统预处理,在led.h文件中写入以下代码,之后点击保存,记得留这个新行,不然编译器会出现一个警告。
#ifndef __LED_H
#define __LED_H
#include "sys.h"
#endif
解析:
第一、二行代码的意思是,如果系统中没有名称为led.h的头文件我们就去定义它。
#include “sys.h” 里面包含我们所用的gpio.h和rcc.h之类的文件,我们定义时钟和引脚时会用到。
接下来我们在led.c文件中编写代码。在第一行我们先引用头文件led.h,之后我们创建一个函数:void LED_UserCongif(void){},这个函数里我们将进行gpio相关的一些引脚的配置。当我们在取函数名字时,应该取一些易懂的名字,这样便于我们理解。
void LED_UserConfig(void){}
首先引用一个结构体:
GPIO_InitTypeDef GPIO_InitStructure;//我们可以把它理解为 char c;
下面进行一些参数的配置,打开固件库手册,我们可以看到我们引用的GPIO_InitTypeDef结构体,它定义于件“stm32f10x_gpio.h”,前面我们引用“sys.h”头文件中就包含了这个文件;在GPIO_InitTypeDef结构体中它一共传递了三个成员值,第一个为u16类型的GPIO_Pin,第二个位GPIO的速率,第三个为GPIO的模式。
下面是使用方法:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//选择PA11引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//选择2MHz速率
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出模式
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化
在我们的固件库手册中有一个使用例子,我们可以按照这个例子编写即可
完成这个操作之后我们需要打开外设时钟,不开外设时钟的话它是不工作的
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使用GPIOA它搭载在APB2总线上
在手册里是关于这个时钟的介绍,感兴趣的可以自己查看
最后通过另外一个函数,它可以对引脚进行低电平的输出
GPIO_ResetBits(GPIOA,GPIO_Pin_11);
在手册中我们可以查看这个函数的说明和使用过程
把我们定义的函数在led.h中声明,不声明的话是无法直接调用的
void LED_UserConfig(void);
最后把这个函数放到main函数中,同时在main函数中引用led.h头文件
#include "sys.h"
#include "led.h"
int main(void)
{
LED_UserConfig();
}
点击编译,没有出现错误,利用Stlink把程序下载到单片机里,就可以看到开发板上的led处于点亮状态了。
有用的话,留个赞再走吧!!
链接:https://pan.baidu.com/s/1ao4wYBzecYyZLE_rICUEzQ
提取码:5dfi
–来自百度网盘超级会员V3的分享