基于HAL库的LED流水灯

一.搭建STM32的开发环境

1.安装jdk

因为STM32CubeMX是Java实现的,所以说是需要安装jdk环境的。

官网下载地址:

Java Downloads | Oracle

2.安装STM32CubeMX

官网下载地址:

STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics

3.STM32CubeMX安装过程:

首先进入安装初始界面:点击Next

勾选接受,然后点击Next

勾选I have read ...... ,然后点击Next

然后选择安装路径,记住不要在安装路径中出现中文,然后点击Next

点击Next

安装完成过后点击Next

点击Done就完成安装了


安装固件库
运行CubeMX 6.9.2,选择 Help

点击 Manage embedded software packages

选择适合自己芯片的固件库,本次流水灯实验我使用的是stm32f103c8t6,所以我选择STM32F1

然后再点击STM32F1勾选第一个开始下载

此时可能会显示下载不成功,注册账号后登录就可以下载了

进入了下载界面,等待下载即可

可以看出下载成功了已经

二.  新建工程,配置环境,生成KEIL代码

1.创建新工程

点击File,然后再点击里面的New Project

然后选择芯片STM32F103C8T6

然后点击Start Project

进入配置界面

 2.端口配置
  2.1 GPIO配置

首先点击PA0-WKUP,然后将它设置为GPIO_Output,端口变为绿色就可以说明成功了。

然后用同样的方法将其他的PA1,PA2,PA3,PA4,PA5,PA6,PA7端口设置为GPIO-Output。

结果如下:

配置输出的速度和初始状态:

然后点击System Core,然后再勾选GPIO,然后开始配置

同样配置其他PA1-7就可以了

PB4配置为外部中断源

然后同样的方法配置PB4

2.2 RCC配置

2.3 SYS配置

2.4 NVIC中断优先级配置

勾选中断使能

3.时钟配置

4.工程管理

设置工程名字 LED

然后设置工程路径,注意路径里面不能有中文和空格

选择MDK-ARM,然后选择V5

然后再设置代码生成工具

然后在点击代码生成

  5.查看代码

三.添加流水灯和中断设置代码

1.任务要求

        PA0-7八个端口连接8个LED灯的阳极,LED灯阴极接地,那么端口输出高电平LED灯就亮,低电平灯就灭。加上HAL_Delay()函数进行延时,实现流水灯效果。此外,将PB4引脚用作外部中断源,低电平时候流水灯不工作。

2.添加流水灯代码
void LED_Turn()
{
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
	   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
		 HAL_Delay(1000);
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1,GPIO_PIN_SET);
		 HAL_Delay(1000);
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2,GPIO_PIN_SET);
		 HAL_Delay(1000);
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3,GPIO_PIN_SET);
		 HAL_Delay(1000);
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4,GPIO_PIN_SET);
		 HAL_Delay(1000);
	 	 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5,GPIO_PIN_SET);
		 HAL_Delay(1000);
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6,GPIO_PIN_SET);
		 HAL_Delay(1000);
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7,GPIO_PIN_SET);
		 HAL_Delay(1000);
}
3.添加中断代码

       这里我们首先讲解 STM32F1 IO 口中断的一些基础概念。 STM32F1 的每个 IO 都可以作为
外部中断的中断输入口,这点也是 STM32F1 的强大之处。 STM32F103 的中断控制器支持 19
个外部中断 / 事件请求。每个中断设有状态位,每个中断 / 事件都有独立的触发和屏蔽设置。

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  	if(GPIO_Pin==GPIO_PIN_4)
	{ 
		 if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_4)==GPIO_PIN_RESET)//ϽµÑØ
	      flag=0;
		 if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_4)==GPIO_PIN_SET) //ÉÏÉýÑØ
			 flag=1;//Á÷Ë®µÆ¹¤×÷
	}
	   
}

4.while(1)

while (1)
  {
   
   if(flag==1)
		{
		 LED_Turn();	 
		}
		if(flag==0)
		{
		 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
		}
   
  }

 四. 实验效果

4.1实物效果

4.2仿真查看波形

配置魔法棒

查看波形:

五. 总结

1、对比之前的固件库,使用HAL库相对来说,HAL库开发效率大幅度提高,只需要在stm32cubeMX的UI界面进行操作,很快的就能配置好所需内容,不需了解STM32的每个接口的具体信息,然后就可以更简单得到函数。

2、仿真结果,起始电平在1秒开始,结束时间约为2秒结束,时间差大约为1秒,完成任务。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值