[STM32F1] 串口不够用了,可以将某一USART分时映射到不同GPIO引脚来扩展串口吗?

[复制链接]
1394|11
 楼主| st316 发表于 2023-10-16 06:55 | 显示全部楼层 |阅读模式
我用的STM32F103ZET6上面有5个串口,但有6个模块需要通过串口和芯片通信。

现打算将USART2分时映射到不同的GPIO引脚上面,来达到扩展串口的目的。

某一时间段内:
        PD5     ------> USART2_TX
        PD6     ------> USART2_RX
另一时间内:
        PA2     ------> USART2_TX
        PA3     ------> USART2_RX

不知这种方法从原理上是否可行?

我测试了以下两种实现方式均没有成功。
1. 切换时先通过 HAL_UART_DeInit(&huart2) 关掉串口2,然后用 MX_USART2_UART_Init() 初始化。
2. 什么都不做,直接把之前的 GPIO 通过 HAL_GPIO_DeInit(GPIOx, GPIO_PIN_a|GPIO_PIN_b); 接触映射,q然后将新的 GPIO 通过 HAL_GPIO_Init() 映射做为串口2的 TX 和 RX.

望遇到过类似问题的朋友指点迷津,谢谢啦!

评论

xch
临时工不好用  发表于 2023-10-16 13:48
cr315 发表于 2023-10-16 09:37 | 显示全部楼层
应该可以的,具体实现方式可以通过软件编程来完成。
jobszheng 发表于 2023-10-16 09:58 | 显示全部楼层
可以的,基于分时复用的策略。
编程的时候略复杂一些,在切换时,注意要先确保TXD的发送完成,再切换。
yiy 发表于 2023-10-16 11:31 | 显示全部楼层
肯定可以,你可以在ST cubeMX配置里设置使用哪些引脚。
玄德 发表于 2023-10-16 12:02 | 显示全部楼层

分时复用,肯定可行。


yangxf1217 发表于 2023-10-16 14:48 | 显示全部楼层
改管教定义的话不重启重新初始化应该不行,反正我是这么试过没成功。
xueyingdao 发表于 2023-10-16 16:52 | 显示全部楼层
这么搞,还不如上一个 CD4052 ,一个串口 附加两个io口,就可以拓展4个分时串口了。最好的办法,就是协议层面去统一,前提是能修改后端的设备的串口程序。
shizaigaole 发表于 2023-10-16 18:18 | 显示全部楼层
用定时,配合GPIO自己做一个,如果频率不是足够高的话
chenjun89 发表于 2023-10-16 21:34 来自手机 | 显示全部楼层
肯定不行啊,可以用模拟开关分时复用
mbutterfly 发表于 2023-10-17 13:00 | 显示全部楼层
应该可以吧。是不是漏了哪个步骤。
Tiger200102 发表于 2023-10-17 15:09 | 显示全部楼层
应该可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

167

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部