一,首先我们需要在工程目录下添加一个PROGREAM(根据自己喜欢命名)文件夹,并且在该文件夹下面建立子文件夹1_LED,然后在1_LED下面新建led.c和led.h文件,将led.c和led.h加入到工程中,记得要将1_LED加入到头文件路径path中,在上一个笔记中有详细介绍,忘记的话可以回过去看一下。
二,编写led.c和led.h文件
1,led.h:
#ifndef __LED_H
#define __LED_H
void LED_Init(void);//函数声明
#endif
2,led.c:
操作任意一个IO口的步骤为:
(1)使能IO口时钟,调用函数RCC_APB2PeriphColckCmd();
(2)初始化IO口模式,调用函数GPIO_Iint();
(3)操作IO口,输出高低电平。
具体操作:
1)根据开发板原理图可知 ,LED0和LED1分别接在开发板的PB5和PE5上,所以我们要先使能PB5和PE5时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOB
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//GPIOE
2) 使能IO组之后,需要先定义对应的结构体,再设置对应的引脚号、模式和速度,最后设置IO口输出电平:
GPIO_InitTypeDef GPIO_InitStr;//定义GPIO_Init结构体
GPIO_InitStr.GPIO_Mode=GPIO_Mode_Out_PP;//设置为推挽输出
GPIO_InitStr.GPIO_Pin=GPIO_Pin_5;//设置PB5
GPIO_InitStr.GPIO_Speed=GPIO_Speed_50MHz;//设置速度为50Mhz
GPIO_Init(GPIOB,&GPIO_InitStr);//初始化PB
GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5输出高电平
//同PB5
GPIO_InitStr.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStr.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStr.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStr);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
3)led.c的全部代码:
#include"led.h"
#include"stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStr;//定义GPIO_Init结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOB
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//GPIOE
GPIO_InitStr.GPIO_Mode=GPIO_Mode_Out_PP;//设置为推挽输出
GPIO_InitStr.GPIO_Pin=GPIO_Pin_5;//设置PB5
GPIO_InitStr.GPIO_Speed=GPIO_Speed_50MHz;//设置速度为50Mhz
GPIO_Init(GPIOB,&GPIO_InitStr);//初始化PB
GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5输出高电平
//同PB5
GPIO_InitStr.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStr.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStr.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStr);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
}
三,main函数:
#include"stm32f10x.h"
#include"led.h"
#include"delay.h"
int main(void)
{
delay_init();
LED_Init();
while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
delay_ms(500);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);
}
}