STM32F4(LED)

发布者:HarmoniousVibes最新更新时间:2018-04-23 来源: eefocus关键字:STM32F4  LED 手机看文章 扫描二维码
随时随地手机看文章

在实际的项目开发过程中,常常会遇到硬件电路的修改,然后修改的部分就需要修改驱动程序。想这样需求该来该去是程序员们最烦闷的事情(重复劳动痛不欲生啊~)。为了避免或减少重复劳动,就需要在程序的架构上下功夫。接下来以最常见的LED驱动程序为例,进行程序结构设计。


1,开发环境

     1,固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0

     2,编译器:ARMCC V5.06

     3,IDE:Keil uVision5

     4,操作系统:Windows 10 专业版


2,程序源码

      LED.h文件

/** 

  ****************************************************************************** 

  * @file    LED.h 

  * @author  XinLi 

  * @version v1.0 

  * @date    24-October-2017 

  * @brief   Header file for LED.c module. 

  ****************************************************************************** 

  * @attention 

  * 

  *

Copyright © 2017 XinLi

 

  * 

  * This program is free software: you can redistribute it and/or modify 

  * it under the terms of the GNU General Public License as published by 

  * the Free Software Foundation, either version 3 of the License, or 

  * (at your option) any later version. 

  * 

  * This program is distributed in the hope that it will be useful, 

  * but WITHOUT ANY WARRANTY; without even the implied warranty of 

  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 

  * GNU General Public License for more details. 

  * 

  * You should have received a copy of the GNU General Public License 

  * along with this program.  If not, see

  * 

  ****************************************************************************** 

  */  

  

#ifndef __LED_H  

#define __LED_H  

  

#ifdef __cplusplus  

extern "C" {  

#endif  

  

/* Header includes -----------------------------------------------------------*/  

#include "stm32f4xx.h"  

  

/* Macro definitions ---------------------------------------------------------*/  

#define LEDn                      (4)  

  

#define LED1_RCC_AHB1Periph_GPIO  RCC_AHB1Periph_GPIOC  

#define LED1_GPIO                 GPIOC  

#define LED1_GPIO_Pin             GPIO_Pin_0  

  

#define LED2_RCC_AHB1Periph_GPIO  RCC_AHB1Periph_GPIOC  

#define LED2_GPIO                 GPIOC  

#define LED2_GPIO_Pin             GPIO_Pin_1  

  

#define LED3_RCC_AHB1Periph_GPIO  RCC_AHB1Periph_GPIOB  

#define LED3_GPIO                 GPIOB  

#define LED3_GPIO_Pin             GPIO_Pin_3  

  

#define LED4_RCC_AHB1Periph_GPIO  RCC_AHB1Periph_GPIOB  

#define LED4_GPIO                 GPIOB  

#define LED4_GPIO_Pin             GPIO_Pin_4  

  

/* Type definitions ----------------------------------------------------------*/  

typedef enum  

{  

  LED_Pin1 = 0,  

  LED_Pin2 = 1,  

  LED_Pin3 = 2,  

  LED_Pin4 = 3  

}LED_Pin;  

  

typedef enum  

{  

  LED_Off = 0,  

  LED_On  = 1  

}LED_Status;  

  

/* Variable declarations -----------------------------------------------------*/  

/* Variable definitions ------------------------------------------------------*/  

/* Function declarations -----------------------------------------------------*/  

void LED_SetStatus(LED_Pin pin, LED_Status status);  

LED_Status LED_GetStatus(LED_Pin pin);  

  

/* Function definitions ------------------------------------------------------*/  

  

#ifdef __cplusplus  

}  

#endif  

  

#endif /* __LED_H */  


      LED.c文件

/** 

  ****************************************************************************** 

  * @file    LED.c 

  * @author  XinLi 

  * @version v1.0 

  * @date    24-October-2017 

  * @brief   LED module driver. 

  ****************************************************************************** 

  * @attention 

  * 

  *

Copyright © 2017 XinLi

 

  * 

  * This program is free software: you can redistribute it and/or modify 

  * it under the terms of the GNU General Public License as published by 

  * the Free Software Foundation, either version 3 of the License, or 

  * (at your option) any later version. 

  * 

  * This program is distributed in the hope that it will be useful, 

  * but WITHOUT ANY WARRANTY; without even the implied warranty of 

  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 

  * GNU General Public License for more details. 

  * 

  * You should have received a copy of the GNU General Public License 

  * along with this program.  If not, see

  * 

  ****************************************************************************** 

  */  

  

