极客秀
搜索

在STM32F1中使用标准库进行IO复用遇到的无定义问题

今天有群友在询问他使用标准库的时候配置IO复用出现了一个问题。

关于这个函数无相关宏定义问题,虽然参数中GPIO_AF_1是有问题的,不够交流后修改为GPIO_AF_I2C1还是出现了问题,这非常的奇怪。在讲述这个问题之前,我们先介绍一下STM32中的IO复用。
通常我们在配置STM32外设功能的时候,例如串口,I2C,SPI等,需要将相对应的引脚功能和这些功能复用。STM32的复用功能是指微控制器的引脚可以根据需要被配置为不同的功能即引脚可以除了数字输入输出,可以被配置成其他的功能。

STM32的手册中是这么描述复用功能的,由AFIO寄存器决定IO口复用的功能。

而在后面有一部分内容中提到,在 引脚数很多的芯片 中,是可以将复用功能应用到其他的引脚上的,而不仅仅是将复用功能映射在 ** 原有的默认引脚
** 上。例如PA9/10作为UART1的默认引脚。

但是我们可以通过复用功能配置到PB6/7这些非默认引脚上。而在一些芯片例如F4上,我们可以通过

GPIO_PinAFConfig(I2C1_SDA_GPIO_PORT, GPIO_PinSource6, GPIO_AF_I2C1);

直接为相关GPIO复用I2C的功能。
虽然有相关说法说由于是F103C8t6只有默认引脚可以使用,但是以I2C为例F103的I2C1可以复用到PB6/7或者PB8/9所以基本上是排除掉F103引脚过少的原因了。
不过在查看标准库关于GPIO的头文件定义的时候,发现F103的库确实比F4的库缺少这部分的定义。 所以大胆的猜测由于是 ** F1系列出现的时间较早
** ,该语法极可能是从F1之后的更高系列的库中引入的,再加上这些年ST已经基本不对标准库进行更新了所以没有对这个地方进行补充。
所以在F1中,我们配置复用输出的时候,一般是将GPIO配置为复用模式,之后也可以利用寄存器来配置IO复用到相关引脚上。
而我这几年基本一直依赖CubeMX和HAL库进行开发,确实会忽略相关的初始化GPIO和功能配置,一直没有关注到这个问题,也算是长了个知识。

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容