STM32HAL库

GPIO

  • STM32芯片最多拥有7组端口(GPIOA—GPIOG),每组端口最多有用16个引脚(Pin0—Pin15)
  • STM32的每个I/O端口都可以自由编程,但I/O端口寄存器必须按32位字访问
  • 对底层硬件的操作就是对寄存器的操作
  • STM32的每个I/O端口都有7个寄存器来控制
  • STM32的I/O端口可由软件配置成8种模式
  • STM32CubeMX可以实现初始化操作

8种工作模式

  1. 推挽输出
  2. 开漏输出
  3. 复用推挽输出
  4. 复用开漏输出
  5. 模拟输入
  6. 浮空输入
  7. 下拉输入
  8. 上拉输入

库函数

HAL:硬件抽象层

GPIO电平输出HAL库函数
void HAL_GPIO_WritePin(GPIO_TyoeDef* GPIOx,uint16_t GPIO_Pin,GPIO_PinState PinState);

1-GPIOx :端口号

2-GPIO_Pin :引脚号

3-PinState :GPIO_PIN_SET(高电平);GPIO_PIN_RESET(低电平)

GPIO电平翻转HAL库函数
void HAL_GPIO_TogglePin(GPIO_TyoeDef* GPIOx,uint16_t GPIO_Pin);

1-GPIOx :端口号

2-GPIO_Pin :引脚号

GPIO输入HAL库函数
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TyoeDef* GPIOx,uint16_t GPIO_Pin);

1-GPIOx :端口号

2-GPIO_Pin :引脚号

3-GPIO_PinState :引脚状态

image-20230226161643294

代码保护作用

截屏2023-02-26 16.22.29

将代码写到BEGIN和END之间,如果重新配置STM32CubeMX配置生成代码原来的代码不会被覆盖

中断系统

EXTI

外部中断,是指一些涉及GPIO引脚电平变化或者RTC和USB等外设唤醒事件所触发的中断,由外部中断控制器EXTI管理。

  • 中断的基本概念:中断源、中断优先级、中断通道、中断服务程序ISR
  • 在STM32中能打断当前代码执行流程的事件分为:异常和中断
  • 异常:通常由内核自身产生,大多数由软件触发,例如:除法出错
  • 中断:由内核外设产生的,一般由硬件触发,如定时器中断

中断触发方式有三种:上升沿触发、下降沿触发和双边沿触发。我们把通过GPIO引脚产生的中断简称为外部中断。

image-20230226171558943

  • STM32将GPIO引脚进行了分组:尾号相同的引脚作为一组,通过1个多路选择器连接到1个EXTI外部中断线。同组的引脚只能由1个与外部中断线连接,其他引脚就不能作为外部引脚,本质上可供用户同时使用的外部中断引脚最多只有16个。
  • NVIC为EXTI所管理的16个外部中断线提供了7个中断通道。EXTI0EXTI4连接到独立的中断通道,有单独的ISR。EXTI5EXTI9共享1个中断通道,EXTI10~EXTI15共享1个中断通道。
  • 对于共用中断服务程序的ISR的,需要在ISR中判断,具体是哪个EXTI外部中断线产生的中断,然后再做相应的处理。

image-20230226172406540

常用的库函数

ISR中调用的外部中断通用处理函数

HAL_GPIO_EXTI_IRHandler();

外部中断回调函数,实现中断逻辑处理

HAL_GPIO_EXTI_Callback();

检查某个外部中断线是否有挂起标志位

__HAL_GPIO_EXTI_GET_TI();

清除某个外部中断线的挂起标志位

__HAL_GPIO_EXTI_CLEAR_TI();

在某个外部中断线上产生软中断

__HAL_GPIO_EXTI_GENERATE_SWIT();

注意:在HAL库中,以双下划线HAL,即“__HAL”为前缀的,是宏函数。如

#define __HAL_GPIO_EXTI_GET_TI(__EXTI_LINE__) (EXTI->PR&(__EXTI_LINE__))

image-20230226222616225

image-20230226222637537

image-20230226222652337

找到外部中断回调函数

image-20230226223252827

重写外部中断回调函数

image-20230226223632093

所有的中断都会调用一个中断回调函数,通过判断中断线路来判断

image-20230226223814984

基于HAL库的STM32外部中断处理流程

  1. 将引脚设置为GPIO_EXTx功能,选择好触发方式,输入模式和用户标签。
  2. 在NVIC控制器中使能对应的中断通道

image-20230226231918785

image-20230226232247659

image-20230226232556968

image-20230226232718107