STM32F103ZET6学习笔记-跑马灯实验(库函数)

一,首先我们需要在工程目录下添加一个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);
	}
	
}

猜你喜欢

转载自blog.csdn.net/qq_63306482/article/details/126223428