1. Primero, necesitamos agregar una carpeta PROGREAM (nombrada según nuestra preferencia) en el directorio del proyecto, y crear una subcarpeta 1_LED debajo de esta carpeta, y luego crear archivos led.c y led.h debajo de 1_LED, y convertir led. c y led.h se añaden al proyecto. Recuerda añadir 1_LED a la ruta del archivo de cabecera. Está descrito en detalle en la nota anterior. Si lo olvidas, puedes volver atrás y mirarlo.
Dos, escribir archivos led.c y led.h
1, led.h:
#ifndef __LED_H
#define __LED_H
void LED_Init(void);//函数声明
#endif
2, led.c:
Los pasos para operar cualquier puerto IO son:
(1) Habilite el reloj del puerto IO y llame a la función RCC_APB2PeriphColckCmd();
(2) Inicialice el modo de puerto IO y llame a la función GPIO_Iint();
(3) Opere el puerto IO para generar niveles altos y bajos.
Operación específica:
1) De acuerdo con el diagrama esquemático de la placa de desarrollo, LED0 y LED1 están conectados respectivamente a PB5 y PE5 de la placa de desarrollo, por lo que primero debemos habilitar los relojes de PB5 y PE5:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOB
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//GPIOE
2) Después de habilitar el grupo IO, primero debe definir la estructura correspondiente, luego establecer el número de pin, el modo y la velocidad correspondientes, y finalmente establecer el nivel de salida del puerto 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) Todo el código de 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);
}
Tres, la función principal:
#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);
}
}