LED流水灯实验是基于江协科技STM32的HAL库工程模板创建的(可以在作品“基于江科大STM32创建的HAL库工程模板”中的结尾处获取工程模板的百度网盘链接)
复制“配置时钟与LED闪烁”的工程文件——“3-1 LED闪烁”,并命名为“3-2 LED流水灯 ”。打开工程,把下面的程序复制到相应的文件中去。
main.c
#include "stm32f1xx_hal.h" // Device header
#include "LED.h"
int main()
{
HAL_Init(); // 初始化HAL库
LED_Init(); // 初始化LED
SystemClock_Config(RCC_PLL_MUL9);
while(1)
{
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_0,GPIO_PIN_SET);//0000 0000 0000 0001
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_1,GPIO_PIN_SET);//0000 0000 0000 0010
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_1,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_2,GPIO_PIN_SET);//0000 0000 0000 0100
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_2,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_3,GPIO_PIN_SET);//0000 0000 0000 1000
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_3,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_4,GPIO_PIN_SET);//0000 0000 0001 0000
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_4,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_5,GPIO_PIN_SET);//0000 0000 0010 0000
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_5,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_6,GPIO_PIN_SET);//0000 0000 0100 0000
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_6,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_7,GPIO_PIN_SET);//0000 0000 1000 0000
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA,~GPIO_PIN_7,GPIO_PIN_RESET);
}
}
LED.c
#include "stm32f1xx_hal.h" // Device header
void LED_Init(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.Pin=GPIO_PIN_All;
GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.Pull=GPIO_NOPULL;
GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
}
LED.h
#ifndef __LED_H__
#define __LED_H__
void LED_Init(void);
#endif
接线图如下: