STM32HAL库GPIO和EXTI
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种工作模式
- 推挽输出
- 开漏输出
- 复用推挽输出
- 复用开漏输出
- 模拟输入
- 浮空输入
- 下拉输入
- 上拉输入
库函数
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外部中断处理流程
- 将引脚设置为GPIO_EXTx功能,选择好触发方式,输入模式和用户标签。
- 在NVIC控制器中使能对应的中断通道
STM32HAL库GPIO和EXTI相关推荐
- stm32hal库使用RTC时PC13作为普通GPIO注意事项
stm32hal库使用RTC时PC13作为普通GPIO注意事项 问题现象 现象分析 问题解决 问题现象 做项目采用STM32L4系列,为了方便PCB布板,使用PC13作为电源控制管脚,项目初期未进行B ...
- STM32HAL库-内部Flash在指定页读写保护示例
概述 本篇文章介绍如何使用STM32HAL库,内部Flash在特定页读写保护示例. 硬件:STM32F103CBU6最小系统板 软件:Keil 5.29 + STM32CubeMX5.6.1 一.使 ...
- STM32HAL库-移植mbedtls开源库示例(一)
目录 概述 一.使用方法 二.STM32CubeMx配置 三.Examples 四.运行结果 五.总结 概述 本篇文章介绍如何使用STM32HAL库,移植mbedtls开源库支持mqtt证书加密示例. ...
- STM32HAL库电子广告牌显示广告+温湿度+时间设置
STM32HAL库电子广告牌显示广告+温湿度+时间 概述 第一天进度 材料采购 1.新建KEIL工程 2.软件编写 第二天进度 1.开始接线 2.开始调试 总结 概述 电子广告牌多用于显示一些简短的信 ...
- STM32HAL库-针对芯片内部FLASH读保护实现防篡改、破解功能(详解)
目录 概述 一.使用方法 二.STM32CubeMx配置 三.Examples 四.运行结果 五.总结 概述 本篇文章介绍如何使用STM32HAL库,针对芯片读写保护实现防篡改.破解功能(详解),本 ...
- STM32HAL库中断服务函数调用过程
STM32HAL库中断服务函数调用过程 如何找到中断源,如何找到中断源对应的中断服务函数? 中断源在stm32f429xx.h文件中,与中断服务函数一一对应,中断服务函数位于启动文件startup_s ...
- GD32移植STM32HAL库接口
GD32移植STM32HAL库接口 串口接口 串口需要的延时 GPIO接口及中断设置接口 中断设置 配置端口输出例子 FLASH接口 Flash测试代码 看门狗非HAL接口 定时器部分接口 原工程使用 ...
- STM32HAL库-实现USB虚拟串口打印(printf功能)
目录 概述 一.使用方法 二.STM32CubeMx配置 三.Examples 四.运行结果 五.总结 概述 本篇文章介绍如何使用STM32HAL库,来实现USB虚拟串口打印功能,代替传统中的串口打印 ...
- stm32cubeide外部中断_【STM32】HAL库 STM32CubeMX教程三----外部中断(HAL库GPIO讲解)
前言 上一节我们讲解了STM32CubeMX的基本使用和工程的配置,那么这一节我们正式来学习CubeMX配置STM32的各个外设功能了 今天我们会详细的带你学习STM32CubeMX配置外部中断,并且 ...
最新文章
- 客快物流大数据项目(二十二):Docker环境中安装软件
- 轮播图html_【技术篇前端】用html+css实现小米首页部分内容(含源码,不含轮播图)...
- 105_键盘事件对象
- python字典功能默写_Python 内存分配时的小秘密
- 在Simplicity Studio下创建适用于EFR32的工程项目
- linux网络编程之网络字节序、主机字节序、大端、小端
- wxpython嵌入图片_将图片文件嵌入到wxpython代码中的实现方法
- Golang sort 包使用
- 集合类ArrayList、HashMap、HashSet线程不安全
- 网站被黑跳转到其他网站的解决办法
- 三极管原理及特性分析
- 进入旅游营销时代,携程有什么“大招”?
- 前端笔记1(选择器,动态增添/修改页面元素)
- OpenScap基础应用
- Android平台单独编译内核模块ko insmod
- 各种时间概念的详细解释 恒星时世界时 协调世界时
- 如何快速转行产品经理 少走弯路
- 《计算机视觉之三维重建》笔记1-数学基础
- 洛谷P2713 罗马游戏
- android音乐播放器之歌词下载、处理、开始、同步