这份代码里有一个小错误,己在四楼更正
我之前有说过,我是做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);
} |