打印
[STM32F1]

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

[复制链接]
67|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 中断处理输入状态。

使用特权

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

本版积分规则

4

主题

5

帖子

0

粉丝