历史上的今天
返回首页

历史上的今天

今天是:2025年06月21日(星期六)

2019年06月21日 | 嵌入式-stm32学习:使用固件库点亮LED

2019-06-21 来源:eefocus

bsp_led.h


#ifndef __LED_H

#define __LED_H


#include "stm32f4xx.h"


//引脚定义

/*******************************************************/

//红色灯 R

#define LED1_PIN                  GPIO_Pin_10                //GPIO引脚号

#define LED1_GPIO_PORT            GPIOH                      //GPIO端口H

#define LED1_GPIO_CLK             RCC_AHB1Periph_GPIOH       //GPIO端口时钟


//绿色灯 G

#define LED2_PIN                  GPIO_Pin_11                 

#define LED2_GPIO_PORT            GPIOH                      

#define LED2_GPIO_CLK             RCC_AHB1Periph_GPIOH


//蓝色灯 B

#define LED3_PIN                  GPIO_Pin_12                 

#define LED3_GPIO_PORT            GPIOH                       

#define LED3_GPIO_CLK             RCC_AHB1Periph_GPIOH

/************************************************************/



/** 控制LED亮灭的宏,

  * 低电平亮,ON=0,OFF=1,

  * 高电平亮,ON=1,OFF=0

    */

#define ON  0

#define OFF 1


/* 带参宏 */

#define LED1(a) if (a) 

                    GPIO_SetBits(LED1_GPIO_PORT,LED1_PIN);

                    else       

                    GPIO_ResetBits(LED1_GPIO_PORT,LED1_PIN)


#define LED2(a) if (a) 

                    GPIO_SetBits(LED2_GPIO_PORT,LED2_PIN);

                    else       

                    GPIO_ResetBits(LED2_GPIO_PORT,LED2_PIN)


#define LED3(a) if (a) 

                    GPIO_SetBits(LED3_GPIO_PORT,LED3_PIN);

                    else       

                    GPIO_ResetBits(LED3_GPIO_PORT,LED3_PIN)



/* 直接操作寄存器的方法控制IO */

#define digitalHi(p,i)           {p->BSRRL=i;}      //输出高电平

#define digitalLo(p,i)           {p->BSRRH=i;}      //输出低电平

#define digitalToggle(p,i)       {p->ODR ^=i;}      //输出翻转状态


/* 定义控制IO的宏 */

#define LED1_TOGGLE     digitalToggle(LED1_GPIO_PORT,LED1_PIN)  //翻转

#define LED1_OFF            digitalHi(LED1_GPIO_PORT,LED1_PIN)//关

#define LED1_ON             digitalLo(LED1_GPIO_PORT,LED1_PIN)//开


#define LED2_TOGGLE     digitalToggle(LED2_GPIO_PORT,LED2_PIN)

#define LED2_OFF            digitalHi(LED2_GPIO_PORT,LED2_PIN)

#define LED2_ON             digitalLo(LED2_GPIO_PORT,LED2_PIN)


#define LED3_TOGGLE     digitalToggle(LED3_GPIO_PORT,LED3_PIN)

#define LED3_OFF            digitalHi(LED3_GPIO_PORT,LED3_PIN)

#define LED3_ON             digitalLo(LED3_GPIO_PORT,LED3_PIN)


/* 基本混色 */

//红

#define LED_RED 

                    LED1_ON;

                    LED2_OFF;

                    LED3_OFF


//绿

#define LED_GREEN       

                    LED1_OFF;

                    LED2_ON;

                    LED3_OFF


//蓝

#define LED_BLUE   

                    LED1_OFF;

                    LED2_OFF;

                    LED3_ON



//黄                 

#define LED_YELLOW 

                    LED1_ON;

                    LED2_ON;

                    LED3_OFF

//紫

#define LED_PURPLE 

                    LED1_ON;

                    LED2_OFF;

                    LED3_ON


//青

#define LED_CYAN

                    LED1_OFF;

                    LED2_ON;

                    LED3_ON


//白

#define LED_WHITE   

                    LED1_ON;

                    LED2_ON;

                    LED3_ON


//黑(全关)

#define LED_RGBOFF 

                    LED1_OFF;

                    LED2_OFF;

                    LED3_OFF        



void LED_GPIO_Config(void); //定义LED-GPIO初始化配置函数


#endif /* __LED_H */


bsp_led.c


  #include "./led/bsp_led.h"   

 /**

  * 初始化控制LED的IO

  */

void LED_GPIO_Config(void)

{       

    /*定义一个GPIO_InitTypeDef类型的结构体*/

    GPIO_InitTypeDef GPIO_InitStructure;


    /*开启LED相关的GPIO外设时钟*/

    RCC_AHB1PeriphClockCmd ( LED1_GPIO_CLK|

                           LED2_GPIO_CLK|

                           LED3_GPIO_CLK, ENABLE); 


    /*设置引脚模式为输出模式*/

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;   


    /*设置引脚的输出类型为推挽输出*/

    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;


    /*设置引脚为上拉模式*/

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;


    /*设置引脚速率为20MHz*/   

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;


    /*选择要控制的GPIO引脚*/           

    GPIO_InitStructure.GPIO_Pin = LED1_PIN; 


    /*调用库函数GPIO_Init,使用配置好的GPIO_InitTypeDef对GPIO端口初始化*/

    GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure); 


    /*选择要控制的GPIO引脚*/                       

        GPIO_InitStructure.GPIO_Pin = LED2_PIN; 

    GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure); //初始化端口


    /*选择要控制的GPIO引脚*/                           

        GPIO_InitStructure.GPIO_Pin = LED3_PIN; 

    GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure); 


    /*关灯*/

    LED_RGBOFF;     

}

