1、前言
前面我们已经创建好工程了,下面开始单片机最经典的入门例程—《点灯大法》俗称灯光控制师。
但是大家也不要小看LED灯,这个如果深入的话也是非常高深的,会涉及到背光、RGB等……
但是今天我们难的不讲,就从最简单的入手,所以。
下面我们直接进入正题。
2、添加相关的标准库
在用标准库配置GPIO的时候,我们需要手动添加这个GPIO的库函数。
如下图的步骤所示添加,添加如第五步里面的几个库函数,如果看这个图还看不懂话请私聊我或者在下方的评论区评论留言。
3、GPIO配置参数的简单说明
在添加了相关的库函数之后我们可以去哪个stm32f10x_gpio.c的头文件stm32f10x_gpio.h中可以看到在STM32F103中的GPIO配置需要配置那些参数。
如图:
上图展示了需要配置这三个参数:
uint16_t GPIO_Pin
GPIOSpeed_TypeDef GPIO_Speed
GPIOMode_TypeDef GPIO_Mode
其中这三个参数是什么意思呢?
第一个是表示第几个引脚;
第二个表示引脚速度需要配置多少;如:
引脚速度需要多少可根据自己的需求配置。在本例子中为50Mhz
第三个表示引脚的模式是什么;如:
引脚模式是什么可根据自己的需求配置。在本例子中为推挽输出
知道了这些参数的意思后就我们就好开始配置了。
4、GPIO初始化程序
在上面介绍了GPIO配置的参数后我们可以开始编写GPIO初始化程序了。
void Led_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义一个需要配置的GPIO引脚结构体变量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//在使用那个GPIO引脚的前提下需要开启相关的时钟,这个很重要
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1; //LED灯的正极和单片机的引脚分别为PA0-1。
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //引脚模式配置为推挽输出模式。
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //引脚的输出速度为50M。
GPIO_Init(GPIOA,&GPIO_InitStructure); //配置好参数之后就开始初始化GPIO。
}
如上图为点亮LED的简单初始化。如果单单初始化你是不能控制LED的亮灭的。我们还需要编写控制引脚电平状态的函数。
5、GPIO电平的控制
如果想要控制GPIO的电平的话,我们还需要使用到相关的库函数,这个也是在stm32f10x_gpio.c中,如果想要查找的,去头文件比较方便。
下面我就不介绍了,反正就在这两个文件里面,下面我直接给出程序和注释。
#define LED1_ON GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET) //点亮LED1
#define LED1_OFF GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET) //熄灭LED1
#define LED2_ON GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET) //点亮LED2
#define LED2_OFF GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_SET) //熄灭LED2
这个实在头文件里面定义的,使用了宏定义做个简单替代,可以方便调用和直观明了。
6、主函数
int main()
{
Delay_Init(72);
Led_Init();
while(1)
{
LED1_ON;
delay_ms(1000);
LED1_OFF;
LED2_ON;
delay_ms(1000);
LED2_OFF;
delay_ms(1000);
}
}