STM32基于HAL库流水灯实验

一、实验工具

1.Keil5
2.STM32F103C8T6最小核心板
3.STM32CubeMX

二、基于HAL库的流水灯点亮

1、安装STM32CubeMX

(1)管理员身份运行安装程序,点击next
请添加图片描述
(2)点击同意协议,选择next
请添加图片描述
(3)勾选第一个选项,点击next
请添加图片描述
(4)选择安装位置(安装位置不要出现中文)
请添加图片描述
(5)点击next开始安装
请添加图片描述
(7)安装完成,点击Done退出
请添加图片描述

2、安装HAL库

(1)打开安装好的STMCubeMX
(2)点击HELP->Manage embedded software packages
请添加图片描述
(3)在选择型号界面中找到需要的HAL库版本,点击Install Now
请添加图片描述

3、创建项目

(1) 在STM32CubeMX主界面中选择创建新项目
(2)在part name里选择自己的芯片,点击信息栏中的具体芯片信息选中,点击start project:
请添加图片描述
(3)点击system core,进入SYS,在debug下选择serial wire:
请添加图片描述
(4)配置时钟,进入上面的rcc,有两个时钟,一个是hse和lse,我们要用是GPIO接口,而这些接口都在APB2里。接下来观察时钟架构,APB2总线的时钟由hse控制,同时在这个界面得把PLLCLK右边选上:
请添加图片描述
(5)将hse那里设为Crystal/Ceramic Resonator。
(6)接下来就是点击相应的引脚设置输出寄存器了,就是output那一项,一共选了三个,是PA4,PB9,PC15:
请添加图片描述
(7)点击project manager,配置好自己的路径和项目名,然后IDE那项改为MDK-ARM:
请添加图片描述
(8)进入 code generate界面,选择生成初始化.c/.h文件,后面点击generate code,选择open project,然后就到KEIL5了:
请添加图片描述
(9)打开工程文件后,找到main函数,将main函数内容用下列代码替换:

SystemClock_Config();//系统时钟初始化
  MX_GPIO_Init();//gpio初始化
  while (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(1000);//延时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(1000);//延时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(1000);//延时1s
	}

3.烧录

1.打开mcuisp,进行烧录,按以下步骤操作,注意勾选和更改
请添加图片描述
2.烧录成功
请添加图片描述
3.运行结果

QQ视频20231027201741

4、观察GPIO端口输出波形

1)Target界面中,选择跟正确的晶振大小,我使用的是8MHz的外部晶振。这个选项在软件仿真中起到很重要的作用,如果选择错误,那么波形一定是错误的,因为时间不准确。

(2)Debug页的设置:
请添加图片描述
(3)点击Debug,进入调试界面:
(4)选择逻辑分析仪:
请添加图片描述
(5)选择要观察的引脚:
①点击Setup Logic Analyzer
②添加要观察的引脚:
请添加图片描述
(6)运行程序、观察波形:
请添加图片描述

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

1、创建项目

(1)打开项目,将芯片引脚按如下操作配置

A4输出控制灯的亮灭,设置为GPIO_Output
A1持续输出高电平,设置同上
A7持续输出低电平,设置同上
C13个人习惯开启做测试用,设置同上
B5模拟开关,设置为GPIO_EXTI5>

请添加图片描述
(2) 配置EXIT和SYS

请添加图片描述
请添加图片描述

(3)配置GPIO
把A1配置为高电平、A7配置为低电平
把B5中断配置为上升沿和下降沿都触发
(4)参照前文创建项目

2、在keil中配置项目

(1)打开生成的项目,找到stm32f1xx_it.c->EXTI9_5_IRQHandler->HAL_GPIO_EXTI_IRQHandler这个语句按F12跳到该函数->往下找到HAL_GPIO_EXTI_Callback这个函数

该函数是给用户自己重写的,可以在这里根据不同的中断来执行不同的处理。在这里我们需要根据B5的不同中断来实现A4的亮灭。
请添加图片描述
(2)重写代码:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin == SWITCH_Pin){
//获取B5的电位
GPIO_PinState pinState = HAL_GPIO_ReadPin(SWITCH_GPIO_Port,SWITCH_Pin);
//低电位
if(pinState==GPIO_PIN_RESET)
HAL_GPIO_WritePin(LED_A4_GPIO_Port,LED_A4_Pin,GPIO_PIN_RESET);//把A4变为低电位
//高电位
else
HAL_GPIO_WritePin(LED_A4_GPIO_Port,LED_A4_Pin,GPIO_PIN_SET);//把A4变为高电位
}
}>

3、烧录运行效果

QQ视频20231027201630

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值