LED流水灯实验2

一、实验目的 二、创建工程 三、编写代码 四、总结

一.实验目的分析:

要在实验1的基础上使用标准外设库来控制多个LED灯,让它们交替闪烁,每个LED灯亮起和熄灭的周期为1秒。以下是具体步骤:

  1. 创建一个新的工程项目文件夹,并确保你已经添加了STM32标准外设库的相关文件(.c和大.h文件)。
  2. 在代码中,LED灯的亮/灭周期是通过软件中的循环延时来控制的。但是要注意,这个准确的周期可能会受到处理器性能和其他代码执行的影响。如果没有示波器,你可以使用Keil的软件仿真逻辑分析仪来观察GPIO端口的时序波形。
  3. 使用软件仿真逻辑分析仪来观察GPIO端口的输出波形,以确保时序状态正确,高低电平转换周期(LED闪烁周期)实际为1秒。
    这样就可以在没有示波器的情况下,使用Keil的工具来动态跟踪调试代码并确定LED灯的闪烁周期。

二.创建工程

创建新工程如图所示:

在这里插入图片描述

给工程起名

在这里插入图片描述

                                                   根据自己的芯片选择设备参数

在这里插入图片描述

生成新文件

启动代码在硬件相关方面发挥关键作用,它主要执行以下任务:

  1. 初始化堆栈指针(SP)。
  2. 初始化程序计数器(PC)。
  3. 设置向量表,用于处理异常事件的入口地址。
  4. 最终调用主程序的main函数来启动应用。
    在针对不同的STM32微控制器产品,标准库的启动文件分为三种类型,具体为:
    - `startup_stm32f10x_ld.s` 适用于小容量产品,其中小容量定义为FLASH容量≤32K。
    - `startup_stm32f10x_md.s` 适用于中等容量产品,中容量定义为64K≤FLASH≤128K。
    - `startup_stm32f10x_hd.s` 适用于大容量产品,大容量定义为256K≤FLASH。
    在本例中,作者提到使用的芯片型号是STM32F103ZEC8T6,这是一个64K容量的微控制器,因此需要选择中容量版本的启动文件:`startup_stm32f10x_md.s`。

在这里插入图片描述

添加完START分组之后添加工程所需代码文件:

在这里插入图片描述
在这里插入图片描述

等等一系列文件…

达到如下图所示的效果即可:

在这里插入图片描述

三.MDK环境配置编译

配置路径文件路径:

在这里插入图片描述

配置成功:

在这里插入图片描述

在创建一个函数进行测试

在这里插入图片描述

在这里插入图片描述

编译未报错,即代表成功。

四.编写源代码

这个工程代码编写思路在于:

流水灯的实现思路是,从PA0开始,点亮该端口,然后延时一段时间,接着熄灭所有灯。随后,点亮PA1端口,再次延时,然后熄灭所有灯。这个过程不断重复,逐渐向右移动,直到PA7端口点亮。然后再次延时,循环回到PA0,一直保持重复这个流水灯效果。

首先是端口初始化代码:

#include "led.h"  
void GPIOA\_Init()  
{  
    RCC\_APB2PeriphClockCmd(RCC\_APB2Periph\_GPIOA,ENABLE);//APB2 GPIOA时钟使能  
   GPIO\_InitTypeDef GPIOA\_Structure;//创建CPIO结构体  
  GPIOA\_Structure.GPIO\_Pin=GPIO\_Pin\_All; //所有端口  
  GPIOA\_Structure.GPIO\_Mode=GPIO\_Mode\_Out\_PP;//推挽输出  
  GPIOA\_Structure.GPIO\_Speed=GPIO\_Speed\_50MHz;//输出速度为50Mhz  
    GPIO\_Init(GPIOA,&GPIOA\_Structure);//将GPIOA所有端口设置为50Mhz的推挽输出模式  
}  
 

其次再是主函数代码:

#include "stm32f10x.h"  
#include "led.h"  
void delay(unsigned int  time)//软件延时  
{  
 unsigned int i=0;  
while(time--)  
{  
   i=12000;  
   while(i--);  
}  
}  
   
int main()  
{  
  GPIOA\_Init();//初始化端口  
  
while(1)  
{  
  GPIO\_ResetBits(GPIOA,GPIO\_Pin\_All);//全部为0  
GPIO\_SetBits(GPIOA,GPIO\_Pin\_0); //PA0为1  
GPIO\_SetBits(GPIOA,GPIO\_Pin\_0); //PA0为1  
  delay(800);//延时  
GPIO\_ResetBits(GPIOA,GPIO\_Pin\_All);//全部为0  
GPIO\_SetBits(GPIOA,GPIO\_Pin\_1); //PA1为1  
delay(800);//延时  
GPIO\_ResetBits(GPIOA,GPIO\_Pin\_All);//全部为0  
GPIO\_SetBits(GPIOA,GPIO\_Pin\_2); //PA2为1  
delay(800);//延时  
GPIO\_ResetBits(GPIOA,GPIO\_Pin\_All);//全部为0  
GPIO\_SetBits(GPIOA,GPIO\_Pin\_3); //PA3为1  
delay(800);//延时  
GPIO\_ResetBits(GPIOA,GPIO\_Pin\_All);//全部为0  
GPIO\_SetBits(GPIOA,GPIO\_Pin\_4); //PA4为1  
delay(800);//延时  
GPIO\_ResetBits(GPIOA,GPIO\_Pin\_All);//全部为0  
GPIO\_SetBits(GPIOA,GPIO\_Pin\_5); //PA5为1  
delay(800);//延时  
GPIO\_ResetBits(GPIOA,GPIO\_Pin\_All);//全部为0  
GPIO\_SetBits(GPIOA,GPIO\_Pin\_6); //PA6为1  
delay(800);//延时  
GPIO\_ResetBits(GPIOA,GPIO\_Pin\_All);//全部为0  
GPIO\_SetBits(GPIOA,GPIO\_Pin\_7); //PA7为1  
delay(800);//延时  
}  
}

五.实物效果展示:

六.总结

   此次试验使用STM32微控制器开发板,使LED连接到正确的GPIO引脚。完成了使用循环来实现LED流水灯效果,逐个点亮LED并延时一段时间,再熄灭LED。移动到下一个LED,重复上述步骤。这个流程循环进行,创建了LED流水灯效果。  
   在实验中,成功实现了基于STM32固件库的LED流水灯效果。了解了初始化系统和GPIO配置的基本步骤。体验了如何使用循环来控制LED的点亮和熄灭,创建了视觉效果。  
    这个实验有助于初学者熟悉STM32的基本开发流程,包括硬件准备、工程创建、代码编写、编译、烧录和调试。同时,通过LED流水灯的实现,加深了对GPIO控制的理解。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真的是aaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值