【2022年的STM32】 04-GPIO特性、使用及与NXP GPIO比较
概述
本文分析总结STM32 GPIO特点、编程方法。
关于GPIO可以参考Reference manual中GPIO章节或者《AN4899 STM32 microcontroller GPIO configuration for hardware settings and low-power consumption》。
内存映射
GPIOx_REG,其中x = A to H, Piny= 0 … 15。
STM32:
typedef struct
{__IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */__IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */__IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */__IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */__IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */__IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */__IO uint32_t BSRR; /*!< GPIO port bit set/reset register, Address offset: 0x18 */__IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */__IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */
} GPIO_TypeDef;
S32K1:
/** GPIO - Register Layout Typedef */
typedef struct {__IO uint32_t PDOR; /**< Port Data Output Register, offset: 0x0 */__O uint32_t PSOR; /**< Port Set Output Register, offset: 0x4 */__O uint32_t PCOR; /**< Port Clear Output Register, offset: 0x8 */__O uint32_t PTOR; /**< Port Toggle Output Register, offset: 0xC */__I uint32_t PDIR; /**< Port Data Input Register, offset: 0x10 */__IO uint32_t PDDR; /**< Port Data Direction Register, offset: 0x14 */__IO uint32_t PIDR; /**< Port Input Disable Register, offset: 0x18 */
} GPIO_Type, *GPIO_MemMapPtr;
不同于NXP S32K1 MCU,复用功能在PORT、SIM等模块中指定,GPIO只是单纯的完成GPIO功能,STM32的GPIO寄存器组中还具有指定复用功能的AFR寄存器,指定上下拉等功能。
HAL GPIO
/* Initialization and de-initialization functions *****************************/
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
STM32CubeMX中配置的引脚,调用HAL_GPIO_Init完成初始化,比如CAN引脚,则是在HAL_CAN_MspInit中调用HAL_GPIO_Init进行引脚初始化,其再被HAL_CAN_Init调用,再上被MX_CAN1_Init调用。
硬件特性
- 每组多大16个IO
- 输出状态:push-pull或者open drain + pull-up/down
- 输出数据:GPIOx_ODR或者复用的外设功能
- 每个IO可选择速度
- 输入状态:floating, pull-up/down, analog
- 输入数据:GPIOx_IDR或者复用的外设功能
- 通过设置GPIOx_BSRR来设置清楚GPIOx_ODR
- 通过GPIOx_LCKR提供冻结IO配置的锁定机制
- 模拟功能,此时上下拉失能
- 每个IO通过AFR选择复用功能,AFRL (for pin 0 to 7) 、AFRH (for pin 8 to 15),复用功能可以推挽带上下拉或者开漏带上下拉能力
- 快速翻转再两个时钟周期内
寄存器必须32位字访问,上电复位起来后,复用功能未被激活,引脚被设置成浮空输入模式,除了debug pins:
• PA15: JTDI in pull-up
• PA14: JTCK/SWCLK in pull-down
• PA13: JTMS/SWDAT in pull-up
• PB4: NJTRST in pull-up
• PB3: JTDO in floating state [F4 Only, F1未指明]
当配置为输出后,写入到GPIOx_ODR的值将出现在引脚上,GPIOx_IDR每APB2 [F1]、AHB1[F4]时钟周期捕获IO口上的值。每个GPIO都有内部弱上拉。中断功能需要在EXIT模块中配置。
对于COMS输入:VIHmin ~ 2 / 3 VDD and VILmax ~ 1 / 3 VDD.
对于TTL输入: VIHmin = 2V and VILmax = 0.8 V.
引脚最大吸收电流为25 mA。
每个GPIO电气特性被定义为三种:three-volt tolerant, five-volt tolerant, and also three-volt capable.
Tolerance代表GPIO可以承受这么大电压,capable代表可以输出这么大电压。
STM32可与5V的IIC TTL UART链接。
避免不使用引脚浮空输入,可以上拉或者下拉,考虑到ESD,可以上拉输出为低电平。VBAT GPIO pin允许接后备电池到后备域,此时大多数引脚shut down。
软件上可以将未使用的引脚配置为模拟输入,这将节省input Schmitt trigger消耗。长时间不用可通过HAL_RCC_GPIOx_CLK_DISABLE()关时钟。
结语
了解更多,请访问:
STM32专栏 https://blog.csdn.net/kinetis_linux/category_11592269.html
S32K1专栏 https://blog.csdn.net/kinetis_linux/category_11543275.html?spm=1001.2014.3001.5482
C++开发MCU专栏 https://blog.csdn.net/kinetis_linux/category_11548458.html
【2022年的STM32】 04-GPIO特性、使用及与NXP GPIO比较相关推荐
- keil 4c语言读写寄存器,【STM32单片机学习】第四课:GPIO控制LED(用寄存器编程)
[朱老师课程总结] 第一部分.章节目录 第二部分.章节介绍 3.5.1.STM32的GPIO模块数据手册详解1 本节讲解STM32数据手册中GPIO模块相关的部分,主要是GPIO的各类模式及其配置方法 ...
- STM32单片机初学者编程之常用小程序--GPIO配置延时函数
声明:本专题系列的博文主要是用于个人学习以及后续查阅调用,由于是这方面的初学者,所以写的比较浅陋,有喜欢的朋友可以一起学习,编程大神们请略过...... 1.以一个GPIO的初始化程序为例,以下是GP ...
- 【北邮果园微处理器设计】gpio.c 应用解读(附gpio.c源码)
该工具类为北邮-国院-电信工程及管理专业(物联网工程)-通信方向-大三课程-微处理器设计(Microprocessor System Design)- Lab 2内英方给的Driver类 gpio.c ...
- linux的gpio设备,Linux 4.x之Gpio分析(一)Gpiolib库1
下面的内容均在imx6平台上举例,这一次分析希望将整个GPIO子系统的所有细节整理清晰. 第一篇从gpiolib入手,后面的边分析边写. 开始之前给自己提几个问题 驱动开发中的GPIO API 究竟是 ...
- 官宣!等你来赛,2022 第二届 STM32 Hackathon 挑战赛海选开放报名!
2022,我们将迎来 第二届 STM32 Hackathon 24小时挑战赛 挑战赛制及开发平台 全面升级 4款高性能开发平台供选择 STM32 峰会现场24小时疯狂开发 ST一线专家指导及点评 参与 ...
- STM32的I2C特性及架构
软件模拟协议:使用CPU直接控制通讯引脚(GPIO)的电平,产生出符合通讯协议标准的逻辑. 硬件实现协议:由STM32的I2C片上外设专门负责实现I2C通讯协议,只要配置好该外设,它就会自动根据协议要 ...
- STM32第二课(cubemx,clk,gpio,)
cubemx用来生成platform. ++++++++++++++++++++++++++ 复制IOC工程. 新建一个文件夹,将需要的IOC文件拷贝到新建的文件夹中. 修改IOC文件的名称, 然后用 ...
- GeekPro 2022安装 win10+ubuntu20.04.4双系统
参考链接: 1.Win11+Ubuntu20.04双系统安装教程_Jason.WuT的博客-CSDN博客_win11+ubuntu双系统 2.Windows 和 Ubuntu 双系统从安装到卸载_哔哩 ...
- UBUNTU12.04系统特性
Ubuntu Server 12.04 的新特性一览表 中文科技资讯: Ubuntu 12.04 (代号为 Precise Pangolin) 版本主要侧重于发布.稳定性和质量.Ubuntu 12.0 ...
最新文章
- feng作品推荐あかね色に染まる坂 染成茜色的坂道 (含下载、攻略)
- ie-css3.htc参数无效,ie-css3.htc怎么用?
- ConcurrentHashMap的源码分析-addCount
- iOS开发学无止境 - NSFileManager文件操作的十个小功能
- 关于指针释放的小领悟
- 网站去色的通用方法(简单)
- go和python对比的优缺点_Python与Golang对比
- poj 3468 A Simple Problem with Integers 基础线段树
- 实验吧——Recursive
- php面向对象精要(3)
- 账龄分析表excel模板_这种高端表格模板你会做吗?Excel制作带照片的员工信息查询表...
- 五款APP让你告别拖延症!余生愿你活成自己想要的样子
- 文献翻译——基于关联规则挖掘识别的鸡源大肠杆菌共有多重耐药模式(上)
- 电脑上有什么类似全能扫描王的软件?这4款扫描app1分钟帮你搞定几十张图片
- (二十一) Sed编辑器高级部分
- PVE下的黑群晖的其他后续设置
- LeetCode 39 组合总和
- MySQL自学笔记详细版(从安装到入门)
- Java基础教程:k8s快速入门
- freeBSD镜像下载和主要的更新查询
热门文章
- 分词工具比较及使用(ansj、hanlp、jieba)
- pap.er - Mac必备5K壁纸下载软件
- H5游戏引擎为什么选择egret和怎么学习egret
- 7张图大总结:SQL 数据分析常用语句!
- python写入文件后读取空白,写入文件无法读取解决方案
- QT编写的学生管理系统
- ecmall php传变量,PHP_ECMall支持SSL连接邮件服务器的配置方法详解,首先,主要是ecmall使用的phpmail - phpStudy...
- 代码太多不要怕,分享一个阅读代码的神器
- 电工技术(7)—正弦量的向量表示法
- Spring Boot干货系列:(十二)Spring Boot使用单元测试 | 嘟嘟独立博客