/* Header includes -----------------------------------------------------------*/  

#include "LED.h"  

#include  

  

/* Macro definitions ---------------------------------------------------------*/  

/* Type definitions ----------------------------------------------------------*/  

/* Variable declarations -----------------------------------------------------*/  

/* Variable definitions ------------------------------------------------------*/  

static      GPIO_TypeDef *LED_GPIO[LEDn]                = {LED1_GPIO, LED2_GPIO, LED3_GPIO, LED4_GPIO};  

static      uint16_t      LED_GPIO_Pin[LEDn]            = {LED1_GPIO_Pin, LED2_GPIO_Pin, LED3_GPIO_Pin, LED4_GPIO_Pin};  

static      uint32_t      LED_RCC_AHB1Periph_GPIO[LEDn] = {LED1_RCC_AHB1Periph_GPIO, LED2_RCC_AHB1Periph_GPIO, LED3_RCC_AHB1Periph_GPIO, LED4_RCC_AHB1Periph_GPIO};  

static __IO LED_Status    ledStatus[LEDn]               = {LED_Off, LED_Off, LED_Off, LED_Off};  

  

/* Function declarations -----------------------------------------------------*/  

static void LED_Init(void);  

  

/* Function definitions ------------------------------------------------------*/  

  

/** 

  * @brief  Led initializes. 

  * @param  None. 

  * @return None. 

  */  

static void LED_Init(void)  

{  

  static bool init_flag = false;  

    

  if(init_flag == false)  

  {  

    init_flag = true;  

      

    for(int i = 0; i < LEDn; i++)  

    {  

      GPIO_InitTypeDef GPIO_InitStructure = {0};  

        

      RCC_AHB1PeriphClockCmd(LED_RCC_AHB1Periph_GPIO[i], ENABLE);  

        

      GPIO_InitStructure.GPIO_Pin   = LED_GPIO_Pin[i];  

      GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;  

      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  

      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  

      GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;  

      GPIO_Init(LED_GPIO[i], &GPIO_InitStructure);  

        

      GPIO_WriteBit(LED_GPIO[i], LED_GPIO_Pin[i], (BitAction)LED_Off);  

    }  

  }  

}  

  

/** 

  * @brief  Set led status. 

  * @param  [in] pin:    That led. 

  * @param  [in] status: Led status. 

  * @return None. 

  */  

void LED_SetStatus(LED_Pin pin, LED_Status status)  

{  

  if(status != ledStatus[pin])  

  {  

    ledStatus[pin] = status;  

      

    LED_Init();  

      

    GPIO_WriteBit(LED_GPIO[pin], LED_GPIO_Pin[pin], (BitAction)status);  

  }  

}  

  

/** 

  * @brief  Get led status. 

  * @param  [in] pin: That led. 

  * @return Led status. 

  */  

LED_Status LED_GetStatus(LED_Pin pin)  

{  

  return ledStatus[pin];  

}  


      main.c文件

/** 

  ****************************************************************************** 

  * @file    main.c 

  * @author  XinLi 

  * @version v1.0 

  * @date    24-October-2017 

  * @brief   Main program body. 

  ****************************************************************************** 

  * @attention 

  * 

  *

Copyright © 2017 XinLi

 

  * 

  * This program is free software: you can redistribute it and/or modify 

  * it under the terms of the GNU General Public License as published by 

  * the Free Software Foundation, either version 3 of the License, or 

  * (at your option) any later version. 

  * 

  * This program is distributed in the hope that it will be useful, 

  * but WITHOUT ANY WARRANTY; without even the implied warranty of 

  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 

  * GNU General Public License for more details. 

  * 

  * You should have received a copy of the GNU General Public License 

  * along with this program.  If not, see

  * 

  ****************************************************************************** 

  */  

  

