资讯 更多 >>
湖北自由贸易试验区挂牌运行 ...
漳州举办“数字工匠”职工职业技能...
河南4名阳性人员私自返乡并瞒报情况...
山西吕梁:发现盗采矿产资源行为可举报
受害方律师:接法院通知,乐安命案...
橙色——“柑橘院士”邓秀新心中最...
刷视频相认的双胞胎姐妹:两次创业...
四川通报2021年秋冬季首批大气污染...
首轮筛查:天津73443人全部阴性!
首席气象预报员张霞:30年坚守筑牢...
动态更多 >>
基于STM32单片机通过GPIO输出点亮LED灯 头条
达尔优三模gasket机械键盘618促销价399元
到2030年 北京市将全面建成儿童友...
世界观热点:城市公交专用道优化方...
周扬青的家里是干什么的_周扬青
除夕的团圆饭是什么(除夕的团圆饭...
中国供应链产业(03708):已履行复牌...
世界热门:关于蔡徐坤西湖水色大片散...
世界要闻:最新物流企业内部会计控...
当前看点!赛恩斯2022年年度每10股派...
会展 更多 >>
美籍酿酒师在崇礼:中国是第二故乡...
河南项城报告2名疑似新冠肺炎病例 ...
浙江绍兴确诊病例首次零新增 上虞...
广西东兴实行全员居家隔离 启动口...
新疆全方位推进乡村振兴 “富春山...
云南瑞丽市主城区全员核酸检测结果...
内蒙古满洲里累计治愈出院本土确诊...
孙海洋夫妻驱车山东阳谷:还在为孙...
大国工匠追梦“玉米强国”40载:用...
让南海“海洋热带雨林”斑斓多彩
专题报道 
当前位置: 动态 > >> 正文
 
基于STM32单片机通过GPIO输出点亮LED灯 头条
来源:点灯大师     时间:2023-06-02 12:05:24

一. 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,不会超过电流限制。

关键词:

热门推荐
猜你喜欢