【STM32F429单片机学习】单片机学习之LED跑马灯实验
LED跑马灯实验文件组成
一、LED.c(GPIO口的初始化、LED灯的基本功能)
分析代码(颜色一样的为一步)
首先引入头文件
#include "led.h"
引入了头文件的一些声明变量后 ,定义LED初始化其实就是初始化GPIO口+LED的基本功能
void LED_Init(void)
{
定义一个结构体,后续当HAL库函数初始化GPIO中的参数(函数的传参要求)
GPIO_InitTypeDef GPIO_Initure;
使用任何IO口都要打开其时钟,此代码为打开B这个一群IO的时钟
__HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOB时钟
在时钟打开后,我们要接下来要对IO口的输出模式、速度等进行设定
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //PB1,0
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
对LED功能进行简单设置,其实就给IO配置高低电平,HAL_GPIO_WritePin与HAL_GPIO_ReadPin相对,一个是写 一个是读取,此函数需要三个参数,前两个为指针型的表示哪个IO口,然后次IO口的第几个,最后一个有两种状态分别是set reset表示高与低
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); //PB0置1,默认初始化后灯灭
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); //PB1置1,默认初始化后灯灭
}
注:灯不一定高电平有效 也不一定低电平有效 还是需要看怎么接的 到底是上拉 还是下拉
二、LED.h(声明)
.h的保护代码,目的是让.h文件包含一次,防止编译报错
#ifndef _LED_H
#define _LED_H
#include "sys.h"
定义宏 让PBOUT的值传递给LED0与1
#define LED0 PBout(1) //LED0
#define LED1 PBout(0) //LED1
声明.c文件中的函数
void LED_Init(void);
#endif
三、main.c(主函数)
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
定义主函数
int main(void)
{
在主函数中调用你需要的函数(函数从.c文件定义,.h文件声明)
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz
delay_init(180); //初始化延时函数
LED_Init(); //初始化LED
构造一个死循环
while(1)
{
通过HAL_GPIO_WritePin对I配置电平,来到LED一闪一灭的功能
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); //LED0对应引脚PB1拉低,亮,等同于LED0(0)
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); //LED1对应引脚PB0拉高,灭,等同于LED1(1)
delay_ms(500); //延时500ms
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); //LED0对应引脚PB1拉高,灭,等同于LED0(1)
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET); //LED1对应引脚PB0拉低,亮,等同于LED1(0)
delay_ms(500);
}
}