一、前言

承接上一篇单LED闪烁实验,今天在原有工程基础上修改代码,实现流水灯效果。
目前我依旧是刚入门阶段,不会复杂封装和工程分层,所有代码直接写在main.c里,写法直白简单,用来巩固多GPIO引脚同时控制的知识点。自身基础薄弱,文中有错误欢迎各位大佬指正。

二、实验目标

  1. 掌握同时配置多个GPIO输出引脚;
  2. 学会通过循环实现灯光依次点亮、流动的流水效果;
  3. 对比单灯闪烁,理解批量控制引脚的思路。

三、本地工程真实结构

使用文件夹内 [1-2]LED流水灯 工程,目录结构和上次点灯完全一致,没有额外Hardware驱动文件夹:

  1. Start:芯片底层启动文件,无需修改;
  2. Library:STM32标准外设库;
  3. System:系统时钟、毫秒延时函数;
  4. User:唯一编写主程序main.c的目录,所有逻辑直接写在这里。

四、硬件简单说明

  1. 开发板4路LED分别接 PC13、PC14、PC15、PB0 引脚;
  2. 引脚输出低电平LED点亮,高电平熄灭;
  3. 每一路LED都串联220Ω限流电阻,防止电流过大烧毁灯珠。

五、完整基础代码

#include "stm32f10x.h"                  // Device header
#include"delay.h"
	int main()
{
			RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
			GPIO_InitTypeDef GPIO_InitStruct;
			GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP ;
			GPIO_InitStruct.GPIO_Pin=GPIO_Pin_All;
			GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
			GPIO_Init(GPIOA,&GPIO_InitStruct);
		while(1)
		{
			GPIO_Write(GPIOA,~0x0001);//0000 0000 0000 0001
			Delay_ms(500);
			GPIO_Write(GPIOA,~0x0002);//0000 0000 0000 0010
			Delay_ms(500);
			GPIO_Write(GPIOA,~0x0004);//0000 0000 0000 0100
			Delay_ms(500);
			GPIO_Write(GPIOA,~0x0008);//0000 0000 0000 1000
			Delay_ms(500);

		}
}

六、粗浅学习感悟

1. 控制多个端口时,开启时钟可以用 | 符号一次性开启多个外设时钟,不用重复写函数;

2. 同一个端口多个引脚,同样能用 | 拼接在一起统一初始化,简化代码;

3. 流水灯最基础写法就是逐个点亮、延时、熄灭,逻辑很好理解;

4. 现在这种逐行写法比较繁琐,后续学会数组和循环后可以简化代码。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