首页 > 其他分享 >关于引脚复用,不得不提的GPIO_PinSource 和GPIO_Pin

关于引脚复用,不得不提的GPIO_PinSource 和GPIO_Pin

时间:2024-04-24 11:33:47浏览次数:19  
标签:Pin 引脚 uint8 uint16 GPIO PinAFConfig define

调整前的代码
GPIO_PinAFConfig(GPIOA,GPIO_Pin_9,GPIO_AF_4);
GPIO_PinAFConfig(GPIOA,GPIO_Pin_10,GPIO_AF_4);

调整后的代码
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_4);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_4);

 

 

不难看出,该工程师调整的就是上面红色参数部分。一个是GPIO_Pin_N,一个是GPIO_PinSourceN,其实这2个参数是不一样的。

 

GPIO_Pin_n可以理解为某端口脚在整个端口的位置。比方某GPIO口的第6管脚位置编码GPIO_Pin_6 被定义为 ((uint16_t)0x0040) ,在对相应GPIO管脚做基本属性配置时会用到,如配置输入输出模式、模拟输入模式的选择等。有兴趣的话,可以点击GPIO_Init( )进去看看。

 

而GPIO_PinSourceN一般是在对某GPIO口相应pin脚的复用功能进行选择配置才会用到。它是根据端口各脚位的位置按顺序从0开始依次递增编号,可以理解为该管脚在该端口的序号。比方某GPIO口的第6号复用功能脚的序号GPIO_PinSource6 被定义为 ((uint8_t)0x06) 。有兴趣的话,也可以打开GPIO_PinAFConfig( )函数看看。显然,GPIO_PinSource6跟上面的GPIO_Pin_6的值相差甚远。

 

下面是ST官方库代码中有关GPIO_Pin_N的定义:

 

#define GPIO_Pin_0 ((uint16_t)0x0001)

#define GPIO_Pin_1 ((uint16_t)0x0002)

#define GPIO_Pin_2 ((uint16_t)0x0004)

#define GPIO_Pin_3 ((uint16_t)0x0008)

#define GPIO_Pin_4 ((uint16_t)0x0010)

#define GPIO_Pin_5 ((uint16_t)0x0020)

#define GPIO_Pin_6 ((uint16_t)0x0040)

#define GPIO_Pin_7 ((uint16_t)0x0080)

#define GPIO_Pin_8 ((uint16_t)0x0100)

#define GPIO_Pin_9 ((uint16_t)0x0200)

#define GPIO_Pin_10 ((uint16_t)0x0400)

。。。。。。

#define GPIO_Pin_15 ((uint16_t)0x8000)

#define GPIO_Pin_All ((uint16_t)0xFFFF)

 

下面是有关GPIO_PinSourceN的定义:

#define GPIO_PinSource0 ((uint8_t)0x00)

#define GPIO_PinSource1 ((uint8_t)0x01)

#define GPIO_PinSource2 ((uint8_t)0x02)

#define GPIO_PinSource3 ((uint8_t)0x03)

#define GPIO_PinSource4 ((uint8_t)0x04)

#define GPIO_PinSource5 ((uint8_t)0x05)

#define GPIO_PinSource6 ((uint8_t)0x06)

#define GPIO_PinSource7 ((uint8_t)0x07)

#define GPIO_PinSource8 ((uint8_t)0x08)

#define GPIO_PinSource9 ((uint8_t)0x09)

#define GPIO_PinSource10 ((uint8_t)0x0A)

。。。。。。

#define GPIO_PinSource15 ((uint8_t)0x0F)

 

小结:上面的问题只有基于STM32官方固件库开发时才会碰到。说实在的,这两个参数的确容易让人误解成一个东西或者弄混淆,尤其刚接触的人。经常有人在这个地方遇到麻烦,之前我在一篇文章中提到过。这里再特意提醒下。

不过ST官方后来推出的STM32CUBE库在这个地方的代码写法做了调整,不再定义GPIO_PinSourceN。当然,因为管脚配置导致异常的问题时有发生,建议使用ST官方推出的STM32CUBE配置环境及CUBE参考固件库着手开发,这样会省不少事。