/* Header includes -----------------------------------------------------------*/  

#include "main.h"  

#include "Delay.h"  

#include "LED.h"  

  

/* Macro definitions ---------------------------------------------------------*/  

/* Type definitions ----------------------------------------------------------*/  

/* Variable declarations -----------------------------------------------------*/  

/* Variable definitions ------------------------------------------------------*/  

/* Function declarations -----------------------------------------------------*/  

/* Function definitions ------------------------------------------------------*/  

  

/** 

  * @brief  Main program. 

  * @param  None. 

  * @return None. 

  */  

int main(void)  

{  

  for(;;)  

  {  

    Delay_ms(500);  

    LED_SetStatus(LED_Pin1, LED_On);  

    Delay_ms(500);  

    LED_SetStatus(LED_Pin2, LED_On);  

    Delay_ms(500);  

    LED_SetStatus(LED_Pin1, LED_Off);  

    Delay_ms(500);  

    LED_SetStatus(LED_Pin2, LED_Off);  

  }  

}  


3,注意

       修改接口需要注意,LED的驱动方式和增减LED的个数。对应修改LED_Status枚举和源文件的变量定义。



关键字:STM32F4  LED 引用地址:STM32F4(LED)

上一篇:STM32F4(KEY)
下一篇:STM32F4(用SysTick实现精确测量程序运行的时间)

推荐阅读最新更新时间:2024-03-16 16:00

LED与传统照明逐步“合二为一”走向高端
  随着LED产业在照明领域的快速发展,传统照明巨头希望通过引入新光源的设计而使照明产品更富创新性。传统照明巨头引入LED新光源,加速形成新商业模式。LED照明和传统照明两个领域正逐步合二为一,加速形成一种新的照明商业模式,这非常有利于LED照明的迅速推广使用。   由于全球照明用电量高居全年总用电量20%,其中多达90%的电能被转换成热能消耗,非常不具经济效益,在环保、节能的考虑下,LED照明已快速成为颇受关注的技术和产业。各国政府积极制定环保法规,在市场与法规双重利益刺激下,全球LED产业规模呈快速增长之势。   LED照明的优势不言而喻。LED灯的发光效率很高,寿命很长,它的发光效率能达到日光灯的2.
[电源管理]
士兰微电子推出高PF隔离SDH682X系列LED照明驱动新品
杭州士兰微电子公司凭借自身的技术优势和市场地位,在LED照明驱动领域不断地推陈出新,近期已经量产了原边控制高PF隔离SD682X系列产品。该系列芯片与同行竞品相比,有整体竞争优势,具有高PFC、高恒流精度和高转换效率等特点。 SDH682X是业界第一颗去COMP电容的产品,可有效地防潮湿防漏电,广泛应用于筒灯,平板灯,轨道灯,等LED照明市场。 SDH682X是性能优异的LED照明驱动系列芯片,使用了多项士兰微自有的专利技术来提高产品性能,降低方案应用成本,如使用了THD优化专利技术,THD可以小于10%,而且可以省去外围补偿电路。采用了VCC供电专利电路,可以省去变压器辅助绕组。使用的输入线打火保护的技术则可以使芯片在发生输
[电源管理]
士兰微电子推出高PF隔离SDH682X系列<font color='red'>LED</font>照明驱动新品
一种高可靠性LED照明驱动电路
   0 引言   随着固态照明工业领域的兴起与不断改进,发光二极管(LED) 因其具有高效、节能、寿命长、环保等特点,已成为现今照明技术的可选方案,并逐渐被应用于照明。促使人们关注LED 照明技术的一个关键因素是,其大大降低了能源的消耗,并可实现长期可靠的工作。有理由相信,这种新型的固态照明,必将带来人类照明领域的第三次革命。   当然,采用LED 照明,首先需要考虑的是其亮度、成本以及寿命。由于影响LED 寿命的主要原因是其频繁启动瞬间的电流冲击,外界的各种浪涌脉冲,以及正常工作时的电流限制等,本电路综合了这些因素,从电路设计上尽量避免大电流对LED 照明灯具的冲击,并将其工作电流稳定在某一范围内,解决了目前LED
