打印

将LED例程修改了一下,请高手们指点

[复制链接]
267|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
追光少年|  楼主 | 2019-11-28 07:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LED, pi, gp, GPIO, IO
这份代码里有一个小错误,己在四楼更正

我之前有说过,我是做JAVA出身的,JAVA有一些特点,就是结构化很好,很重视"包装",把数据都包装到"Bean"里,这样的好处是写程序时不用太多考虑底层的东西,专注于业务逻辑。

于是我把例程例用JAVA的思想,修改了一下

******************* LED.H *****************

#ifndef __LED_H
#define __LED_H

#include "stm32f10x.h"

/**
  * @brief 将LED相关的数据项打包成结构体,做用类似于Java的Bean
  */
typedef struct {
         GPIO_TypeDef* GPIO_Group;
         uint16_t Pin;
} LED;

//声明三盏灯
LED Led_1,Led_2,Led_3;

//初始化
void LED_GPIO_Config(void);
//设定每一盏灯并保持熄灭状态
void Init(LED Led);
//开灯
void LED_ON(LED Led);
//关灯
void LED_OFF(LED Led);
                                       
#endif /* __LED_H */



******************* LED.C *****************

#include "led.h"

/**
*        @brief        初始化
*        @param        void
*        @retval        null
**/
void LED_GPIO_Config(void) {
                  
         //打开 GPIOB、GPIOF 的时钟
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF,ENABLE);
         
         //设定 Led1\2\3 的数据
         Led_1.GPIO_Group = GPIOB;
         Led_1.Pin = GPIO_Pin_0;
         
         Led_2.GPIO_Group = GPIOF;
         Led_2.Pin = GPIO_Pin_7;
         
         Led_3.GPIO_Group = GPIOF;
         Led_3.Pin = GPIO_Pin_8;
         
         //初始化
         Init(Led_1);
         Init(Led_2);
         Init(Led_3);

}

/**
*        @brief       初始化LED
*        @param        Led 每盏灯的数据包装容器,包括所属的GPIO组(GPIOx)和引脚(Pin)
*        @retval        null
**/
void Init(LED Led) {
         GPIO_InitTypeDef GPIO_InitStructure;
         
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
         GPIO_InitStructure.GPIO_Pin = Led.Pin;
         
         //初始化
         GPIO_Init(Led.GPIO_Group,&GPIO_InitStructure);
         
         //关灯
         LED_OFF(Led);
         
}
  
/**
*        @brief        开灯
*        @param       Led 每盏灯的数据包装容器,包括所属的GPIO组(GPIOx)和引脚(Pin)
*        @retval        null
**/
void LED_ON(LED Led) {
         GPIO_SetBits(Led.GPIO_Group,Led.Pin);
}
   
/**
*        @brief        关灯
*        @param       Led 每盏灯的数据包装容器,包括所属的GPIO组(GPIOx)和引脚(Pin) *        @retval        null
**/
void LED_OFF(LED Led) {
         GPIO_ResetBits(Led.GPIO_Group,Led.Pin);
}

使用特权

评论回复

相关帖子

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

本版积分规则

379

主题

379

帖子

0

粉丝