/*********************************************END OF FILE**********************/



推荐阅读

史海拾趣

Crystal Clear Technology公司的发展小趣事

面对全球电子市场的竞争压力,Crystal Clear Technology决定加快国际化步伐。公司先后在多个国家设立研发中心和生产基地,利用当地的资源和优势,提升产品的竞争力和生产效率。同时,公司还积极参与国际展览和交流活动,与国际同行建立广泛的合作关系,为公司的发展注入了新的活力。

First Switchtech公司的发展小趣事

为了应对原材料成本上涨和市场竞争加剧的挑战,First Switchtech公司(或类似公司)实施了供应链优化策略。公司通过与上游供应商建立长期合作关系,实现了原材料的稳定供应和成本的有效控制。同时,公司还引入了先进的生产管理系统,提高了生产效率和产品质量。这些措施不仅降低了产品的生产成本,还增强了公司的市场竞争力。

Gumstix公司的发展小趣事
检查电路连接是否松动或断裂,重新连接或更换损坏的部件。
Digitron公司的发展小趣事

Digitron公司始终将创新作为企业发展的核心驱动力。公司投入大量资金用于研发新技术和新产品,不断提升产品的性能和功能。XXXX年,Digitron公司成功研发出一款具有无线传输功能的数据记录器,用户可以通过手机或电脑实时查看和监控数据。这一创新产品受到了市场的热烈欢迎,为Digitron公司带来了显著的增长。

BLACK&DECKER公司的发展小趣事

BLACK&DECKER在技术创新方面一直走在行业前列。公司不断投入研发资源,推动电动工具技术的进步。例如,1979年,BLACK&DECKER发布了第一台手提式充电吸尘器Dustbuster,这一创新产品迅速成为市场上的热销产品,并推动了整个吸尘器行业的发展。此外,BLACK&DECKER还积极参与行业标准的制定工作,通过制定严格的产品质量标准和安全规范,为整个电子行业的健康发展做出了贡献。

芯佰微(Corebai)公司的发展小趣事

芯佰微(Corebai)公司自创立之初,就致力于成为电子行业中微电子领域的领军企业。创始人团队凭借对半导体技术的深厚理解和对市场需求的敏锐洞察,确立了公司的核心技术路线——专注于高性能模拟和数字集成电路的研发。在创业初期,芯佰微就投入大量资源用于技术研发,成功研发出多款具有自主知识产权的集成电路产品,奠定了公司在行业中的技术基础。

问答坊 | AI 解惑

低成本小功率通用变频器的实现

摘要:对一种小型化、低成本的变频调速器及其控制电源作了较详尽的论述。介绍三相PWM 波形产生的过程、驱动电路与主电路的选型。随着变频调速技术的不断发展,某些原不采用电机调速的领域亦引起人们的重新考虑。如空调、冰箱等新使用的电机采用单相 ...…

查看全部问答>

编写无错C程序秘诀

[ 本帖最后由 daicheng 于 2009-3-3 10:14 编辑 ]…

查看全部问答>

反激电源 原边反馈采样点采样保持

在反激flyback设计时,有采用原边反馈的方式(primary feedback或primary side regualation)。据资料上讲,采样保持电路在副 线圈上的diode电流为零时,进行采样保持。请问采样保持这个说法是怎么回事? 我接触到的反激是得到最大峰值电流的同时, ...…

查看全部问答>

什么时候我能看懂这个坛子里面大部分的贴?

什么时候我能看懂这个坛子里面大部分的贴?WINCE嵌入开发。那我就入门了。还是googleman老兄引领俺找到了这里。一来就离不开拉。努力努力在努力!这几天在eeworld的坛子里解决了很多应用程序的问题。继续学习! …

查看全部问答>

LM3S9B96 能好买吗?多少一片啊?

TI那里没货申请不到哦! 市场上现在好买吗? 大概什么价格啊?…

查看全部问答>

德克罗蒙推出一款传感器

德克罗蒙推出一款传感器,带LED现场显示一体化温度变送器,可带现场显示功能。 可选各类卡盘及螺丝连接方式。316L材质。 精度可选德国DIN,AA,A,B,C级精度。 输出4-20MA…

查看全部问答>

寻求F28XX支持CCS3.1的FLASH烧写插件(程序)

各位大侠:     你门谁有F28XX支持CCS3.1的FLASH烧写插件,给小弟传一分吧,我在TI的网上下不下来.我已经找个这个好几天了,实在是一件插件太难求啊,不知道在坐的各位谁有,能不能给我传一份啊,小弟万分感谢: 我的邮箱: yihui666888@163.com ...…

查看全部问答>

最近学习UART时老看到PSC,那PSC是什么东西呢?

最近学习UART是老是看到PSC如:UART_PSC、MCF_PSC_PSCSICR(channel) = MCF_PSC_PSCSICR_SIM_UART; 这个PSC是什么东西,我怎么在手册上找不到啊,搜索好像也没有什么号的解释呢,求解,谢谢!…

查看全部问答>

multisim 12的问题 急急急急急急急

下载12安装后    进入      显示无法连接 datebase  数据库   ,problem :Accessing the datebase   有大牛能解决吗?????? 而且卸载后重新安装也不好使     & ...…

查看全部问答>