历史上的今天
返回首页

历史上的今天

今天是:2025年02月18日(星期二)

正在发生

2020年02月18日 | STM32的GPIO输出编程实例之点亮三色LED

2020-02-18 来源:elecfans

一、概述:

1、发光二极管简介

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


R = (E - UF)/IF

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


2、STM32 GPIO简介

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),红色、绿色、蓝色交替点亮。


推荐阅读

史海拾趣

北京人民电器厂公司的发展小趣事

北京人民电器厂有限公司,作为北方地区最大的低压电器制造企业,于1995年成功研发出全球首台高分断微型直流断路器。这一创新成果不仅填补了国内空白,更在国际上展现了中国在低压电器领域的研发实力。该断路器的诞生,标志着北京人民电器在直流断路器技术领域迈出了坚实的一步,为后续的产品研发和市场拓展奠定了坚实的基础。

台湾岱恩(DAIN)公司的发展小趣事

随着北京人民电器产品的不断优化和升级,其生产的GM系列直流断路器在发电、输变电系统中得到了广泛应用。众多电力企业和项目都选择了北京人民电器的产品,这不仅是对其产品质量和技术水平的认可,也进一步推动了公司在电力行业的深入发展。

星海公司的发展小趣事

面对数字化时代的挑战和机遇,星海公司开始积极推进数字化转型。公司引入先进的生产管理系统和数字化营销手段,提高生产效率和市场响应速度。同时,星海公司还积极探索新的商业模式和合作方式,以适应不断变化的市场需求。展望未来,星海公司将继续秉承“质量为本、创新为魂”的发展理念,致力于成为全球领先的乐器制造商和音乐教育服务提供商。

AAEON公司的发展小趣事

星海钢琴始终注重技术创新和品质提升。从引进国外先进技术到自主研发,星海钢琴在钢琴设计和制造方面取得了显著成果。公司特聘德国钢琴制造大师劳瑟·切尔先生为公司顾问,不断提升产品的工艺水平和音质表现。同时,星海钢琴还通过了ISO9001国际质量管理体系认证,确保每一架钢琴都符合高标准的质量要求。

Fedco_Batteries公司的发展小趣事

随着公司业务的不断拓展,Fedco_Batteries始终将产品质量放在首位。公司引进了先进的生产设备和检测设备,建立了严格的质量管理体系。每一块电池在出厂前都要经过多道严格的质量检测,确保产品的稳定性和可靠性。这种对品质的坚持,让Fedco_Batteries的电池在市场上赢得了良好的口碑,越来越多的客户选择了他们的产品。

DDP Engineered LED Solutions公司的发展小趣事

在LED照明产品的生产过程中,DDP Engineered LED Solutions公司始终坚守品质控制的原则。公司建立了严格的生产流程和质检标准,确保每一件产品都符合质量要求。同时,公司还积极引入先进的生产设备和管理系统,提升生产效率和产品质量。正是这些努力,让DDP的产品在市场上赢得了客户的信任和好评,为公司赢得了良好的口碑。

问答坊 | AI 解惑

几个硬件设计经验

鸡毛蒜皮之一:成本节约 现象一:这些拉高/拉低的电阻用多大的阻值关系不大,就选个整数5K吧 点评:市场上不存在5K的阻值,最接近的是4.99K(精度1%),其次是5.1K(精度5%),其 成本分别比精度为20%的4.7K高4倍和2倍。20%精度的电阻阻值只有1 ...…

查看全部问答>

AVR AD转换程序

刚学AVR,下载的好多程序总是编译错误不能用。这个AD转换程序是我自己修改正确的。共享给像我一样刚学 AVR的朋友。绝对正确。任何问题请联系:132 6515 5485。联系请在晚上19:00以后。邮箱:h32446975@126.com 也同时希望交些使用AVR的朋友。  ...…

查看全部问答>

求职英语(一):个人品质英语词汇大全

个人品质有用词汇able 有才干的,能干的 active 主动的,活跃的 adaptable 适应性强的 adroit 灵巧的,机敏的 aggressive 有进取心的 alert 机灵的 ambitious 有雄心壮志的 amiable 和蔼可亲的 amicable 友好的 analytical 善于分析的 ap ...…

查看全部问答>

viewdraw的库怎么加啊

想用viewdraw画电路导出网表作hspice住真,但是没有viewdraw的库  哪位大大给个库啊 谢谢了 fab100@163.com…

查看全部问答>

6401两通道LDO参数及其应用

台湾AnSC最新推出两通道LDO  AP6401系列, AP6401系列的高精确度,双,低噪声,低压差稳压器的CMOS与启用功能.在EN功能允许输出的每一稳压必须关闭独立,导致 大大降低了能耗.该AP6401系列的软启动功能,以抑制浪涌电流.该电流限制器\'倍 ...…

查看全部问答>

如何确定器件参数

我做的是一个单片开关电源,如图所示。U1用的是NCP1000,我要VO输出12V、100mA. 该如何设计变压器T2的参数,反馈绕组电压电流该确定为多少? 望高手指教…

查看全部问答>

C语言降龙十八掌——第三掌 写对strcpy,你也可以进微软

好吧,我承认我在玩标题党。我没有去微软面试过,标题里面的微软,指的是同学们心向往之而不得的大公司。 这是我在职业生涯刚刚起步时,去某业内非常知名的,无数学子向往的一个大公司面试的时候被问到的一个问题。 当时回答得也不全面,回来思考 ...…

查看全部问答>

芯片的DATASHEET主要有些什么内容

芯片的DATASHEET主要有些什么内容…

查看全部问答>

如何精确线程循环周期

有个线程 while(1) {     f1();     Sleep(100); } 本来初衷是使这个线程每100毫秒循环一次,但是由于Sleep函数的不精确,以及f1()的执行时间不确定,因此,次线程循环周期总是不能精确到100毫秒,有没有什么方法能使此线 ...…

查看全部问答>

MC-1000中,如何对背光进行控制

在开发MC-1000中,想在程序一开启就把背光灯打开,用什么函数来控制打开背光呢,各位老大,请赐教。在线等。。。急。我用的时evc4.0开发平台。…

查看全部问答>