基于stm32f103c8标准库的流水灯设计

目录

一、功能实现及接线图

1.功能实现

2.接线图

二、代码详解

1.预处理命令:

2.启用GPIO时钟

3. 结构体函数

4.功能程序

三、完整程序及示例

1.完整程序

2.演示视频:


一、功能实现及接线图

1.功能实现

在STM32上配置GPIO引脚,然后通过循环控制这些引脚的状态,实现了LED1,LED2,LED3的接替闪烁效果 。

配置:stm32f103c8主芯片,Keil uVision5编程软件。

2.接线图

流水灯接线图

二、代码详解

1.预处理命令:

#include "stm32f10x.h"
#include "Delay.h"

int main(void)
{

#include "stm32f10x.h":这行代码告诉编译器在编译时要包含名为“stm32f10x.h”的头文件。在stm32的嵌入式开发中,通过包含这个头文件,我们可以访问和操作STM32微控制器的寄存器、宏定义等硬件功能。

#include "Delay.h":这行代码告诉编译器在编译程序时包含名为 "Delay.h" 的头文件。这个头文件是自定义头文件,包含与延时操作相关的函数。在嵌入式开发中,延时操作经常用于生成精确的时间间隔或控制外部设备的时序。

2.启用GPIO时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

启用GPIOA时钟的具体操作通常使用RCC_APB2PeriphClockCmd函数完成。

程序的意思是,启用GPIOA外设端口,便于后续程序使用GPIOA 0~15端口。

点击详细了解RCC模块的外设使能功能

3. 结构体函数

        GPIO_InitTypeDef GPIO_InitStructure;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3;
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitTypeDef 是一个结构体类型,用于配置STM32微控制器的GPIO(通用输入输出)端口的初始化参数。

4.功能程序

    GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0); // 将引脚0置低
    GPIO_WriteBit(GPIOA, GPIO_Pin_1 | GPIO_Pin_3, (BitAction)1);

令GPIOA的pin0输出状态为低电平(Bit_RESET或(BitAction)0),pin1和pin3的输出状态为高电平(Bit_SET或(BitAction)1).

完整功能代码:

     GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0); // 将引脚0置低
     GPIO_WriteBit(GPIOA, GPIO_Pin_1 | GPIO_Pin_3, (BitAction)1); // 将引脚1和3置高
     Delay_ms(1000); // 延时1秒
     GPIO_WriteBit(GPIOA, GPIO_Pin_1, (BitAction)0); // 将引脚1置低
     GPIO_WriteBit(GPIOA, GPIO_Pin_0 | GPIO_Pin_3, (BitAction)1); // 将引脚0和3置高
     Delay_ms(1000); // 延时1秒
     GPIO_WriteBit(GPIOA, GPIO_Pin_3, (BitAction)0); // 将引脚3置低
     GPIO_WriteBit(GPIOA, GPIO_Pin_1 | GPIO_Pin_0, (BitAction)1); // 将引脚1和0置高
     Delay_ms(1000); // 延时1秒

通过延时函数,GPIOA的pin0、pin1、pin3输出状态保持1s,1s后再次改变三个端口的输出状态。

pin0pin1pin3WLEDGLENDRLED
0~1s011
1~2s101
2~3s110

因GPIOA的pin0、pin1、pin3分别于WLED、GLEND、RLED的负极端连接,所以pin0、pin1、pin3分别输出低电平时,对应的led灯亮。

将完整程序写入死循环,可以实现流水灯的最终状态了。

三、完整程序及示例

1.完整程序

#include "stm32f10x.h"
#include "Delay.h"

int main(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 启用GPIOA时钟

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 设置GPIO引脚为推挽输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3; // 设置GPIO引脚0、1和3
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置GPIO输出速度为50MHz
    GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIOA

    GPIO_WriteBit(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3, (BitAction)0); // 将引脚0、1和3置低

    while (1)
    {
        GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0); // 将引脚0置低
        GPIO_WriteBit(GPIOA, GPIO_Pin_1 | GPIO_Pin_3, (BitAction)1); // 将引脚1和3置高
        Delay_ms(1000); // 延时1秒
        GPIO_WriteBit(GPIOA, GPIO_Pin_1, (BitAction)0); // 将引脚1置低
        GPIO_WriteBit(GPIOA, GPIO_Pin_0 | GPIO_Pin_3, (BitAction)1); // 将引脚0和3置高
        Delay_ms(1000); // 延时1秒
        GPIO_WriteBit(GPIOA, GPIO_Pin_3, (BitAction)0); // 将引脚3置低
        GPIO_WriteBit(GPIOA, GPIO_Pin_1 | GPIO_Pin_0, (BitAction)1); // 将引脚1和0置高
        Delay_ms(1000); // 延时1秒
    }
}

2.演示视频:

流水灯演示视频

写在后面:

可以根据需求,增加LED灯的数量,代码的编写与上示原理一样。

延时函数资料:(转载)

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值