既然是通过库来操作这些GPIO,那么我们就得对库函数有所了解。在3.5的库中,有一个初始化的函数GPIO_Init(GPIO_TypeDef*
GPIOx, GPIO_InitTypeDef* GPIO_InitStruct
),可以通过这个函数对GPIO进行初始化。我们可以看到,在这个函数中,有一个形参类型是GPIO_InitTypeDef,这个类型事实上是一个结构体类型,这个类型的原型就是:typedef struct{
uint16_t GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; }GPIO_InitTypeDef; 通过这个结构体原型我们可以看出,GPIO_InitTypeDefy这个结构体有三个参数
GPIO_Pin; 用来设置要选择的Pin口。
GPIO_Speed; 用来设置IO的速率。
GPIO_Mode; 用来选择要设置的IO模式。
需要对这个结构体的三个属性进行设置
例:
void LED_Init (){
GPIO_InitTypeDef GPIO_InitStructure;
SystemInit(); //系统时钟初始化
RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOC, ENALBE );
//配置GPIO的模式和IO口
GPIO_InitStructure.GPIO_Pin = LED;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO速率
GPIO_Init ( GPIOC, &GPIO_InitStructure ); //GPIO初始化
}
当有了这个LED初始化函数之后,我们只要在写一个闪烁函数就行了。所谓闪烁,其实就是LED亮一段时间,LED灭一段时间,这个步骤不断重复。LED亮其实就是给二极管阴极一个低电平,LED灭其实就是给二极管阴极一个高电平。那么,代码如下:
void led_display(){
GPIO_SetBits ( GPIOC, LED );
delay ( 6000000 ); //约为1s
GPIO_ResetBits ( GPIOC, LED );
delay ( 6000000 ); //约为1s
}
``此刻添加一个主函数就可以调用了
```cpp
#include "stm32f01x.h"
#include "led.h"
int main()
{
LED_Init();
while ( 1 ){
led_display();
}
}`
这就是最简单的实现led灯的亮灭。