打印

GPIO输出,使用固件库点亮LED

[复制链接]
437|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
菊江先生|  楼主 | 2020-4-25 09:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
固件库实现流水灯,原来的作业只是点亮绿灯,为了方便对比,我把程序贴上来:
bsp_led.H 程序:
#ifndef  _BSP_LED_H
#define  _BSP_LED_H

#include "stm32f10x.h"

#define LED_B_GPIO_PIN      GPIO_Pin_1  //将蓝灯对应的PIN宏定义,提高可读性
#define LED_R_GPIO_PIN      GPIO_Pin_5  //将红灯对应的PIN宏定义,提高可读性
#define LED_G_GPIO_PIN      GPIO_Pin_0  //将绿灯对应的PIN宏定义,提高可读性

#define LED_R_GPIO_PORT     GPIOB
#define LED_G_GPIO_PORT     GPIOB
#define LED_B_GPIO_PORT     GPIOB       //前边的只定义了那个脚没有定义具体端口,在这里定义具体端口

#define LED_G_GPIO_CLK      RCC_APB2Periph_GPIOB  //将RCC.C文件中的APB2 CLK使能形参宏定义
#define LED_R_GPIO_CLK      RCC_APB2Periph_GPIOB
#define LED_B_GPIO_CLK      RCC_APB2Periph_GPIOB



//#define LED_ON              GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN)
//#define LED_OFF             GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN)
#define ON                   1 //定义带参宏
#define OFF                  0 //定义带参宏


#define LED_R(a)               if(a) GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN); else GPIO_SetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);//定义带参宏
#define LED_G(a)               if(a) GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN); else GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);//定义带参宏
#define LED_B(a)               if(a) GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN); else GPIO_SetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);//定义带参宏

void LED_GPIO_Config(void);
#endif /*_BSP_LED_H*/




bsp_led.C 程序:

void LED_GPIO_R_Config(void)
{
        
          GPIO_InitTypeDef   GPIO_InitStruct;          //定义初始化一个结构体,GPIO_InitStruct的名字可以任意,前面的GPIO_InitTypeDef对应头文件里面的结构体定义,所以格式命名不能随便修改
        
        RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE);//注意:时钟的初始化要放到GPIO函数初始化之前,否则初始化无效果,也就是说先打开时钟端口才可以初始化
        RCC_APB2PeriphClockCmd(LED_R_GPIO_CLK, ENABLE);
        RCC_APB2PeriphClockCmd(LED_B_GPIO_CLK, ENABLE);

        GPIO_InitStruct.GPIO_Pin    =  LED_R_GPIO_PIN;
        GPIO_InitStruct.GPIO_Mode   =  GPIO_Mode_Out_PP;
        GPIO_InitStruct.GPIO_Speed  =  GPIO_Speed_50MHz;
        
        
        
        
        GPIO_InitStruct.GPIO_Pin    =  LED_G_GPIO_PIN;
        GPIO_InitStruct.GPIO_Mode   =  GPIO_Mode_Out_PP;
        GPIO_InitStruct.GPIO_Speed  =  GPIO_Speed_50MHz;
        
        
        GPIO_InitStruct.GPIO_Pin    =  LED_B_GPIO_PIN;
        GPIO_InitStruct.GPIO_Mode   =  GPIO_Mode_Out_PP;
        GPIO_InitStruct.GPIO_Speed  =  GPIO_Speed_50MHz;
        
        
        
        
        GPIO_Init(LED_R_GPIO_PORT , &GPIO_InitStruct);//第二个变量是指针类型,对一个变量要取地址,用&符号
        GPIO_Init(LED_G_GPIO_PORT , &GPIO_InitStruct);
        GPIO_Init(LED_B_GPIO_PORT , &GPIO_InitStruct);        
}



main 函数程序:

#include "stm32f10x.h"

#include "bsp_led.h"

void delay(uint32_t count)
{
for(;count!=0;count--);

}

int main(void)
{
     LED_GPIO_R_Config();//首先调用初始化函数,后面再做动作;
        
        
        while(1)   //让三个灯一次亮起来
               
        {


                LED_R(ON);
                delay(9000000);
               
               
               
                LED_B(ON);
                delay(9000000);
               
               
               
                LED_G(ON);
                delay(9000000);
               
               
        }
        
}


这样下来的结果就是只有蓝色灯亮

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

447

帖子

0

粉丝