基于HAL库的LED流水灯

目录

一、题目要求

二、过程呈现

1、使用HAL库完成LED流水灯

1)实验准备

2)创建项目

3)代码实现

4)硬件实现

2、LED流水灯实现keil仿真

1)基本配置

2)仿真实现

3)仿真结果分析

3、实现使用中断模式控制led流水灯

1)工程创建

2)代码实现

3)硬件实现

三、心得体会

四、参考网址


一、题目要求

1、基于HAL库的LED流水灯的硬件实现

了解并掌握STM32中断原理,HAL库函数开发方法。安装 stm32CubeMX,配合Keil,使用HAL库方式完成下列任务:

1)、重做上一个LED流水灯作业,即用GPIO端口完成3只LED红绿灯的周期闪烁。

2)、用stm32F103核心板的GPIOA端某一管脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED流水灯工作;接低电平时,LED流水灯停止工作。

2、 基于HAL库的LED流水灯的keil仿真

在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。请用此功能观察第1题中3个GPIO端口流水灯的输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

二、过程呈现

1、使用HAL库完成LED流水灯

1)实验准备

安装STM32CubeMX

我们可以到官网下载安装,通过这个网址https://www.st.com/en/development-tools/stm32cubemx.html?sc=stm32cubemx

下载完成后,我们可以以管理员身份运行安装,勾选相应选项后一直点击next即可完成安装,安装完成后界面如下所示

然后我们需要完成HAL库的安装,打开安装好的STM32CubeMx,点击HELP->Manage embedded software packages ,如下图所示

勾选上需要安装的HAL库, 点击“Install Now” 直到安装成功。 如下图

至此,创建项目前的实验准备完成,下面可以进行项目的创建

2)创建项目

进入stm32cubemx主界面,然后,点击access to mcu selector,如下图

左上角选择对应的芯片型号,这里选择的是STM32C8T6,如下图

双击芯片,进入配置界面,点击system core,进入SYS,在debug下选择serial wire

然后点击rcc,配置时钟,将hse选择为Crystal/Ceramic Resonator

点击 clock configuration,修改

点击gpio设置引脚,按设置为output

最终选取的引脚如下,

点击project manager,配置好自己的路径和项目名,然后IDE那项改为MDK-ARM

进入 code generate界面,选择生成初始化.c/.h文件,后面点击generate code,选择open project

然后就可以在keil中打开了

3)代码实现

这里我在文件夹中打开生成的keil文件

打开后从左边窗口打开main.c文件

我们还需要编译main函数中while循环里面得内容,具体代码如下

        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4亮灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
		HAL_Delay(500);//延时0.5s
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
		HAL_Delay(500);//延时0.5s		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯
		HAL_Delay(500);//延时0.5s

这里将main.c文件中while循环的内容替换为上述代码

4)硬件实现

我们现在连接电路:
对于USB转TTL模块和stm32f103c8t6连接:
GND — GND
3v3 — 3v3
TXD — A10
RXD — A9

总电路:
红——B9
绿——C15
黄——A4

下面是我所连接的实物图

接下来,我们先编译keil文件,生成hex文件,

如左下角所示,文件已生成。然后我们就可以进行烧录了,打开flymcu,添加文件

点击开始编程即可,最终实现效果如下

2、LED流水灯实现keil仿真

1)基本配置

我们先要对keil软件进行配置,点击魔法棒图标,点击target,将晶振按如下设置

点击debug,勾选use simulater,将最下面的方框修改为自己的芯片型号,如下

配置完成

2)仿真实现

点击放大镜进入仿真界面,然后点击逻辑分析仪

然后我们点击setup设置引脚相关信息,

这里要将display type设置为bit,颜色设置自己所连接的,完毕后点击close,然后开始仿真

最终仿真效果如下

3)仿真结果分析

我们先看进入低电平的时间,

然后是离开低电平的时间

我们要知道,所设置的延时为0.5s,仿真结果是10.02025-9.519256=0.50099,可以看出与我们所设置的延时相差无几

同时,如下图。我们可以知道,先是黄灯进入高电平,然后是红灯,最后是绿灯,这与我们所设置的也是符合的

3、实现使用中断模式控制led流水灯

1)工程创建

进入stm32cubemx主界面,然后,点击access to mcu selector,如下图

左上角选择对应的芯片型号,我这里选择的是STM32C8T6,如下图

双击芯片,进入配置界面,点击system core,进入SYS,在debug下选择serial wire

然后点击rcc,配置时钟,将hse选择为Crystal/Ceramic Resonator

点击 clock configuration,修改时钟,我们需要做出对应修改,如下图所示

然后仍然是选择GPIO接口,这里选择于前面流水的的引脚一样,即

进入Project Manager(工程管理),进行工程设置点击生成工程与代码:

然后,我们就可以生成代码了。我们可以直接选择打开生成的keil文件,也可以从保存的文件路径找到打开

2)代码实现

打开keil文件,找到gpio.c,我们要做出修改,设置为高电平,不初始化三个灯均不亮,如下

然后,我们要找到main.c文件,在主函数前面编写一个中断函数,具体代码如下所示

uint32_t flag=0;//自定义中断标识符号
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
  if(GPIO_Pin == STOP_Pin){
      //获取B5的电位
     GPIO_PinState pinState = HAL_GPIO_ReadPin(STOP_GPIO_Port,STOP_Pin);
 
      //高电位
      if(pinState==GPIO_PIN_SET)//PB5高电位流水灯亮
      {
		  flag=1;//PB5高电位标识
	  }
      //低电位
      else if(pinState==GPIO_PIN_RESET)//PB5低电位流水灯灭
	  {
		  flag=0;//PB5低电位标识
	  }
      } 
   }

文件修改如下

接下来编写主函数内容,具体代码为

	  if(flag==1)
	  {
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4亮灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
		HAL_Delay(100);//延时0.1s
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
		HAL_Delay(100);//延时0.1s		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯
		HAL_Delay(100);//延时0.1s
		  
	  }
	  if(flag==0)
	  {
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
	  }

我们要将该代码编写在主函数while循环中,即

3)硬件实现

电路连接同上,编译keil文件生成hex文件,显示0错误0警告且生成了hex文件即可,如下

打开flymcu软件进行烧录,将刚才编译生成的hex文件添加编程即可

点击开始编程即可

最终实践效果如下

三、心得体会

      这次实验对自身的能力要求还是有些高,我自己在完成实验时遇到了很多的问题,自己要解决,还是必须要参考相关资料文章才可以勉强完成,特别是后面的实验中断函数控制led流水灯,还是要寻求同学的帮助,希望下次实验可以做的更好。

四、参考网址

https://blog.csdn.net/weixin_56102526/article/details/120877293

https://blog.csdn.net/qq_43279579/article/details/112213196

https://blog.csdn.net/ssj925319/article/details/111984002

https://blog.csdn.net/qq_47281915/article/details/121024427

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值