打印
[STM32F1]

一个IO口同时配置为输入输出功能,这样对不?

[复制链接]
549|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lvluoo|  楼主 | 2025-3-3 22:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想要在stm32f103中配置一个引脚同时具备输入和输出功能,这种功能能否实现?输出时配置为输出,
用作输入时再配置回输入,这样循环往复。
有没有可以参考的例程?
以下是我自己写的,
用作输出时这样配置
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
GPIO_Init(GPIOE, &GPIO_InitStruct);
用作输入时这样配置
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; // so change the strut to from Alt funct to GPIO (in)
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
GPIO_Init(GPIOE, &GPIO_InitStruct);

使用特权

评论回复
沙发
公羊子丹| | 2025-3-4 07:40 | 只看该作者
这种方法是可行的,我之前也用过类似的方式来切换输入输出,但频繁修改寄存器会不会影响性能?

使用特权

评论回复
板凳
周半梅| | 2025-3-4 07:43 | 只看该作者
你这种方式可以实现输入输出切换,不过每次都要重新初始化 GPIO,有没有考虑直接用寄存器操作?

使用特权

评论回复
地板
帛灿灿| | 2025-3-4 07:45 | 只看该作者
STM32F1 这种切换方式没问题,但如果对时序要求比较高,可能要注意切换时的延迟问题。

使用特权

评论回复
5
童雨竹| | 2025-3-4 07:47 | 只看该作者
这个方法适用于简单的应用,但如果想更高效,可以试试开漏模式 + 外部上拉,这样可以减少配置 GPIO 的次数。

使用特权

评论回复
6
万图| | 2025-3-4 07:49 | 只看该作者
你测试过这段代码在高频率切换时的效果吗?会不会因为 GPIO 复位导致短暂的不稳定?

使用特权

评论回复
7
Wordsworth| | 2025-3-4 07:51 | 只看该作者
其实可以用 GPIO 模式切换的方法,但如果是双向数据通信,考虑下 I2C 或者 USART 可能更合适。

使用特权

评论回复
8
Bblythe| | 2025-3-4 07:53 | 只看该作者
我也遇到过类似的需求,但后来发现直接用两个引脚分别做输入和输出,逻辑上控制,反而更稳定。

使用特权

评论回复
9
Pulitzer| | 2025-3-4 07:57 | 只看该作者
你有没有试过直接用寄存器修改 GPIO 模式,而不是用 HAL 库?可能速度会快一些。

使用特权

评论回复
10
Uriah| | 2025-3-4 08:00 | 只看该作者
如果只是简单的状态检测和输出,考虑用开漏模式结合外部上拉,可能更方便一点。

使用特权

评论回复
11
Clyde011| | 2025-3-4 08:02 | 只看该作者
你的代码是可以工作的,但如果频繁切换,建议看看是否有更优的方法,比如利用 EXTI 中断处理输入状态。

使用特权

评论回复
12
香水城| | 2025-4-22 10:33 | 只看该作者
其实配置为OD模式即可。

使用特权

评论回复
13
温室雏菊| | 2025-4-23 01:24 | 只看该作者
一般是可以的,但是切换会有个时间,你要注意

使用特权

评论回复
14
失物招領| | 2025-4-23 02:27 | 只看该作者
这是什么个应用模式啊?还输入输出的

使用特权

评论回复
15
她已醉| | 2025-4-23 03:24 | 只看该作者
一般I2C不就这么配置吗

使用特权

评论回复
16
将爱藏于深海| | 2025-4-23 04:46 | 只看该作者
STM32F103 中,一个引脚不能同时具备输入和输出功能(即不能同时作为输入和输出引脚使用)。这是因为 GPIO 引脚在硬件层面只能被配置为一种模式(输入、输出、复用功能或模拟模式)。不过,你可以通过软件动态切换引脚模式,在需要输出时配置为输出模式,在需要输入时配置为输入模式。这种方法可以实现引脚在不同功能之间的切换

使用特权

评论回复
17
捧一束彼岸花| | 2025-4-23 05:21 | 只看该作者
STM32F103 GPIO 引脚模式由寄存器 GPIOx_CRL GPIOx_CRH 配置,每个引脚的模式由 4 位寄存器值决定。硬件上,引脚只能处于一种模式,无法同时处于输入和输出模式

使用特权

评论回复
18
故意相遇| | 2025-4-23 06:36 | 只看该作者
虽然不能同时具备输入和输出功能,但你可以通过动态切换在需要时,通过修改 GPIOx_CRL GPIOx_CRH 寄存器,动态切换引脚模式

使用特权

评论回复
19
春日负喧| | 2025-4-23 07:27 | 只看该作者
每次切换模式都需要重新配置寄存器,可能会引入一定的开销。如果需要频繁切换,建议优化代码逻辑,减少不必要的切换

使用特权

评论回复
20
白马过平川| | 2025-4-23 08:37 | 只看该作者
在切换模式前,确保引脚状态不会影响系统功能。例如,在切换为输入模式前,确保引脚未被驱动为高阻态或悬空状态

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

17

帖子

0

粉丝