[电源管理]
一种高可靠性<font color='red'>LED</font>照明驱动电路
车用LED进入比亚迪/江淮等供应链体系
8月21日,聚飞光电发布半年度报告称,公司上半年实现营业收入为10亿元,同比下降12.75%;归属于上市公司股东的净利润为1.43亿元,同比下降2.40%。 从产品构成来看,背光LED产品实现销售收入7.73亿元,比上年同期下滑8.87%,占营业收入的 77.30%,产品综合良率达98.90%。照明LED产品实现销售收入9,825.93万元,占营业收入的9.82%。 聚飞光电表示,上半年,突如其来的新冠疫情,对公司国内外业务的开展均造成了不同程度的影响,但全球疫情下在家办公、在线教育及5G的商用所带来换机潮,增加了对智能电子终端新的使用需求,公司背光LED产品全球市场占有率持续保证了稳定增长,同时液晶显示产品向大屏化、高清化及
[手机便携]
车用<font color='red'>LED</font>进入比亚迪/江淮等供应链体系
采用LED大灯将成为汽车设计新趋势
    从前,LED大灯只能在豪华车上见到,现在,这项配置也逐渐下放到其他级别车型中。     德国光源产品公司欧司朗(Osram)预计,今年,全球生产的新车中仅有2%配备LED大灯,而这项数字到2020年将变成20%。     LED尾灯和日间行车灯是汽车设计师们的最爱,他们利用LED灯的特点塑造出结构层次分明、具有水晶质感的车灯系统。     汽车制造商青睐LED灯的原因之一是其耐久性强、结构紧凑、高效节能,不过LED灯的成本相对较高。一个卤素大灯的成本大约20美元,一个疝气大灯大灯的成本在60-80美元之间。而LED大灯的成本虽然呈下滑趋势,但目前仍旧达到疝气大灯的两倍。     LED灯全称发光二
[汽车电子]
STM32F429--EXTI外部中断/事件控制器
EXTI:External interrupt /event controll 具体的表现形式为 导致 外部的高低电平变化------------- 中断/事件发生(需要配置NVIC) 外部中断/事件控制器功能框图 具体可以分为两部分: 1- 中断(下图的1,2,3,4,5) 2- 事件(下图的1,2,3,6,7,8) 由上图可知,外部中断是挂载到APB总线上的,/23表示有23根结构相同的线。 (详情看stm32f4xx的中文参考手册第十章第二小节部分,下面对应的10.x.x代表手册对应章节部分) 1处:输入线 10.2.5 SYSCFG外部中断配置寄存器,16X9=144个GPIO口
[单片机]
<font color='red'>STM32F4</font>29--EXTI外部中断/事件控制器
物联网将驱动智慧照明发展 2020年安装量或逾25亿套
物联网成为科技业寄望下波成长动能挹注来源,美国研究机构Gartner看好物联网将驱动智慧照明发展,预测智慧照明系统安装量将由今年的4,600万套,成长至2020年的25.4亿套,年复合成长率为123%。    Gartner指出,未来智慧照明系统将连结至网路透过中央系统或云端进行远端监控,去年全球智慧照明安装量约在3~5亿平方尺,今年将呈现2倍成长;目前以商用空间为优先导入市场,主要因智慧照明系统有利于降低能源成本,降幅多达90%。    智慧照明应用需求量逐年成长将带动LED照明使用量以及相关传感器、控制器设计与使用,另外物连网连结后端资量中心运用大数据进行分析才达以达成智慧监控,Gartner看好智慧照明与物联网应
[嵌入式]
MCU学习之按键控制LED
程序 : /** * 读IO, 用按钮控制点灯. */ #include #include // 10个LED sbit P10 = P1^0; sbit P11 = P1^1; sbit P12 = P1^2; sbit P13 = P1^3; sbit P14 = P1^4; sbit P15 = P1^5; sbit P16 = P1^6; sbit P17 = P1^7; // 定义开关. 低电平有效. sbit K1 = P3^2; sbit K2 = P3^5; void main( void ) { while( 1 ) { if( !K1 ) // K1按下, 点亮LED
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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