用库函数使三个灯成为流水灯
新建Hardware文件夹,后续需要用到的外设.h .c文件都放里面,这里创建led.c和led.h
野火哥在单个点灯中说,将各个部分宏定义,能够方便移植和后续修改,但多个灯时他的定义方式我觉得会打乱我的思绪,于是删除了端口以及引脚的宏定义
led.h文件
#ifndef __LED_H
#define __LED_H
#include "stm32f10x.h"
#define LED_GPIO_CLK RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA
void LED_GPIO_Config(void);
#endif
led.c文件
#include "led.h"
void LED_GPIO_Config(void)
{
RCC_APB2PeriphClockCmd(LED_GPIO_CLK,ENABLE);
GPIO_InitTypeDef GPIO_Initstructure;
GPIO_Initstructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_4|GPIO_Pin_5;
GPIO_Initstructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_Initstructure);
GPIO_Init(GPIOB,&GPIO_Initstructure);
}
注:和江科大的视频不同,GPIO配置是直接在led.c文件中写的,能够使main.c更简洁
main.c
#include "stm32f10x.h" // Device header
#include "led.h"
void Delay(uint32_t count)
{
for(;count!=0;count--);
}
int main(void)
{
LED_GPIO_Config();
while(1)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
Delay(0xFFFFF);
GPIO_SetBits(GPIOB, GPIO_Pin_0);
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
Delay(0xFFFFF);
GPIO_SetBits(GPIOB, GPIO_Pin_5);
GPIO_ResetBits(GPIOA, GPIO_Pin_4);
Delay(0xFFFFF);
GPIO_SetBits(GPIOA, GPIO_Pin_4);
}
}
现象
并未完美实现流水灯,一开始是全亮状态,应该是刚配置文件后,默认全为0,然后才开始循环实现逐个熄灭,然后才能实现流水,但延时只要足够时间短,就无法观测到