嵌入式-stm32学习:使用固件库点亮LED

发布者:ShiningSmile最新更新时间:2019-06-21 来源: eefocus关键字:stm32  固件库  点亮LED 手机看文章 扫描二维码
随时随地手机看文章

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**********************/



关键字:stm32  固件库  点亮LED 引用地址:嵌入式-stm32学习:使用固件库点亮LED

上一篇:嵌入式-stm32学习:按键检测
下一篇:嵌入式系统学习——STM32之按键输入

推荐阅读最新更新时间:2024-11-13 15:27

STM32的NVIC和中断的总结
前言: 1.要想学习STM32中断,要先掌握STM32对优先级的定义; 2.有51单片机开发经验会比较容易理解中断优先级; 3.本篇博文基于STM32F103ZET6芯片和3.5.0标准库编写; 4.本篇博文从寄存器入手,最终实现编程的步骤;如有不足之处,还请前辈多多指教; 一 基础知识 1. cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断。(本博文只介绍60个外部可屏蔽中断) 2. stm32只有84个中断,包括16个内核中断和68个可屏蔽中断 3. stm32f103上只有60个可屏蔽中断,f107上才有68个中断 4. 先占优先级也就是抢占优先级,概念等同于51单片机中的中断。假设有两中断
[单片机]
<font color='red'>STM32</font>的NVIC和中断的总结
STM32 中断优先级原理
CM3 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256级的可编程中断设置。但 STM32 并没有使用 CM3 内核的全部东西,而是只用了它的一部分。STM32 有 84 个中断,包括 16 个内核中断和 68 个可屏蔽中断,具有 16 级可编程的中断优先级。而我们常用的就是这 68 个可屏蔽中断,但是 STM32 的 68 个可屏蔽中断,在 STM32F103 系列上面,又只有 60 个(在 107 系列才有 68 个)。 在 MDK 内,与 NVIC 相关的寄存器,MDK 为其定义了如下的结构体:   typedef struct   {   vu32 ISER ;
[单片机]
<font color='red'>STM32</font> 中断优先级原理
IC卡读写系统的单片机实现 STM32+MFRC522实现IC卡读写
一、环境介绍 MCU:STM32F103ZET6 开发软件:Keil5 非接触式读写卡模块: MFRC522 二、功能介绍 使用MFRC522模块完成对IC卡卡号读取、卡类型区分、IC卡扇区密码修改、扇区数据读写等功能;底层采用SPI模拟时序,可以很方便的移植到其他设备,完成项目开发。 现在很多嵌入式方向的毕业设计经常使用到该模块,比如: 校园一卡通设计、水卡充值消费设计、公交卡充值消费设计等。 三、MFR522介绍 MF RC522 是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员。是NXP 公司针对“三表”应用推出的一款低电压、低成本、体积小的非接触式读写卡芯片,是智能仪表和便携式手持设备研发的较好选
[单片机]
IC卡读写系统的单片机实现 STM32+MFRC522实现IC卡读写
基于STM32的多路电压测量设计方案
简介:计中使用的ADC是STM32上的12位ADC,能够满足一定的测量精度,对于较高的测量要求,则需要使用更高精确度的ADC.但是使用高精度ADC和DSP芯片,将很大的增加开发成本。 1.引言 近年来,数据采集及其应用受到了人们越来越广泛的关注,数据采集系统也有了迅速的发展,它可以广泛的应用于各种领域。 数据采集技术是信息科学的重要分支之一,数据采集也是从一个或多个信号获取对象信息的过程。数据采集是工业控制等系统中的重要环节,通常采用一些功能相对独立的单片机系统来实现,作为测控系统不可缺少的部分,数据采集的性能特点直接影响到整个系统。 电压的测量最为普遍性,研究设计并提高电压测量精度的方法及仪器具有十分重要的意义。
[单片机]
基于<font color='red'>STM32</font>的多路电压测量设计方案
STM32学习记录9:STM32F10X_XX宏定义的选择
如果你使用stm32f10x_stdperiph_lib,会发现在stm32f10x.h文件会有一段关于宏选择的代码,如: view plain copy #if !defined (STM32F10X_LD) && !defined (STM32F10X_MD) && !defined (STM32F10X_HD) && !defined (STM32F10X_CL) /* #define STM32F10X_LD */ /*! STM32F10X_LD: STM32 Low density devices */ /* #define STM32F10X_MD */ /*! STM32F10
[单片机]
<font color='red'>STM32</font>学习记录9:STM32F10X_XX宏定义的选择
stm32之堆栈
stm32中的堆栈设置 keil编译完成时存储情况 当编译成功时,会出现: BUILD://Program Size: Code=340 RO-data=252 RW-data=0 ZI-data=1632 Code:程序代码部分 RO-data: 程序定义的常量const temp RW-data:已初始化的全局变量 ZI-data:未初始化的全局变量 片中的: flash=Code+RO-data+RW-data RAM=RW-data+ZI-data 通过上面的BUILD可以看出,这个程序已经用了1600多的RAM,为什么会出用到这么多的RAM呢? 在startup_stm32f10x_md.s文件中存在:
[单片机]
STM32之TIM3_PWM程序
简介:STM32之TIM3_PWM程序详解:调整CCR2_Val的值来改变占空比,逐步的控制LED1的亮度, 占空比大过一定值时,亮度的变化就不明显了,所以CCR2_VAL最大设定到17000。 原理图: 程序分析: int main(void) { unsigned char a=0; TIM_OCInitTypeDef TIM3_OCInitStructure; RCC_Configuration(); time_ini(); SysTick_Config(72000); //配置SYSTICK时钟节拍为1ms一次 while(1){ Delay(1);//延时1ms TIM3
[单片机]
<font color='red'>STM32</font>之TIM3_PWM程序
Stm32使用Usart代码例子(轮询、中断、DMA)
stm32使用库函数编写USART还是很方便的,现在转几个例子: /*************************************** 转载请注明出处:tedeum.iteye.com ****************************************/ 首先是不使用中断的方法使用usart1,管脚pa9,pa10,此方法已在f3discovery上验证通过,来源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunitie
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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