固件库实现流水灯,原来的作业只是点亮绿灯,为了方便对比,我把程序贴上来:
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);
}
}
这样下来的结果就是只有蓝色灯亮 |