基于STM32单片机通过GPIO输出点亮LED灯-环球新要闻

来源:点灯大师时间:2023-06-02 13:23:06

一. GPIO初始化

STM32单片机51单片机不同,51单片机只需与引脚相连后就可以使用引脚发出高低电平信号控制外部器件,而STM32单片机需要先对引脚进行配置(初始化),如果使用引脚用作I2C、SPI、USART等通讯接口时,就是所谓的复用功能时,就需要再配置外设的工作参数。


【资料图】

1.使能GPIO端口时钟

RCC_APBxPeriphClockCmd(RCC_APBxPeriph_GPIOy , ENANLE/DISABLE);

函数表示使能或者不使能APBx(Advanced Peripheral Bus)的外设时钟,APBx表示时钟总线APB1或APB2,APB1为低速的外设时钟(最大为36MHz),APB2为高速的外设时钟(最大为72MHz)。GPIOy表示GPIO的端口(A.B.C...)。两个时钟总线上都挂载着不同的引脚端口和外设,使用时需要注意,APB1的使能函数不能使能挂载在APB2总线上的引脚端口和外设。

2.初始化GPIO目标引脚的工作模式

因为官方库函数已经将初始化GPIO的所需要的功能进行了封装,成为一个结构体,所以需要先定义一个GPIO_InitTypeDef类型的结构体。注意:定义结构体要放在GPIO配置函数内的第一行。

GPIO_InitTypeDef GPIO_InitStructure;

然后选择需要控制的引脚,x表示所控制端口的第几个引脚。

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x;

然后设置引脚模式,xx表示8种不同的引脚模式,如果只是想要控制引脚的高低电平用于LED的亮灭控制,则可以选择GPIO_Mode_Out_PP(通用推挽输出);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_xx;

然后设置引脚的速率,xx表示输出最大的频率,共有10MHz、2MHz、50MHz三种选择,速度越大,I/O口的相应速度越快,但相应的功耗和噪声也大。

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_xxMHz;

3.调用库函数,初始化GPIO端口

GPIOx为需要使用端口,在前面已经使能其的时钟;GPIO_InitStructure为第2步定义的结构体。

GPIO_Init(GPIOx, &GPIO_InitStructure);

4.定义引脚的高低电平

GPIO_SetBits(GPIOx , GPIO_Pin_y)表示将Px(y)的引脚拉高;

GPIO_ResetBits(GPIOx , GPIO_Pin_y)表示将Px(y)的引脚拉低;

二. 示例程序:通过控制引脚PB5输出高低电平实现led灯的亮灭。

“bsp_led.c”  //led驱动文件#include "bsp_led.h"void LED_GPIO_Config(void){    GPIO_InitTypeDef GPIO_InitStructure;     RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE );    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_Init(GPIOB, &GPIO_InitStructure);  }"bsp_led.h"  //led头文件#ifndef  __LED_H#define __LED_H#include "stm32f10x.h"void LED_GPIO_Config(void);#define  LED_OFF     GPIO_SetBits(GPIOB , GPIO_Pin_5);        //PB5引脚为低电平#define  LED_ON      GPIO_ResetBits(GPIOB , GPIO_Pin_5);    //PB5引脚为高电平#endif /* __LED_H */"main.c"  //主函数文件#include "stm32f10x.h"#include "bsp_led.h"void delay_ms(uint16_t nms)    //延时函数,ms级别{    uint16_t i , j;    for(i=0;i< 1000;i++)    { for(j=0 ; i< 1000 ; j++) }}int main(void)    //led循环亮灭各0.5秒{    LED_GPIO_Config();    while(1)    {        LED_ON;        delay_ms(500); //延时500ms        LED_OFF;        delay_ms(500); //延时500ms    }}

三. 电路图示意

LED接线示意图

当PB5为低电平时,led亮;当PB5为高电平时,led灭。由于led的内阻较小,而且有最大电流限制,所以需要串联电阻调节电流,我选用的led的最大电流为20mA,所以我使用330Ω的电阻,使其电流为10mA,不会超过电流限制。

关键词:

相关阅读

推荐阅读

基于STM32单片机通过GPIO输出点亮LED灯-环球新要闻

基于STM32单片机通过GPIO输出点亮LED灯-环球新要闻

基于STM32单片机通过GPIO输出点亮LED灯-STM32单片机和51单片机不同,51更多

2023-06-02 13:23:06
供应极为宽松 菜油维持偏弱走势-环球快资讯

供应极为宽松 菜油维持偏弱走势-环球快资讯

受大宗商品熊市和自身供需面利空影响,5月中旬后,郑州菜油期货持续下更多

2023-06-02 11:59:48
怎么增加性功能(如何提高性能力)

怎么增加性功能(如何提高性能力)

怎么增加性功能,如何提高性能力这个很多人还不知道,现在让我们一起来更多

2023-06-02 12:10:29
准备“芒”起来!2023年百色芒果开采上市时间定了→-天天短讯

准备“芒”起来!2023年百色芒果开采上市时间定了

吃货狂喜!百色芒果要来了最早6月5日开采上市!5月30日百色市政府发更多

2023-06-02 11:17:25
建信消费金融获批开业

建信消费金融获批开业

【深圳商报讯】(首席记者谢惠茜)5月31日,建设银行发布公告,称近日更多

2023-06-02 10:41:58
世界热点!保变电气(600550)6月1日主力资金净卖出954.84万元

世界热点!保变电气(600550)6月1日主力资金净卖

截至2023年6月1日收盘保变电气600550报收于514元下跌172换手率046成交更多

2023-06-02 09:36:12
印度一季度GDP增6.1%,多方称“意外” 全球报道

印度一季度GDP增6.1%,多方称“意外” 全球报道

【环球时报驻巴基斯坦特派记者  程是颉】据印度《经济时报》报道更多

2023-06-02 08:57:11
原材料价格回落缓解成本压力 轮胎行业利润修复景气度好转

原材料价格回落缓解成本压力 轮胎行业利润修复景

卓创资讯根据轮胎原材料占比构成估算,截至5月23日,单条全钢轮胎(12R2更多

2023-06-02 07:59:36
+ 点击查看更多精彩

精彩放送

chkdsk访问被拒绝怎么办?如何一招恢复电脑系统?
    chkdsk访问被拒绝怎么办?电脑输入chkdsk命令访问被拒绝,说明Chkd...
databases文件夹可以删除吗?c盘满了哪些文件可以删除?
    databases文件夹可以删除吗?databases一般情况下用不到,删掉没有...
u盘0字节无法格式化怎么解决?u盘被写保护应该怎么解除?
    u盘0字节无法格式化怎么解决?第一步鼠标双击计算机,进入页面,右...
耳麦说不了话是哪方面的原因如何解决?为何说话没声音但能听得见?
    耳麦说不了话是哪方面的原因如何解决?原因一:耳机被损坏了。这个...
电脑重装系统后连不上网怎么回事?重装win10无法引导进系统怎么办?
    电脑重装系统后连不上网怎么回事?1、原因一:驱动原因网卡驱动程...
开启wds是什么意思?wds状态未开启在哪里设置?
    开启wds是什么意思?WDS全称Wireless Distribution System的简称...