基于HAL库的LED流水灯

本文详细介绍了如何使用STM32CubeMX和Keil配合HAL库实现LED流水灯控制,并在无示波器情况下通过Keil的逻辑分析仪观察和调试GPIO端口时序。还涉及了外部中断模式的应用,演示了如何使用PB14引脚作为中断触发LED状态变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验任务:

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

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

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

接低电平时,LED流水灯停止工作。

二. 在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。

请用此功能观察第1题中3个GPIO端口流水灯的输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

STM32CubeMX生成代码使用HAL库点亮流水灯

1.安装STM32CubeMX

官网下载STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics

1.1解压安装包后以管理员身份运行

1.2点击Next

1.3勾选"I accept the terms of this license agreement",接着点击Next

1.4勾选“I have read and underrstood...”,并点击Next

1.5选择安装路径

1.6点击确定

1.7选择Next后等待安装完成,点击Done退出

2.安装HAL库

2.1在Help中选择Manage embedded software packages,并选择需要的单片机HAL库

2.2点击Install安装(需要登陆账号)

3.新建项目

3.1点击ACCESS TO MCU SELECTOR

3.2选择STM32F103C8T6,点击信息栏中的具体芯片信息,点击start project

.3.3点击system core,选择SYS,在Debug中选择serial wire

3.4选择RCC,点击Clock Configuration,选择PLLCLK

3.5修改High Speed Clock(HSE)为Crystal/Ceramic Resonator

3.6 选择GPIO,并选择需要的引脚输出

选择GPIO_Output设置输出寄存器

3.7设置PA0、PA1、PA2

3.8点击project manager,配置好路径和项目,在IDE那项改为MDK-ARM

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

3.10生成成功

4.Keil5仿真

4.1打开.uvprojx文件

4.2选择main.c文件

修改代码如下:

SystemClock_Config();//系统时钟初始化
  MX_GPIO_Init();//gpio初始化
  while (1)
  {		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
		HAL_Delay(1000);//延时1s
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
		HAL_Delay(1000);//延时1s		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
		HAL_Delay(1000);//延时1s
	}

4.3电路连接

STM32F103C8与USB转TTL线连接
STM32F103开发板USB转TTL线
GNDGND
PA9RXD
PA10TXD
3V33V3

LED的电路连接
LED-REDLED-YELLOWLED-GREEN
电源正极电源正极电源正极
PA0PA1PA2

4.4运行

LED_HEL

4.5观察GPIO端口的输出波形

(1)选择晶振

(2)修改Debug设置
(3)点击进入Debug界面

(4)选择逻辑分析仪并设置观察引脚

(5)点击运行

(6)波形观察

高低电平转换周期(LED闪烁周期)为1s左右。

stm32外部中断模式控制灯亮灭

1.新建项目

1.1点击ACCESS TO MCU SELECTOR

1.2选择STM32F103C8T6,点击信息栏中的具体芯片信息,点击start project

1.3点击system core,选择SYS,在Debug中选择serial wire

1.4修改High Speed Clock(HSE)为Crystal/Ceramic Resonator

1.5选择GPIO,并选择需要的引脚输出

选择 LED 灯引脚 PA6,设置引脚为输出模式 GPIO_Output;
选择作为外部中断的引脚 PB14,设置为与中断线 GPIO_EXTI14 连接

设置PB14下沿触发

设置NVIC

1.5点击project manager,配置好路径和项目,在IDE那项改为MDK-ARM

1.6生成成功

2.Keil5仿真

2.1打开.uvprojx文件

2.2选择main.c文件

编写外部中断函数

 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 
{ 
	if( GPIO_Pin == EX_Pin ) // 判断外部中断源
		{
			HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // 翻转LED状态
		}
}

2.3电路连接

STM32F103C8与USB转TTL线连接:同上

LED的电路连接:

2.4运行 

LED-HEL2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值