第7周实验3--基于HAL库的LED流水灯

第7周实验3–基于HAL库的LED流水灯

一安装并且使用CUBEMX.

下载地址:https://www.st.com/content/st_com/zh/stm32cubemx.html

下载好后安装CUBEMX.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

点击NEXT.

在这里可以选择安装的位置,我在D盘创建了一个CUBEMX文件夹,然后将CUBEMX安装到里面。

在这里插入图片描述

选择DEFAULT,然后点击next。
在这里插入图片描述

等待安装

在这里插入图片描述

到这里我们就安装好了。

在这里插入图片描述

二。使用hal库制作流水灯

点击HELP 然后点击MANNAGE EMBEDDED SOFTWARE PACKAGE.然后点击INSTALL/REMOVE 安装hal库。
在这里插入图片描述
在这里插入图片描述

选择如下软件包进行下载,它会要求意法半导体官方账号账号,有的可以直接登录,没有的话可以利用邮箱注册一个。

在这里插入图片描述

选择NEW PROJECT

在这里插入图片描述

在PART NAME中选择STM32F103C8T6芯片,点击START PROJECT.
在这里插入图片描述
在这里插入图片描述

点击system core,进入SYS,在debug下选择serial wire

在这里插入图片描述

点击RCC将hse那里设为Crystal/Ceramic Resonator:
在这里插入图片描述

在这里插入图片描述

点击GPIO 将需要的端口设置为OUTPUT

在这里插入图片描述

点击进入project manager。进行设置

在这里插入图片描述

点击上方法 GENRATE CODE,便可生成如下文件

在这里插入图片描述

进入MDK-ARM.

在这里插入图片描述

点击CUBE LED.uvprojx.进入程序。

然后将以下代码复制到main里面。

` HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 灯1亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 灯1灭

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);  // 灯2亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);  // 灯2灭
  
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);  // 灯3亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);  // 灯3灭`

在这里插入图片描述

然后点击保存烧录。

烧录运行:

流水灯HAL

三。查看波形:

XTAL这里改成8kHZ
在这里插入图片描述

Debug 出选择 “Use Simulator”,“Dialog DLL” 和 “Parameter” 也需要更改,软件仿真填入
“DARMSTM.DLL” ,参数为 “-pSTM32F103VE”,这里是我的STM32芯片型号。硬件仿真填入
“TARMSTM.DLL” 。

在这里插入图片描述

随后点击:START DEBUG 使用逻辑分析仪,得到波形:

在这里插入图片描述

四.中断流水灯。

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

找到 void HAL_GPIO_EXIT_CALLBACK(uint16_t GPIO_Pin)

`int i=0;
if(GPIO_Pin==GPIO_PIN_0)//读取PB0电平
{
GPIO_PinState State=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);//写入PB0电平

	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_All,GPIO_PIN_SET);

if (State==GPIO_PIN_SET) {//如果是高电平,进行流水灯
	 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//
		for(i=0;i<1000000;i++)//用for循环代替延时函数
	{
		
	}
	 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//
	for(i=0;i<1000000;i++)
	{
		
	}
	 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//
		for(i=0;i<1000000;i++)
	{
		
	}
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//
		for(i=0;i<1000000;i++)
	{
		
	}
}
 else if(State==GPIO_PIN_RESET)
{
	
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_All,GPIO_PIN_SET);
}`

在这里插入图片描述
然后烧录进STM32

流水灯中断

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
流水灯是一种常见的 LED 灯光效果,可以使用 HAL 库函数来实现。下面是一个简单的流水灯实现代码: ```C #include "stm32f10x.h" //包含STM32F10x系列的头文件 #define LED_NUM 8 //LED数量 #define DELAY_MS 200 //延时时间 int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; //LED引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出速度50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA while (1) { int i, j; for (i = 0; i < LED_NUM; i++) { GPIO_SetBits(GPIOA, GPIO_Pin_0 << i); //点亮当前LED HAL_Delay(DELAY_MS); //延时 GPIO_ResetBits(GPIOA, GPIO_Pin_0 << i); //熄灭当前LED } for (j = LED_NUM - 1; j >= 0; j--) { GPIO_SetBits(GPIOA, GPIO_Pin_0 << j); //点亮当前LED HAL_Delay(DELAY_MS); //延时 GPIO_ResetBits(GPIOA, GPIO_Pin_0 << j); //熄灭当前LED } } return 0; } ``` 在这个程序中,我们使用 STM32F10x 系列的 HAL 库函数来控制 GPIO 口,实现对 LED 的控制。在程序开始时,我们定义了 LED 数量和延时时间,以及每个 LED 所连接的 GPIO 引脚。 在主循环中,我们使用两个 for 循环来实现 LED流水灯效果。首先从第一个 LED 开始逐个点亮和熄灭,然后再从最后一个 LED 开始逐个点亮和熄灭,如此往复循环。 需要注意的是,在使用 HAL 库函数时,需要先通过 CubeMX 工具生成相应的工程文件,并添加相应的库文件和头文件。同时,需要根据实际情况修改 LED 引脚的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值