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 :引脚状态

代码保护作用

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

中断系统

EXTI

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

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

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

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

常用的库函数

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__))

找到外部中断回调函数

重写外部中断回调函数

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

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

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

STM32HAL库GPIO和EXTI相关推荐

  1. stm32hal库使用RTC时PC13作为普通GPIO注意事项

    stm32hal库使用RTC时PC13作为普通GPIO注意事项 问题现象 现象分析 问题解决 问题现象 做项目采用STM32L4系列,为了方便PCB布板,使用PC13作为电源控制管脚,项目初期未进行B ...

  2. STM32HAL库-内部Flash在指定页读写保护示例

    概述 本篇文章介绍如何使用STM32HAL库,内部Flash在特定页读写保护示例. 硬件:STM32F103CBU6最小系统板 软件:Keil 5.29  + STM32CubeMX5.6.1 一.使 ...

  3. STM32HAL库-移植mbedtls开源库示例(一)

    目录 概述 一.使用方法 二.STM32CubeMx配置 三.Examples 四.运行结果 五.总结 概述 本篇文章介绍如何使用STM32HAL库,移植mbedtls开源库支持mqtt证书加密示例. ...

  4. STM32HAL库电子广告牌显示广告+温湿度+时间设置

    STM32HAL库电子广告牌显示广告+温湿度+时间 概述 第一天进度 材料采购 1.新建KEIL工程 2.软件编写 第二天进度 1.开始接线 2.开始调试 总结 概述 电子广告牌多用于显示一些简短的信 ...

  5. STM32HAL库-针对芯片内部FLASH读保护实现防篡改、破解功能(详解)

    目录 概述 一.使用方法 二.STM32CubeMx配置​ 三.Examples 四.运行结果 五.总结 概述 本篇文章介绍如何使用STM32HAL库,针对芯片读写保护实现防篡改.破解功能(详解),本 ...

  6. STM32HAL库中断服务函数调用过程

    STM32HAL库中断服务函数调用过程 如何找到中断源,如何找到中断源对应的中断服务函数? 中断源在stm32f429xx.h文件中,与中断服务函数一一对应,中断服务函数位于启动文件startup_s ...

  7. GD32移植STM32HAL库接口

    GD32移植STM32HAL库接口 串口接口 串口需要的延时 GPIO接口及中断设置接口 中断设置 配置端口输出例子 FLASH接口 Flash测试代码 看门狗非HAL接口 定时器部分接口 原工程使用 ...

  8. STM32HAL库-实现USB虚拟串口打印(printf功能)

    目录 概述 一.使用方法 二.STM32CubeMx配置 三.Examples 四.运行结果 五.总结 概述 本篇文章介绍如何使用STM32HAL库,来实现USB虚拟串口打印功能,代替传统中的串口打印 ...

  9. stm32cubeide外部中断_【STM32】HAL库 STM32CubeMX教程三----外部中断(HAL库GPIO讲解)

    前言 上一节我们讲解了STM32CubeMX的基本使用和工程的配置,那么这一节我们正式来学习CubeMX配置STM32的各个外设功能了 今天我们会详细的带你学习STM32CubeMX配置外部中断,并且 ...

最新文章

  1. 客快物流大数据项目(二十二):Docker环境中安装软件
  2. 轮播图html_【技术篇前端】用html+css实现小米首页部分内容(含源码,不含轮播图)...
  3. 105_键盘事件对象
  4. python字典功能默写_Python 内存分配时的小秘密
  5. 在Simplicity Studio下创建适用于EFR32的工程项目
  6. linux网络编程之网络字节序、主机字节序、大端、小端
  7. wxpython嵌入图片_将图片文件嵌入到wxpython代码中的实现方法
  8. Golang sort 包使用
  9. 集合类ArrayList、HashMap、HashSet线程不安全
  10. 网站被黑跳转到其他网站的解决办法
  11. 三极管原理及特性分析
  12. 进入旅游营销时代,携程有什么“大招”?
  13. 前端笔记1(选择器,动态增添/修改页面元素)
  14. OpenScap基础应用
  15. Android平台单独编译内核模块ko insmod
  16. 各种时间概念的详细解释 恒星时世界时 协调世界时
  17. 如何快速转行产品经理 少走弯路
  18. 《计算机视觉之三维重建》笔记1-数学基础
  19. 洛谷P2713 罗马游戏
  20. android音乐播放器之歌词下载、处理、开始、同步

热门文章

  1. java零基础Ⅱ-- 4.常用类
  2. 《墨攻》理解IoC—Spring底层核心
  3. java程序 401 Unauthorized 错误
  4. ansys选择一个面上所有节点,关于ansys选择相关命令的整理
  5. 乐视视频遭DDOS攻击 疑是恶意竞争
  6. OpenLayers地图坐标转换屏幕坐标
  7. Ubuntu18.04安装sumo的三种方式
  8. 《labuladong的算法小超》A和《代码随想录》B阅读笔记(2)
  9. RabbitMQ学习文档(详细)
  10. QS(Quacquarelli Symonds)公布的2011世界大学排名