一、用自己新建的项目进行改写
- 使能时钟,开启LED相关的GPIO外设时钟
//使能时钟,开启外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); - 定义一个GPIO_InitTypeDef类型的结构体(定义一般放在首行)
- 选择要控制的GPIO引脚
- 设置引脚模式为通用推挽输出
- 设置引脚速率为50MHz
-
//配置端口模式
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- 调用库函数,初始化GPIO
//调用库函数,初始化GPIO
GPIO_Init(GPIOB,&GPIO_InitStructure); - 设置高低电平
- (高电平)关闭所有led灯——GPIO_SetBits
- (低电平)打开所有led灯——GPIO_ResetBits
-
//设置高低电平
//高电平,关闭灯
// GPIO_SetBits(GPIOB,GPIO_Pin_5);
// GPIO_SetBits(GPIOB,GPIO_Pin_0);
// GPIO_SetBits(GPIOB,GPIO_Pin_1);
GPIO_SetBits_all();//低电平打开灯
//GPIO_ResetBits(GPIOB,GPIO_Pin_5);
- 总的代码,在mian.c文件进行改写,以下代码可以实现流水灯
#include "stm32f10x.h" // Device header
#define SOFT_DELAY Delay(0x05FFFFF);
void Delay(__IO u32 nCount);
void GPIO_SetBits_all(void);
int main(void) {
/*
* 1、使能时钟,开启LED相关的GPIO外设时钟
* 2、定义一个GPIO_InitTypeDef类型的结构体(定义一般放在首行)
* a、选择要控制的GPIO引脚
* b、设置引脚模式为通用推挽输出
* c、设置引脚速率为50MHz
* 3、调用库函数,初始化GPIO
* 4、设置高低电平
* a、(高电平)关闭所有led灯——GPIO_SetBits
* b、(低电平)打开所有led灯——GPIO_ResetBits
*/
//使能时钟,开启外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//配置端口模式
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
//调用库函数,初始化GPIO
GPIO_Init(GPIOB,&GPIO_InitStructure);
//设置高低电平
//高电平
// GPIO_SetBits(GPIOB,GPIO_Pin_5);
// GPIO_SetBits(GPIOB,GPIO_Pin_0);
// GPIO_SetBits(GPIOB,GPIO_Pin_1);
GPIO_SetBits_all();
//低电平
//GPIO_ResetBits(GPIOB,GPIO_Pin_5);
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
SOFT_DELAY;
// GPIO_SetBits(GPIOB,GPIO_Pin_5);
// GPIO_SetBits(GPIOB,GPIO_Pin_0);
// GPIO_SetBits(GPIOB,GPIO_Pin_1);
GPIO_SetBits_all();
//SOFT_DELAY;
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
SOFT_DELAY;
GPIO_SetBits_all();
//SOFT_DELAY;
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
SOFT_DELAY;
GPIO_SetBits_all();
//SOFT_DELAY;
}
}
void Delay(__IO uint32_t nCount) //简单的延时函数
{
for(; nCount != 0; nCount--);
}
void GPIO_SetBits_all(void){
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
GPIO_SetBits(GPIOB,GPIO_Pin_1);
}
二、野火的程序
新建了俩个文件,bsp_led.c和bsp_led.h
bsp_led.c
#include "bsp_led.h"
/**
* @brief 初始化控制LED的IO
* @param 无
* @retval 无
*/
void LED_GPIO_Config(void)
{
/*定义一个GPIO_InitTypeDef类型的结构体*/
GPIO_InitTypeDef GPIO_InitStructure;
/*开启LED相关的GPIO外设时钟*/
RCC_APB2PeriphClockCmd( LED1_GPIO_CLK | LED2_GPIO_CLK | LED3_GPIO_CLK, ENABLE);
/*选择要控制的GPIO引脚*/
GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;
/*设置引脚模式为通用推挽输出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
/*设置引脚速率为50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/*调用库函数,初始化GPIO*/
GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);
/*选择要控制的GPIO引脚*/
GPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN;
/*调用库函数,初始化GPIO*/
GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);
/*选择要控制的GPIO引脚*/
GPIO_InitStructure.GPIO_Pin = LED3_GPIO_PIN;
/*调用库函数,初始化GPIOF*/
GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure);
/* 关闭所有led灯 */
GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);
/* 关闭所有led灯 */
GPIO_SetBits(LED2_GPIO_PORT, LED2_GPIO_PIN);
/* 关闭所有led灯 */
GPIO_SetBits(LED3_GPIO_PORT, LED3_GPIO_PIN);
}
bsp_led.h
#ifndef __LED_H
#define __LED_H
#include "stm32f10x.h"
/* 定义LED连接的GPIO端口, 用户只需要修改下面的代码即可改变控制的LED引脚 */
// R-红色
#define LED1_GPIO_PORT GPIOB /* GPIO端口 */
#define LED1_GPIO_CLK RCC_APB2Periph_GPIOB /* GPIO端口时钟 */
#define LED1_GPIO_PIN GPIO_Pin_5 /* 连接到SCL时钟线的GPIO */
// G-绿色
#define LED2_GPIO_PORT GPIOB /* GPIO端口 */
#define LED2_GPIO_CLK RCC_APB2Periph_GPIOB /* GPIO端口时钟 */
#define LED2_GPIO_PIN GPIO_Pin_0 /* 连接到SCL时钟线的GPIO */
// B-蓝色
#define LED3_GPIO_PORT GPIOB /* GPIO端口 */
#define LED3_GPIO_CLK RCC_APB2Periph_GPIOB /* GPIO端口时钟 */
#define LED3_GPIO_PIN GPIO_Pin_1 /* 连接到SCL时钟线的GPIO */
/** the macro definition to trigger the led on or off
* 1 - off
*0 - on
*/
#define ON 0
#define OFF 1
/* 基本混色,后面高级用法使用PWM可混出全彩颜色,且效果更好 */
//红
#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);
#endif /* __LED_H */
main.c
#include "stm32f10x.h"
#include "bsp_led.h"
#define SOFT_DELAY Delay(0x0FFFFF);
void Delay(__IO u32 nCount);
/**
* @brief 主函数
* @param 无
* @retval 无
*/
int main(void)
{
/* LED 端口初始化 */
LED_GPIO_Config();
while (1)
{
LED1_ON; // 亮
SOFT_DELAY;
LED1_OFF; // 灭
LED2_ON; // 亮
SOFT_DELAY;
LED2_OFF; // 灭
LED3_ON; // 亮
SOFT_DELAY;
LED3_OFF; // 灭
/*轮流显示 红绿蓝黄紫青白 颜色*/
LED_RED;
SOFT_DELAY;
LED_GREEN;
SOFT_DELAY;
LED_BLUE;
SOFT_DELAY;
LED_YELLOW;
SOFT_DELAY;
LED_PURPLE;
SOFT_DELAY;
LED_CYAN;
SOFT_DELAY;
LED_WHITE;
SOFT_DELAY;
LED_RGBOFF;
SOFT_DELAY;
}
}
void Delay(__IO uint32_t nCount) //简单的延时函数
{
for(; nCount != 0; nCount--);
}