历史上的今天
返回首页

历史上的今天

今天是:2025年03月25日(星期二)

正在发生

2021年03月25日 | STM32学习1:GPIO输出实验——点亮三色LED

2021-03-25 来源:eefocus

一、概述:


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的三个通道,将GPIO设置为推挽输出模式,采用灌电流的方式与LED连接(如图1-2所示),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),红色、绿色、蓝色交替点亮。


推荐阅读

史海拾趣

Dolphin Interconnect Solutions Asa公司的发展小趣事

Dolphin Interconnect Solutions ASA自创立之初,便以技术革新为核心驱动力。公司不断投入研发资源,开发出了基于PCI Express的I/O和clustering产品,这些产品在市场上取得了显著的成功。随着技术的不断进步,Dolphin又成功地将产品扩展到更广泛的领域,如云计算、大数据处理等,进一步巩固了其在电子行业的地位。

Faraday Technology公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,Dolphin Interconnect Solutions ASA面临着前所未有的挑战。为了应对这些挑战,公司积极调整战略方向,加大在人工智能、物联网等新兴领域的投入。同时,Dolphin还加强了与产业链上下游企业的合作,共同推动产业链的转型升级。这些努力使得Dolphin在激烈的市场竞争中保持了稳健的发展态势。

Altitude Technology公司的发展小趣事

Altitude Technology公司成立于一个科技迅猛发展的时代,创始人李华怀揣着对电子技术的热爱和对未来科技的憧憬,决定创立一家专注于高度集成和智能化电子产品研发的公司。初期,公司面临着资金短缺、人才匮乏等重重困难,但李华凭借对技术的深刻理解和敏锐的市场洞察力,带领团队开发出了一款具有划时代意义的智能手环,这款产品以其出色的性能和人性化的设计迅速在市场上获得了认可,为Altitude Technology公司赢得了第一桶金。

Coil-Q Corporation公司的发展小趣事

随着公司规模的扩大,Coil-Q意识到单靠自身的力量难以应对日益激烈的市场竞争。于是,公司积极寻求与其他企业的战略合作,与多家知名电子品牌建立了长期稳定的合作关系。通过共享资源、共同研发,Coil-Q不仅拓展了业务领域,还提高了自身的技术水平和市场竞争力。

Dantona Industries公司的发展小趣事

Dantona Industries非常重视人才的培养和团队建设。他们深知,一个优秀的团队是公司发展的基石。因此,公司投入大量资源用于员工培训、激励机制建设等方面。他们定期组织技术研讨会、团队拓展活动等,提升员工的业务能力和团队凝聚力。同时,公司还建立了完善的晋升机制和薪酬体系,确保员工能够享受到与公司共同成长的成果。这种以人为本的管理理念为公司的持续发展提供了有力保障。

First Silicon Co., Ltd公司的发展小趣事

面对日益激烈的市场竞争,First Silicon公司深知供应链管理的重要性。公司投入大量资源,对供应链进行了全面整合和优化。通过建立长期稳定的供应商关系、引入先进的供应链管理软件和提高库存周转率等措施,First Silicon有效降低了原材料成本和库存风险。同时,公司还加强了与下游客户的沟通和合作,确保产品能够及时、准确地送达客户手中。这一系列举措不仅提升了公司的运营效率,还增强了其市场竞争力。

问答坊 | AI 解惑

ARM学习经验-开始贴

现在ARM处理器优点突出,正在日益成为嵌入式领域的标杆,大家上招聘网站看下就知道了,电子工程师岗位基本上都要求熟悉ARM或DSP,熟悉linux下程序开发。这对我们都是个挑战啊,为了赶上这班车,自己也开始了ARM学习之旅。以后,我会把自己的过程和 ...…

查看全部问答>

兼职:诚意找人编写PADS /AD电路设计的图书

我们现有关于PADS /Altium Designer 电路设计的图书选题,诚找有写书意向的作者合作。要求作者有一些实战经验和写作资源,有一定的业余时间、能够保证写作进度。有意者请直接发信 联系方式:haohong99@163.com、478057587(QQ)。欢迎有实践开发 ...…

查看全部问答>

附件格式要求

可不可以加一种doc的啊?word是咱们常用的处理工具啊!…

查看全部问答>

【大讲台】安森美半导体LED照明电源设计

【大讲台】安森美半导体LED照明电源设计 LED照明有着广阔的应用前景,其中LED照明电源的设计至关重要,但LED照明设计给包括中国工程师在内的工程社群带来了挑战,因为LED照明的应用范围非常广泛,应用的功率等级、可以采用的驱动电源种类及电源拓 ...…

查看全部问答>

WINCE 键盘驱动 '*' '.' 错误

请教各位高手:     现在我在做键盘驱动,发现一个问题,     我想 用某个按键做标准键盘里面的 * 和 . 两个符号,     我差了键盘值,         *   ----->  0x6a & ...…

查看全部问答>

界面开发的烦恼

做了1,2个EVC开发的项目。基本是工控的,就是触摸屏然后控制硬件完成一些动作。 用户总是对界面有点不满意,想弄得鲜艳一些,各种状态明了一些, 比如不同状态下换个颜色,贴个图片,按钮变成圆的等等。 但是大家都知道EVC控件种类实在是少,而 ...…

查看全部问答>

WINCE5.0 /6.0 EBOOT启动有何异同?

最近项目发生些意外,具体是因为2443的核心板原来使用的RAM是MobileDDR128MB,但是因为特殊情况改了普通DDR128MB的RAM后一直无法正常通过USB下载Stpldr/Eboot.bin/NK.bin WINCE6.0的项目在这种变更情况下出现问题了,可是WINCE5.0还是很正常,而且什么 ...…

查看全部问答>

CeGetLastError()的返回值为ERROR_ACCESS_DENIED

是这样的,写了一个DLL,放到手机上。(不需要考虑CPU问题,因为我是在POCKET PC 2003的平台下写的) 然后在PC端用CeRapiInvoke连接。 但是总是失败 使用CeGetLastError()得到的返回值为ERROR_ACCESS_DENIED,也就是错误码为5,拒绝访问。 有人 ...…

查看全部问答>

值得期待:全套家电概念呼之欲出

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 从2011年中国家电博览会启动仪式现场获悉,已成功举办了7届的家博会将首次变脸,除了传统的白色家电产品外,还将融合彩电、数码、音响等消费类电子产品。本届展会主办方也由中国家用电器协会一 ...…

查看全部问答>