实现的功能
- 点亮LED灯
- 使得开发板上的两个LED交替闪烁
STM32IO口简介
要使得LED被点亮,根据LED的性质来说,肯定是要通过控制高低电平的输出,进而控制LED的亮灭。而要控制电平就是要控制IO的输出电平,对此我们需要对IO口进行设置。GPIO中有很多中模式,但对于其他模式,我们需要用的时候再去了解,对此我们目前只需要实现点灯这个功能就好了,也就是目前掌握控制GPIO高低电平输出就可以了。
有关GPIO的库函数在‘stm32f10x_gpio.h,stm32f10x_gpio.c’之中。
硬件设计
我们先看一下硬件需要做些什么,在工程中也是如此,我们想好了要什么功能之后我们就要对硬件进行设计,要考虑清楚实现功能的硬件条件
硬件条件
- 开发板上的两个LED灯
- stm32的两个IO口
电路图
这个开发板上直接将PD2与LED1连接,PA8与LED0进行连接。
根据这个二极管的电平我们可以知道,我们要输出低电平就能够使得LED点亮,对此我们接下来就是对GPIO的软件设置进行讲解。
软件设计
了解库函数
我们可以打开‘stm32f10x_gpio.h,stm32f10x_gpio.c’中去进行查看。在这个.c文件中是GPIO中的一些对于寄存器编程的封装函数我们并不需要全部掌握。最好的方法就是直接查看.h文件中的关于函数的声明,去阅读其中的函数,在这里如果我们英文水平可以看懂这些函数的意义那么对于我们日后的学习和工作来说会简单许多,其实就像是直接阅读工具的使用说明书一样,我们需要用什么就可以去进行使用。对应的函数如下,
对于stm32来讲,使用任何一个功能都要对其中的内部功能进行初始化,即激活该模块,比如我们现在要使用IO口我们就需要对GPIO进行一个初始化。
这里我们找到其中函数,在351行中有一个函数。
GPIO_Init
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
我们要对这个函数进行初始化设置,其中这个函数中一些参量我们需要了解其中含义。
GPIO_TypeDef* GPIOx ——其中GPIO_TypeDef* 是一个结构体其中具体内容我们不需要进行掌握,是一些GPIO寄存器的封装,而我们只需要关注GPIOx这个的含义是我们对哪一个GPIO进行配置,其中的X我们进行设置,在这里我们可以设置为“A or B or C or D”具体的使用我们后面用到的时候再进行讲述。
GPIO_InitTypeDef* GPIO_InitStruct——其中GPIO_InitTypeDef*是我们需要重点关注的,它是对于我们想要功能的结构体设置(设置如下代码),而GPIO_InitStruct是我们自己定义的一个结构体。
typedef struct
{
uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define “那个引脚”*/
GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef “GPIO的速度是多少” */
GPIOMode_TypeDef GPIO_Mode