stm32核心板可以点亮灯吗_STM32库函数点亮LED

很多码农写出的第一个程序是"Hello World!",因为这个程序简单容易上手,能给你自信心,让你更加坚定学习编程的信念;单片机也是如此,相信很多单片机老师教给你的第一个程序就是点亮一个LED,今天我们就来分享如何使用STM32F103点亮第一个LED灯。

注:本程序使用单片机为STM32F103VET6

一 单片机的硬件电路连接

7ca6db327e7da9b096bdf3039ddc7a7c.png

由原理图我们可以看到,D2(LED)连接在名称为PE1的IO口,且PE1输出高电平,D2点亮,PE1输出低电平,D2熄灭。

二 程序书写顺序

1 使能PE1所在的时钟总线

2 初始化LED相关函数

3 设置PE1相应的IO口输出函数

可能有同学就要问了,为什么STM32每次写程序前,都要使能相应时钟函数呢?而同为单片机的51单片机就不需要使能,每个IO口可以直接拿过来使用?

这是因为随着电子集成度的提高,功耗和发热问题日渐严重,芯片厂家也非常头疼这个问题,于是就针对STM32这类的单片机开发出了使能功能。

简单的理解:把单片机理解为很多水管的集合,我们要使用A水管,就先把A水龙头打开,就可以在获取A水管的水了。如果,全部的水管都打开,就会造成水资源的浪费。单片机也是这个道理,用哪个就使能哪个功能的IO,只有这样,才会使芯片功耗达到最低。

三 程序代码详解

1 使能GPIO E

因为PE1在GPIO E的端口上,所以要使能GPIO E,在工程树中找到rcc.c文件,打开它找到RCC_APB2PeriphClockCmd函数,并在STM32F1库文件使用手册中找到这个函数,理解其用法与参数数据。

cd973efb0a444a93b77690df442cf249.png
66b0a46a3bbac9ff1854f1b15d4bd444.png

所写函数:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE)

找到参数1并且查看其取值范围,可见GPIOE在其取值范围内,打开GPIOE的开关,所以将它设置为ENABLE,

2b4c350f3d935245143496409b16607a.png

2 初始化GPIO_InitT

GPIO_InitTypeDef函数功能为初始化,继续查看函数库文件使用说明

d2b4d9d443b949925d52b4bf5d6532fd.png
b5ad834ea542195bc063121c3c0e21db.png

在这里我们要构造一个函数体

GPIO_InitTypeDef GPIO_InitStructure;

将GPIO_InitTypeDef重新定义命名为GPIO_InitStructure;由使用说明可见,GPIO_Init函数要定义说明3个值,GPIO_PIN(IO口引脚标号) GPIOSpeed(GPIO输出速度)GPIOMode(GPIO输出模式)。在这里我们要将其设置为推挽输出,因为我们要点亮LED,所以需要大电流,而其输出特性刚好满足我们的要求,所以设置为推挽输出。

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //

将其设置好以后,继续给GPIO_Init的两个参数赋值,参数1为哪一个GPIO外设,我们将其写为GPIOE,参数2为GPIO_InitStructure,所以我们的函数这样子写:

GPIO_Init(GPIOE, &GPIO_InitStructure);

将设置写入GPIO_InitStructure中,用&将其写入。

根据硬件原理图,我们要将其写高电平才会点亮LED,所以要将GPIOE PIN1口写高电平,在这里我们用GPIO_SetBits函数,SetBit函数为置1函数,RESetBit函数为置0函数。

a6a354bb368d44f36919546c9e86924b.png
6a941dead5d3e9a10cdff590eccc7cb6.png
e14eb192a406f31bc3c1ad5735c02cab.png

这个函数可以将相应IO口拉高,让其为高电平,根据参数相关设置,我们写入GPIOE PIN1函数即可。

最后再主函数中调用相关函数即可点亮LED

23c047664b8fe49dc6113a9c9e770c40.png

源码分享:

#include "LED.h"//引用LED头文件#include "stm32f10x.h"void LED_Init(void)//LED初始化函数{ GPIO_InitTypeDef GPIO_InitStructure;//构造结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//使能GPIOE时钟 //指定GPIO成员变量 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOE,&GPIO_InitStructure); GPIO_ResetBits(GPIOE,GPIO_Pin_1);//默认输出低电平,默认不点亮}#include "stm32f10x.h"#include "delay.h"#include "LED.h"int main(void){ LED_Init();delay_init();while(1){  GPIO_SetBits(GPIOE,GPIO_Pin_1); delay_ms(500); GPIO_ResetBits(GPIOE,GPIO_Pin_1); delay_ms(500); }}

总结

要想点亮一个LED,其本质操作为设置其相应的IO口,只有学会了设置和操作IO口,大多数问题都能迎刃而解,设置IO口的关键就是设置哪一个IO口,输出还是输入?以什么模式输出和输入?输出和输入的速度又是多少?最后别忘记了,操作IO口,首先要使能相应的时钟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值