基于STM32单片机通过GPIO输出点亮LED灯

发布者:BlossomSunrise最新更新时间:2023-08-25 来源: elecfans关键字:STM32  单片机  GPIO输出  点亮LED灯 手机看文章 扫描二维码
随时随地手机看文章

一. 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灯

上一篇:一文详解GD32单片机和STM32单片机
下一篇:STM32入门学习笔记之外置FLASH读写实验

推荐阅读最新更新时间:2024-11-09 12:47

51单片机之74HC138译码器控制数码管进行100s计数
/** I use a timer in my code to control the time I use 138decoder int the hardware **/ #include reg51.h #define uint unsigned int #define uchar unsigned char sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; uchar code tab_1 ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar tab_2 ; uchar counter=0,tim
[单片机]
pic单片机定时器/计数器模块
前言 在单片机中,对于广大初学者来说,定时器、计数器此章节不仅应用广泛,而且还是单片机入门的敲门砖。在此,笔者就以此章节为重点,对定时器/计数器学习做出基本介绍。 -------------------------------------------------------------------------------------------------** 提示:以下是本篇文章正文内容,下面案例仅供参考 定时器/计数器模块的基本用途 如今,在许多世界著名的半导体制造公司开发型号繁多的单片机芯片内部,定时器/计时器模块是一种基本上普遍配置的常用外围设备模块,区别仅在于:配备的数量和规格不同(如:规格是否附带预分频器和
[单片机]
浅谈QSPI的特点以及QSPI的三种工作模式
意法半导体STM32F7系列MCU采用高性能的ARM Cortex-M7核心,借助ST的ART Accelerator™和L1缓存,STM32F7微控制器可提供Cortex-M7内核的最高理论性能,而无论代码是从嵌入式闪存还是由外部存储器执行的:1082 CoreMark / 462 DMIPS在216 MHz f CPU。带有新外围设备的智能架构。可利用STM32系列丰富的外设资源来外扩SRAM芯片。STM32F7支持QSPI. 意法半导体MCU STM32F7系列释放了Cortex-M7内核,AXI和多AHB总线矩阵,用于互连内核,外围设备和存储器。具有高达2MB的嵌入式闪存,在某些设备上具有读-写功能。两个用于以太网的通
[单片机]
STM32时钟基础内容和常见问题
RCC,Reset and Clock Control(复位和时钟控制),在绝大部分MCU芯片中都包含复位和时钟控制模块,也是MCU重要的组成部分。 相比于以前51单片机,现在STM32内部集成的时钟模块功能更加丰富,包含时钟选择、倍频、输出、外设总线时钟配置等。 STM32 时钟基础内容 STM32时钟树具有多项功能,可通过分频和倍频配置系统以及外设的时钟频率,不同型号STM32的时钟树有所不同。 1. 时钟源STM32的时钟源分为高速、低速两类时钟,同时也分内部和外部。HSE:High Speed External,高速外部HSI:High Speed Internal,高速内部LSE:Low Speed Extern
[单片机]
<font color='red'>STM32</font>时钟基础内容和常见问题
基于HX711数显称重仪的设计
本文设计的数显称重仪是基于电阻应变式传感器、以单片机为控制核心的称重控制显示系统,测量范围为0-10kg,测量精度±2g,液晶屏显示测量数据,同时可将多次测量数据通过串口送计算机显示。该系统具有精度高、性能稳定、操作简便等特点。称重仪设计框图如下图1所示: 图1 称重仪设计框图 1、硬件电路设计 1.1、称重传感器 电阻应变式称重传感器由电阻应变片、弹性体和检测电路等几个主要部分组成。弹性体在外力作用下产生弹性变形,使粘贴在他表面的电阻应变片也随同产生变形,电阻应变片变形后,它的阻值将发生变化(增大或减小),再经相应的测量电路把这一电阻变化转换为电信号(电压或电流),从而完成了将外力变换为电信号的过程。 检测电路如图2
[单片机]
基于HX711数显称重仪的设计
搭载安谋科技“星辰” STAR-MC1处理器,灵动微MM32F5系列MCU量产
日前,上海灵动微电子股份有限公司(以下简称“灵动微电子”)宣布高端MCU产品 MM32F5系列 已正式量产。该系列产品搭载安谋科技“星辰”STAR-MC1处理器,在架构和外设设计上有多处创新,存储容量覆盖128 KB到2MB,主频覆盖120MHz到200MHz以上,广泛适用于工业控制、汽车、物联网等高端应用场景。 灵动微电子 是国内为数不多 的同时获得 Arm® Keil®、IAR、SEGGER 官方支持 的本土MCU公司,依托十多年的技术积累建立了独立、完整的通用MCU生态体系,可为客户提供从硬件芯片到软件算法、从参考方案到系统设计的全方位支持。 据灵动微电子介绍,搭载 Arm Cortex® - M 系列内核的MM32系列
[嵌入式]
搭载安谋科技“星辰” STAR-MC1处理器,灵动微MM32F5系列<font color='red'>MCU</font>量产
瑞萨全新超高性能产品 业界首款基于Arm® Cortex®-M85处理器的MCU
RA8系列产品具备业界卓越的6.39 CoreMark/MHz测试分数,缩小了MCU与MPU之间的性能差距 包含Arm Helium技术,可提升DSP和AI/ML性能 卓越的安全性:高级加密加速、不可变存储、安全启动、TrustZone、篡改保护 低电压和低功耗模式,节省能耗 多款“成功产品组合”为您设计提速 RA8M1产品群对应软件及硬件开发套件现已上市 2023 年 10 月 31 日,中国北京讯 - 全球半导体解决方案供应商瑞萨电子今日宣布推出强大的RA8系列MCU,具备突破性的3000 CoreMark,并可满足客户应用所需的完全确定性、低延迟及实时操作要求。 RA8系列M
[嵌入式]
【GD32 MCU 入门教程】一、GD32 MCU 开发环境搭建(2)使用 IAR 开发 GD32
IAR版本众多,版本之间的兼容性并不好,如果初次使用建议安装7.3以上的版本,安装好IAR以后再根据该文档来添加GD的器件型号,进行相关的debug工作。 2.1 在IAR中添加GD32 MCU Device 2.1.1 从官网上下载相应的GD32系列插件。 下面以GD32F30x系列为例,下载插件IAR_GD32F30x_ADDON.1.0.0.exe: 2.1.2 运行IAR_GD32F30x_ADDON.1.0.0.exe,单击start开始安装插件。 2.1.3 安装成功后单击Finish,结束插件安装。 2.2 在IAR中编译调试GD32 在上一小节中我们已经添加了GD32F30x系列的插件,这一小节我们介绍
[单片机]
【GD32 <font color='red'>MCU</font> 入门教程】一、GD32 <font color='red'>MCU</font> 开发环境搭建(2)使用 IAR 开发 GD32
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved