基于STM32单片机LED点亮流水灯的简单实现

要想控制LED的亮灭,首先根据硬件原理图得知控制LED的引脚为哪些。随后在STM32中配置相应引脚为输出,相关其他通用配置完成后在Keil中编写相应亮灭方法代码。代码编译通过,最后将程序烧录进硬件设备,调试并观察现象。

以stm32f103vet6为例,实现LED单个依次点亮,8个LED灯从2端依次点亮再从中心依次熄灭步骤如下:

1.配置STM32CubeMx工程

新建一个project

a028c559eea5494fbe84fb444684e980.png

选择自己需要的型号,这里以stm32f103vet6为例

877eed03df6949ac8478c375c3aad241.png

配置引脚的SYS

0524611a8dd0480fa17917dd7596839f.png

 配置引脚的RCC

51348737fe5c4a528f68796156afa9db.png查看自己硬件的原理图,查阅LED对应的引脚。

如下LED流水灯的引脚为PC4、PC5、PB0、PB1、PD5、PD6、PD7、PB4。遂在STM32Cube中设置引脚PC4、PC5、PB0、PB1、PD5、PD6、PD7、PB4为GPIO_Output。

为方便使用逐一将其重命名为LED1、LED2、LED3、LED4、LED5、LED6、LED7、LED8

8fe60ef00b2b4da0889be7fc2c66c688.png

 0dcbfb53dea24bbcbca97cea93a300a5.png

进行时钟配置

7a94bef47d5e460cadc7e0c2aaf0c706.png

进行工程管理配置(合理安排自己工程文件夹位置,另可为自己的工程取一个有意义的英文名称)

889c95cc716543bf97f28fbf9d6c4cdc.png

点击生成代码

c48a8606bb5e495bbf16f3734b4502cf.png可点击Open Project打开新生成的工程,至此STM32工程配置完毕,此后将进入Keil

d3f2b2e91b6b407c8c6a662d2353e34c.png

 2.Keil相关

可先进行编译一下

b72ba85b37824c338ea3c4416d23ceb8.png

 打开自己工程文件夹存放的位置,新建一个文件夹,可命名为led

1c9d4ae207b643948b34e041fe36e50e.png

新建文件

9ed6fb6ebe5d482db35b4dc7ac1ccbb3.png

 新建的文件中写入

#ifndef__LED_H__

#define__LED_H__

#include"main.h"

 

#endif

保存

f844371f587b4ca6b9b3375c14dfc2ef.png

 选择将其命名为led.h保存至事先准备好的led文件夹中

bfac68b4f9fc401cb74878bf7e3750d2.png

f45470b47a464559bda4d5c1e5ec2ba4.png

打开main.c文件,在/*USER CODE BEGIN Includes*/后写入

#include"led.h"

d1d5e011427545259509f4e3a10eecd1.png

 因路径问题(未发现此文件)此处报错,遂添加该路径

点击Project→Options for Target

27de9361e34a40aaaa5f049f69f668e1.png

 点击C/C++,点击Include Paths后的...

8dd1081bbbda48b0a0c87e5835397ccb.png

 添加新路径

c3488bfa8544475ba3348667184882e5.png

 点击...

9be09f0eb46e4e9c9cad336109d51d74.png

 选择led文件夹

2b2892ec2fbd4e8d90b92af17b127318.png

 点击OK

77343e4a7a4541068bdf6d3f90e5252a.png

946b1544605a4b72b80ec67307459b53.png 添加路径后将不再报错

ceded671775440deb24e9e32b0d4a24e.png

点亮LED及其流水灯核心代码

新建文件

988b8450f5fa4c21855160a099b27c3f.png

 保存至led文件夹为led.c

30f6541518d44d53b8eaa38c2ad4a385.png

 在led.c文件中写入

#include"led.h"

76e2464911d3429b88d79b483689a35f.png

将led.c文件添加进工程目录,右击Application/User/Core→点击Add Existing Files...→选择led.c文件,点击Add

3770f024cbb14a38a7d6f98e01cda3c6.png

04d9126e38194533be7707d5cb10a075.png在led.h文件中定义函数

voidLEDShunxuOnOff(void);//实现LED的单个依次点亮

 aa905e8cdac742da8e60af85b2eb9023.png

在led.c中写入函数具体功能

349f492463bf41d29e1163b2168ab897.png

 LEDShunxuOnOff( )实现LED的单个依次点亮,此为超基础版,可使用define简化

voidLEDShunxuOnOff(void)
{
HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);HAL_Delay(200);
HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);HAL_Delay(200);
HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET);HAL_Delay(200);
HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);HAL_Delay(200);
HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_SET);HAL_Delay(200);
HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_RESET);HAL_Delay(200);
HAL_GPIO_WritePin(LED4_GPIO_Port,LED4_Pin,GPIO_PIN_SET);HAL_Delay(200);
HAL_GPIO_WritePin(LED4_GPIO_Port,LED4_Pin,GPIO_PIN_RESET);HAL_Delay(200);
HAL_GPIO_WritePin(LED5_GPIO_Port,LED5_Pin,GPIO_PIN_SET);HAL_Delay(200);
HAL_GPIO_WritePin(LED5_GPIO_Port,LED5_Pin,GPIO_PIN_RESET);HAL_Delay(200);
HAL_GPIO_WritePin(LED6_GPIO_Port,LED6_Pin,GPIO_PIN_SET);HAL_Delay(200);
HAL_GPIO_WritePin(LED6_GPIO_Port,LED6_Pin,GPIO_PIN_RESET);HAL_Delay(200);
HAL_GPIO_WritePin(LED7_GPIO_Port,LED7_Pin,GPIO_PIN_SET);HAL_Delay(200);
HAL_GPIO_WritePin(LED7_GPIO_Port,LED7_Pin,GPIO_PIN_RESET);HAL_Delay(200);
HAL_GPIO_WritePin(LED8_GPIO_Port,LED8_Pin,GPIO_PIN_SET);HAL_Delay(200);
HAL_GPIO_WritePin(LED8_GPIO_Port,LED8_Pin,GPIO_PIN_RESET);HAL_Delay(200);
}

在mian.c文件中的while函数的中写入上方编辑的函数

dae60c5fc0664227b4602515fcf0a4d6.png

编译程序,若无错误,则可进行烧写

4371b74342244b229359fa8a7db1c999.png

连接硬件下载程序

3b32c047ca7d48b7957f9702240de6d1.png

dfb17d9eaa884415b21380ea509d9c6c.png

 调试观察现象

8494f570a20d4260815d4bf8a30f806a.png

另 LEDLiangDuanOnOff( )函数实现8个LED灯从2端依次点亮,从中心依次熄灭。操作与上同理,同样此为最基础版,可简化。

voidLEDLiangDuanOnOff(void)
{
HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED8_GPIO_Port,LED8_Pin,GPIO_PIN_SET);HAL_Delay(200);
HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED7_GPIO_Port,LED7_Pin,GPIO_PIN_SET);HAL_Delay(200);
HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED6_GPIO_Port,LED6_Pin,GPIO_PIN_SET);HAL_Delay(200);
HAL_GPIO_WritePin(LED4_GPIO_Port,LED4_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED5_GPIO_Port,LED5_Pin,GPIO_PIN_SET);HAL_Delay(200);
HAL_GPIO_WritePin(LED4_GPIO_Port,LED4_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED5_GPIO_Port,LED5_Pin,GPIO_PIN_RESET);HAL_Delay(200);
HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED6_GPIO_Port,LED6_Pin,GPIO_PIN_RESET);HAL_Delay(200);
HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED7_GPIO_Port,LED7_Pin,GPIO_PIN_RESET);HAL_Delay(200);
HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED8_GPIO_Port,LED8_Pin,GPIO_PIN_RESET);HAL_Delay(200);
}

 

 

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值