标签:Pin,引脚,uint8,uint16,GPIO,PinAFConfig,define
From: https://www.cnblogs.com/zhanghongfei/p/18154703

相关文章

  • Deepin/UOS自带壁纸分享
    Deepin/UOS自带壁纸分享前言:前几天正好有人问我寻求这些壁纸,于是我就提取了出来放在了Gitee,有需要的可以自行前往下载话不多上,链接奉上:Deepin/UOS自带壁纸效果(随便挑选了两个):......
  • 前端【TS】03-typescript【基础】【Pinia】
    介绍 什么是PiniaPinia是Vue的专属的最新状态管理库,是Vuex状态管理工具的替代品 手动添加Pinia到Vue项目1.使用Vite创建一个空的TS+Vue3项目1npmcreatevite@latestvue-pinia-ts----templatevue-ts2.按照官方文档安装pinia到项......
  • java srpint boot 2.2.1 第二部份,锁机制和分页查询 以及统一返回结果格式,
    第二部份,引起锁机制的原理和解决方案: 测试环境搭建第一步先建一个数据库表用于模拟商品购买。CREATETABLEproduct(idINTAUTO_INCREMENTPRIMARYKEY,nameVARCHAR(255)NOTNULL,stockINTNOTNULL,versionINTNOTNULLDEFAULT0);第二步......
  • Asp-Net-Core开发笔记:使用alpine镜像并加入健康检查
    前言使用docker部署AspNetCore应用已经是标配了,之前我一直使用mcr.microsoft.com/dotnet/aspnet:8.0这类镜像,简单粗暴,不过可以使用alpine进一步优化镜像大小。很多开源工具的docker都有健康检查,这次我顺便也给加上了。添加健康检查注册服务builder.Services.AddHea......
  • Robust mapping of spatiotemporal trajectories and cell–cell interactions in hea
    这篇论文主要介绍了一种名为"Robustmappingofspatiotemporaltrajectoriesandcell-cellinteractionsinhealthyanddiseasedtissues"的新方法,该方法能够在健康和疾病组织中对细胞过程进行可靠的映射,同时研究细胞间的相互作用。在生物组织中,细胞类型、局部组成和状态、分......
  • pinia vue3
    修改值https://blog.csdn.net/qq_42543244/article/details/123407045只修改一个值:直接修改请注意,store是一个用reactive包装的对象,这意味着不需要在getters后面写.value。就像setup中的props一样,我们不能对它进行解构https://pinia.vuejs.org/zh/core-concepts/#u......
  • ZYNQ的gpio的硬件驱动库知识
    对于ZYNQ的硬件驱动库编程方法,我这边用STM32的标准库函数方法来对应。也就是说在ZYNQ里面有给定的官方的标准驱动库,将原本的寄存器方法给一定程度的封装起来。类似于stm32学习过程中给的库函数版本,将你从寄存器版本中解救出来(虽然会影响运行效率,但是这种普通开发者可忽略不计)像......
  • 对大量ip进行批量ping检测的python脚本
    对大量ip进行批量ping检测的python脚本importsubprocessdefping_host(host,is_windows):"""发送一个ping请求到指定的主机,并返回ping的结果。"""#根据操作系统类型选择ping命令和参数ifis_windows:params=['ping','-n',&......
  • Java登陆第四十三天——Pinia
    到目前一共学习了两种传参方式。 1.组件传参 2.路由传参这两种传参方式并不好用,所以出现了PiniaPinia平替了Vuex,而且比它更优秀。Pinia是Vue衍生的生态系统之一,所以,在使用它前需要导入依赖。npmipinia简单地说,Pinia就是共享数据。各个.vue组件可以利用Pinia更好的完成......
  • Could not set parameters for mapping
    错误现象:Resolved[org.mybatis.spring.MyBatisSystemException:nestedexceptionisorg.apache.ibatis.type.TypeException:Couldnotsetparametersformapping:ParameterMapping{property='keywords',mode=IN,javaType=classjava.lang.Object,jdbcType=n......