0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32的GPIO输出编程实例之点亮三色LED

2oON_changxuemc 2018-02-07 11:14 次阅读

一、概述:

1、发光二极管简介

发光二极管是半导体二极管的一种,可以把电能转化为光能,常简写为LED。常用的是发红光、绿光或黄光的二极管。发光二极管的反向击穿电压约为5V。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过管子的电流。限流电阻R可用下式计算:

R = (E - UF)/IF

式中E为电源电压,UF为LED的正向压降,IF为LED的一般工作电流。LED广泛应用于各种电子电路、家电、仪表等设备中,做电源或电平指示。

2、STM32 GPIO简介

STM32F4每组通用I/O 端口包括4 个32 位配置寄存器(MODER、OTYPER、OSPEEDR 和PUPDR)、2 个32 位数据寄存器(IDR 和ODR)、1 个32 位置位/复位寄存器(BSRR)、1 个32 位锁定寄存器(LCKR) 和2 个32 位复用功能选择寄存器(AFRH 和AFRL)等。

GPIO可以配置成以下8种工作模式:

浮空输入:此端口在默认情况下什么都不接,呈高阻态,这种设置在数据传输时用的比较多。 上拉输入:上拉输入模式与浮空输入模式相比,仅仅是在数据通道上部,接入了一个上拉电阻,这个上拉电阻的阻值介于30K~50K欧姆,CPU可以随时在输入数据寄存器的另一端,读出I/O端口的电平状态。这种模式的好处在于我们什么都不输入时,由于内部上拉电阻的原因,处理器会觉得我们输入了高电平,这就避免了不确定的输入。该端口在默认情况下输入为高电平。 模拟功能:STM32的模拟输入通道的配置很简单,信号从I/O端口直接进入ADC模块。此时,所有的上拉、下拉电阻和施密特触发器,均处于断开状态,因此输入数据寄存器将不能反映端口上的电平状态,也就是说,模拟输入配置下,信号不经过输入数据寄存器,CPU不能在输入数据寄存器上读到有效的数据。该输入模式,使我们可以获得外部的模拟信号 开漏输出:开漏输出不可以直接输出高电平,开漏输出的输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。 开漏复用输出:GPIO的基本功能是普通的I/O,而STM32有自己的各个功能模块,这些内置外设的引脚是与标准GPIO复用的,当作为这些模块的功能引脚时就叫复用。开漏复用输出功能模式与开漏输出模式相比,不同的是输出控制电路的输入,是和片上外设的输出信号相连即与复用功能的输出端相连,此时,输出数据寄存器在输出通道被断开。 推挽复用输出:推挽复用输出功能模式与推挽输出模式相比,不同的是输出控制电路的输入,是和片上外设的输出信号相连,即与复用功能的输出端相连,而输出数据寄存器在输出通道被断开。

二、硬件电路:

iCore3双核心开发板中,采用一个独立的红绿蓝三色LED与STM32F407相连,限流电阻为1K。其中,红色LED与PI5引脚相连,绿色LED与PI6引脚相连,蓝色LED与PI7引脚相连。

STM32的GPIO输出编程实例之点亮三色LED

三、实验原理:

本实验通过STM32的三个GPIO口驱动三色LED的三个通道,将GPIO设置为推挽输出模式,采用灌电流的方式与LED连接,GPIO输出高电平LED熄灭,GPIO输出低电平LED点亮,通过控制GPIO输出的电平高低从而控制LED的亮灭。

四、源代码:

1、主函数

/*

* Name : main

* Description : ---

* Author : ysloveivy.

*

* History

* --------------------

* Rev : 0.00

* Date : 11/21/2015

*

* create.

* --------------------

*/

int main(void)

{

int i;

led.initialize();

//三色LED交替闪烁

while(1){

LED_RED_ON;

LED_GREEN_OFF;

LED_BLUE_OFF;

for(i = 0;i < 10000000;i++);

LED_RED_OFF;

LED_GREEN_ON;

LED_BLUE_OFF;

for(i = 0;i < 10000000;i++);

LED_RED_OFF;

LED_GREEN_OFF;

LED_BLUE_ON;

for(i = 0;i < 10000000;i++);

}

}

2、GPIO初始化

* Name : initialize

* Description : ---

* Author : ysloveivy.

*

* History

* --------------------

* Rev : 0.00

* Date : 11/21/2015

*

* create.

* --------------------

*/

static int initialize(void)

{

GPIO_InitTypeDef GPIO_uInitStructure;

//LED IO初始化

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI,ENABLE);

GPIO_uInitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; //初始化连接三色LED灯的IO端口

GPIO_uInitStructure.GPIO_Mode = GPIO_Mode_OUT; //设置端口为输出模式

GPIO_uInitStructure.GPIO_OType = GPIO_OType_PP; //设置输出类型为推挽输出模式

GPIO_uInitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉输出

GPIO_uInitStructure.GPIO_Speed = GPIO_Speed_100MHz; //设置速度等级

GPIO_Init(GPIOI,&GPIO_uInitStructure);

//PI5、PI6、PI7、接三色LED灯,置高电平,灯熄灭

GPIO_SetBits(GPIOI,GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);

return 0;

}

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef*GPIO_InitStruct)

这个函数两个参数,第一个参数是用来指定需要初始化的GPIO对应的GPIO组,取值范围为GPIOA~GPIOK。第二个参数为初始化参数结构体指针,结构体类型为GPIO_InitTypeDef。

