沉浸式学习STM32——HAL库LED点灯

目录

一.作者小课堂

(一) EXTI的 HAL库接口函数

(二)EXTI的HAL库应用实例

1.功能

2.硬件设计

3.软件设计流程 

(1)新建STM32CubeMX工程,选择MCU

(2)RCC配置

(3)MCU引脚选择

(4)GPIO引脚参数配置

(5) 时钟配置

(6)配置外部中断参数

(7)配置keil工程名称和存放位置

(8)生成工程代码

二.实践出真知

(一)代码

(二)仿真波形图

(三)实验结果


 

一.作者小课堂

(一) EXTI的 HAL库接口函数

EXTI的HAL库接口函数的源码定义在stm32f1xx_hal_exti.c源文件中,其对应的头文件stm32f1xx_hal_exti.h声明了EXTI所有的库函数

(二)EXTI的HAL库应用实例

1.功能

采用基于HAL库设计方式,通过两个按键分别控制两个LED灯状态翻转。

2.硬件设计

按键WAKE_UP连接在STM32F103的PA0引脚上,按下时PA0为高电平,按键S2连接在STM32F103的PE3引脚上。

3.软件设计流程 

(1)新建STM32CubeMX工程,选择MCU

在D盘或其他盘符目录下新建一个文件夹,用来存放后面建立的STM32CubeMX工程。需要注意的是:所建工程文件名最好是英文名称,且最好是英文路径。 这里采用STM32F103ZET6芯片。

(2)RCC配置

HSE选择“Crystal/Ceramic Resonator”(晶振/陶瓷谐振器),LSE选择“Disable”

(3)MCU引脚选择

LED2连接在PE5引脚上,LED3连接在PB5引脚上,设置为GPIO_Output;

设置PA0为GPIO_EXTI0外部中断线作为WAKE_UP按键使用,用于控制LED3灯闪烁;

设置PE3为GPIO_EXTI3作为按键S2使用,用于控制LED2灯闪烁。

(4)GPIO引脚参数配置

在“GPIO”参数配置中设置PA0为上升沿触发;

PE3的“GPIO mode”设置为下降沿触发,添加用户标签S2;

PB5和PE5两个LED灯设置为推挽输出,分别添加用户标签为LED2和LED3。

(5) 时钟配置

通过图形化方式直观对系统时钟进行配置,系统时钟采用外部高速时钟,配置STM32F103系列芯片最大时钟为72MHz,配置APB2为72MHz,配置APB1为36MHz。

(6)配置外部中断参数

在“NVIC”选项页中,设置“Priority Group”进行优先级分组;

勾选“EXIT_Line0 interrupt”使能PA0外部中断线;

类似地,勾选“EXTI_Line3 interrupt”使能PE3外部中断线。

(7)配置keil工程名称和存放位置

定义“Project Name”为“MyProject_EXTI”,“Toolchain/IDE”选择“MDK-ARM V5”;

(8)生成工程代码

通过STM32CubeMX的菜单栏中的“Generate Code”生成工程代码,生成代码后,会提示是否打开该工程窗口

二.实践出真知

(一)代码

在keil 中单击编译按钮,对生成的工程进行编译; 在stm32f1xx_it.c文件中可以找到所定义的中断函数; 外部的两个按键中断触发后,首先会调用GPIO相应引脚的外部中断处理函数。

当中断发生时,会调用HAL_GPIO_EXTI_Callback()函数,但程序中只给出了一个虚函数,需要用户添加应用程序代码来实现相关功能。 在main.c文件中的/*USER CODE BEGIN 4*/和/*USER CODE END 4*/之间添加中断回调函数相应的程序代码。

/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin == GPIO_PIN_3)
    {
       HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);
    }
   if(GPIO_Pin == GPIO_PIN_0)
   {
        HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);
   }
}
/* USER CODE END 4 */

(二)仿真波形图

 

观察的引脚分别为

 

(三)实验结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值