我采用的实验板硬件原理图如下
这些LED灯的阴极都是与STM32的GPIO的引脚相连接,我们只需要控制对应的引脚输出低电平,即可点亮LED灯,其中彩灯的阳极连接到的一个电路图符
号“口口”,它表示引出排针,即此处本身断开,须通过跳线帽连接排针,把电源跟彩灯的阳极连起来,才可以进行操作。
固件库工程配置如下
标准的固件库函数工程模板
在编写应用程序的过程中,要考虑更改硬件环境的情况,例如 LED 灯的控制引脚与当前的不一样,我们希望程序只需要做最小的修改即可在新的环境正常运行。这个时候一般把硬件相关的部分使用宏来封装,若更改了硬件环境,只修改这些硬件相关的宏即可,这些定义一般存储在头文件,即本例子中的“bsp_led.h”文件中。
这部分宏控制 LED 亮灭的操作是直接向 BSRR寄存器写入控制指令来实现的,对BSRRL 写 1输出高电平,对 BSRRH写 1输出低电平,对 ODR寄存器某位进行异或操作可反转位的状态。
代码中的“\”是 C语言中的续行符语法,表示续行符的下一行与续行符所在的代码是同一行。代码中因为宏定义关键字“#define”只是对当前行有效,所以我们使用续行符来连接起来,以下的代码是等效的:
#define LED_YELLOW LED1_ON; LED2_ON; LED3_OFF
应用续行符的时候要注意,在“\”后面不能有任何字符(包括注释、空格),只能直接回车。
利用上面的宏,编写LED灯的初始化函数
初始化 GPIO端口时钟时也采用了 STM32库函数,函数执行流程如下:
(1) 使用 GPIO_InitTypeDef 定义 GPIO 初始化结构体变量,以便下面用于存储 GPIO 配置。
(2) 调用库函数 RCC_AHB1PeriphClockCmd 来使能 LED 灯的 GPIO 端口时钟该函数有两个输入参数,第一个参数用于指示要配置的时钟,如本例的“RCC_AHB1Periph_GPIOH”和“RCC_AHB1Periph_GPIOD”,应用时我们使用“|”操作同时配置四个 LED 灯的时钟;函数的第二个参数用于设置状态,可输入“Disable”关闭或“Enable”使能时钟。
(3) 向 GPIO初始化结构体赋值,把引脚初始化成推挽输出模式,其中的 GPIO_Pin 使用宏“LEDx_PIN”来赋值,使函数的实现方便移植。
(4) 使用以上初始化结构体的配置,调用 GPIO_Init 函数向寄存器写入参数,完成 GPIO的初始化,这里的 GPIO 端口使用“LEDx_GPIO_PORT”宏来赋值,也是为了程序移植方便。
(5) 使用同样的初始化结构体,只修改控制的引脚和端口,初始化其它 LED 灯使用的GPIO引脚。
(6) 因为烧写程序后自动复位后ODR的初始值为0,LED会亮,所以使用宏控制 RGB灯默认关闭。
bsp.c中已经配置了三个LED灯,本例的主函数只为红灯亮的主函数,如需加其他灯的操作,只需在此主函数基础上添加即可
即可控制实验板亮红灯。
关键字:stm32f4 固件库函数 LED灯
引用地址:
stm32f4固件库函数点亮LED灯
推荐阅读最新更新时间:2024-03-16 16:24
科普LED灯珠损坏的可能原因
LED死灯现象在LED照明行业经常出现,严重影响到了产品的质量和可靠性,也是众厂家关心的问题。LED死灯是由什么原因引起?该如何避免LED死灯的现象是本文探讨的重点。 LED死灯的原因 LED死灯的原因不外乎两种情况:其一,LED的漏电流过大造成PN结失效,使LED灯点不亮,这种情况一般不会影响其他的LED灯的工作; 其二,LED灯的内部连接引线断开,造成LED无电流通过而产生死灯,这种情况会影响其他的LED灯的正常工作,原因是由于LED灯工作电压低(红黄橙 LED工作电压1.8V-2.2V,蓝绿白LED工作电压2.8-3.2V),一般都要用串、并联来联接,来适应不同的工作电压,串联的LED灯越多影响越大,只
[模拟电子]
LED灯高功率因数驱动器的设计方案(一)
随着LED灯在众多领域里的应用,譬如商业照明和家庭照明,LED照明已全面有取代传统白炽灯和荧光灯之势,因为相比传统照明,LED照明尽管在价格上偏贵于传统照明,但它具备节能,光效高,寿命长,无污染等显着优点,所以,LED照明能在短时内被市场认同。另外,随着能源资源无节制地消耗,带有节能性能的照明产品已受到政府组织的推广,一些国家的能源组织也有发布相关政策,补贴满足其标准的照明产品。如商业照明产品功率因数大于0.9,家用大于0.7就是美国能源之星的强制要求之一。所以在关注LED灯高光效,长寿命特点的同时,在保证低元器件成本的前提下,设计出具有高功率因数且性能高可靠LED驱动方案变得尤为重要。 1 LED照明的发展概述 消费者从传统照明
[电源管理]
工程师详解:T8 LED灯管耐压测试死灯珠的原因
T8LED灯管 在制造完成准备老化前要不要加入耐压测试环节?有些厂家跳过这环节,直接老化出货了。为什么?答案就是耐压测试会死灯珠。再把概念扩大,整个LED行业有相当数量人员认为,耐压测试会把灯珠打死,因此目前市面上的相当部分灯具没有经过耐压测试环节,使用安全存在一定隐患。这些灯具大多无法通过出口商检或是CE测试,产品品质下了一个档次。还有一个问题:耐压3.75KV的驱动电源组装的灯具打耐压时甚至3KV都过不了。 T8耐压测试死灯珠的机理: LED 的损坏有两个原因。一是电压超出;二是电流超出。耐压测试的漏电流都设在10mA左右,一般不会超出LED允许的电流值。导致LED损坏的最大可能是电压超出。 电压又是如何超出的呢? 灯
[电源管理]
【stm32f407】SPI实验 驱动W25Q128
一.SPI介绍 SPI 是英语SerialPeripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的 管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种 通信协议,STM32F4也有SPI接口。下面我们看看SPI的内部简明图 SPI接口一般使用4条线通信: MISO 主设备数据输入
[单片机]
利用安森美半导体LED驱动器设计高效LED灯串
近年来,高亮度LED的应用领域不断增多,涵盖从移动设备背光、中大尺寸LCD背光、汽车内部及外部照明及通用照明等宽广范围。常见DC-DC LED照明应用包括景观照明、内部低压道路照明、太阳能供电照明、汽车照明、应用车辆照明、船舶应用、低压卤素类替代及飞机内部照明等。 安森美半导体提供DC-DC低功率 LED照明应用的多款LED驱动器,涵盖升压、降压以及升降压等不同拓扑结构,如图1所示。在这系列产品中,NCL30160和NCL30161是安森美半导体较新的两款DC-DC LED驱动器。NCL30161 LED驱动器适合于宽电压应用,它可通过平均电流控制使LED纹波电流控制在平均电流的10%,输出不需要滤波电容,而且支持PWM或
[电源管理]
STM32F4开发笔记4: UART的使用方法
STM32F4内嵌4个通用异步/同步收发器(USART1、USART2、USART3、USART6)和两个通用异步收发器(UART4和UART5)。本文讲解此6个串行口,在异步模式下的使用方法,如不加说明,以USART1为例。 可以按照下述步骤,对通用异步串行口进行设置。 1、打开config.h文件,对如下图所示的宏进行设置,0x0c表示将当前串行口UART1的波特率设为115200bps,无效验。 2、打开main.c文件,可以在其中断服务函数中,完成接收逻辑的代码编写,如下图所示。此代码表明,当串行口收到1个字节的数据后,将触发串行口中断,在中断服务程序中,将接收到的1字节数据取出,送u8_
[单片机]
解决LED灯泡发热的最佳方法
LED灯 泡发热怎么办? LED 是会产生热量的,很多人就会以为LED是冷光源,这仅仅是指LED的发光原理而已。 LED灯泡发热的原因: LED灯泡发热的原因是因为所加入的电能并没有全部转化为光能,而是一部分转化成为热能,电光转换效率20~30%左右。也就是说大约70%的电能都变成了热能。 具体来说,LED结温的产生是由于两个因素所引起的: 内部量子效率不高,也就是在电子和空穴复合时,并不能100%都产生光子,通常称为由“电流泄漏”而使PN区载流子的复合率降低。泄漏电流乘以电压就是这部分的功率,也就是转化为热能,但这部分不占主要成分,因为现在内部光子效率已经接近90%。 内部产生的光子无法全部射出到
[电源管理]
STM32F429--按键检测
文件说明 bsp_led.c负责LED的初始化配置 bsp_led.h负责外设LED函数的声明,以及宏定义 bsp_key.c负责按键初始化 bsp_key.h负责按键函数的声明,以及宏定义 main.c实现功能:按键控制LED亮灭 程序 1.bsp_led.c #include led.h void LED_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; //0-打开系统时钟 RCC_AHB1PeriphClockLPModeCmd(LED_GPIO_CLK,ENABLE); //1-设置引脚 GPIO_InitSt
[单片机]