结构体定义为

typedef struct{

uint32_t GPIO_Pin; //设置IO端口

GPIOMode_TypeDef GPIO_Mode; //设置端口工作模式

GPIOSpeed_TypeDef GPIO_Speed; //设置端口的速度等级

GPIOOType_TypeDef GPIO_OType; //设置端口的类型

GPIOPuPd_TypeDef GPIO_PuPd; //设置上下拉

}GPIO_InitTypeDef;

五、实验现象:

iCore3双核心板上与ARM相连的三色LED(PCB上标示为ARM·LED),红色、绿色、蓝色交替点亮。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    242

    文章

    23264

    浏览量

    660665
  • STM32
    +关注

    关注

    2270

    文章

    10897

    浏览量

    355822
  • GPIO
    +关注

    关注

    16

    文章

    1204

    浏览量

    52069

原文标题:STM32学习1:GPIO输出实验——点亮三色LED

文章出处:【微信号:changxuemcu,微信公众号:畅学单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    三色发光二极管原理图 led三色调光的概念

    三色LED由两个不同颜色的管芯组成,有共阳、共阴接法,故为散引脚。当两个管芯各自亮时呈现两,当两个管芯一起亮时则为混,所以称为三色
    发表于 08-27 08:58 6.3w次阅读
    <b class='flag-5'>三色</b>发光二极管原理图 <b class='flag-5'>led</b><b class='flag-5'>三色</b>调光的概念

    三色LED显示

    这是一个三色LED显示的设计,是大型LED巨屏的基础
    发表于 03-28 22:33

    【LeMaker Guitar试用体验】7.GPIO方式操作板载三色LED

    本帖最后由 xble 于 2016-2-11 12:01 编辑 前面我们通过操作GPIO来控制外接LED灯,其实guitar的底板上也有三色灯,系统启动后红灯和绿灯都会闪烁。我们先来
    发表于 02-11 12:01

    自己制作的三色LED仿真模型

    闲着没事,自己想做一个led全彩屏模型,但是想来想去,还是无从下手,想了一下,要想做全彩屏模型,首先要把单个LED三色做出来,了解其原理,才能做复杂的LED全彩屏模型。花了一个下午时间
    发表于 12-10 18:13

    【零基础学习STM32】第一讲:GPIO输出实验——点亮三色LED

    引脚相连,蓝色LED与PI7引脚相连。、实验原理:本实验通过STM32GPIO口驱动三色
    发表于 01-24 13:38

    STM32固件库编程GPIO如何点亮LED

    STM32固件库编程GPIO如何点亮LED
    发表于 10-13 09:37

    【Station M2 娱乐·极客主机试用体验】用Station M2主机做开发,点个三色LED跑马灯玩玩

    此时,你就会看到,LED点亮。如果是三色LED,那么红色将被点亮。再写入0输出低电平:echo
    发表于 12-26 23:13

    三色RGB LED模块学习笔记

    作者:GWD 时间:2019.06.28三色RGB学习笔记(开关量类传感器)一、学习要点:无二、手册分析(开关量传感器)1、产品用途:RGB LED 模块由一个贴片全彩 LED 制成,通过 R、G
    发表于 01-06 07:38

    用Stduino可以对三色LED模块进行控制

    *37种传感器(一)3LED模块+Stduino Nano&UNO*本文转载自: 键词:51、stm32、arduino、stduino、单片机、stduino UNO&Nano
    发表于 01-17 06:13

    三色LED显示屏的设计与实现

    本文给出基于单片机系统的16×15 三色LED 点阵双显示屏设计方案,采用动态显示原理,配合优化的程序设计,在动态扫描方式下,得到较高刷新速率、画面清晰的三色显示效果。
    发表于 10-27 16:26 164次下载
    <b class='flag-5'>三色</b><b class='flag-5'>LED</b>显示屏的设计与实现

    51控制的三色led

    1控制三色LED灯的颜色逐级变化; 2可以用按键输入变化时间; 3lcd1602显示变化时间和颜色变化顺序。
    发表于 05-13 15:07 49次下载

    RGB三色直方图的绘制

    《OpenCV3编程入门》书本配套源代码:RGB三色直方图的绘制
    发表于 06-06 15:20 17次下载

    OpenCV3编程入门-源码例程全集-RGB三色直方图的绘制

    OpenCV3编程入门-源码例程全集-RGB三色直方图的绘制
    发表于 09-18 16:38 0次下载

    STM32 GPIO输出实验——点亮三色LED资料下载

    电子发烧友网为你提供STM32 GPIO输出实验——点亮三色LED资料下载的电子资料下载,更有其
    发表于 04-21 08:46 14次下载
    <b class='flag-5'>STM32</b> <b class='flag-5'>GPIO</b><b class='flag-5'>输出</b>实验——<b class='flag-5'>点亮</b><b class='flag-5'>三色</b><b class='flag-5'>LED</b>资料下载

    使用树莓派GPIO点亮LED

    上一篇文章向大家介绍树莓派的硬件部分、安装操作系统及基础设置。这篇文章将介绍树莓派的强大的开发功能口——GPIO,以及利用GPIO点亮LED
    的头像 发表于 07-04 11:34 2310次阅读
    使用树莓派<b class='flag-5'>GPIO</b>口<b class='flag-5'>点亮</b>双<b class='flag-5'>色</b><b class='flag-5'>LED</b>灯