打印

SDIO秒杀了2个串口,请问版主有没有办法解决?

[复制链接]
4537|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mcustar|  楼主 | 2012-3-12 22:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
芯片是STM32103ZE。SDIO的GPIO占用了UART4和UART5,偏偏这3位老大都不能重映射IO,我项目要用一个SDIO和4个串口(最好有5个串口)。UART5就不指望了,想试着看UART4能不能用。为了尽量不和UART4冲突,我小心翼翼的把SDIO设置成1位模式,但测试结果令人失望,一旦打开SDIO的时钟,那么UART4的TXD就无法使用了,但RXD却能用。不好表述,列个表吧,我的资源是这样分配的:

SDIO 的D0-> 被SDIO自己占用(SDIO设置成1位模式),正常。
SDIO 的D1->用作普通的GPIO,正常。
SDIO 的D2->用作UART4的TXD,无法使用!
SDIO 的D3->用作UART4的RXD,正常。
SDIO 的D4->用作I2C1重映射后的SCL,I2C1正常。
SDIO 的D5->用作I2C1重映射后的SDA,I2C1正常。

郁闷了,SDIO不影响UART4的RXD,也不影响I2C1,偏偏只影响UART4的TXD,这是神马道理呢,请教香主及各位看官可有高见?
沙发
IJK| | 2012-3-13 09:38 | 只看该作者
首先,STM32F1的IO设置确实有些不明不白的地方。LZ多换几种模式试试看,很难保证能行。
实在不行可以考虑STM32F2或者F4。

使用特权

评论回复
板凳
zchong| | 2012-3-13 09:59 | 只看该作者
STM32管脚资源太难分配了,看看就头大

使用特权

评论回复
地板
香水城| | 2012-3-13 14:34 | 只看该作者
看了一下勘误手册,很不幸,LZ碰到了一个芯片的已知Bug:


原文在这里:http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/ERRATA_SHEET/CD00197763.pdf

使用特权

评论回复
5
香水城| | 2012-3-13 14:38 | 只看该作者
如果可以的话,可以不同时使用SDIO和UART4,利用软件在使用SDIO时关闭UART4,在使用UART4时关闭SDIO。这样比较麻烦,但这是没有办法的办法。

使用特权

评论回复
6
mcustar|  楼主 | 2012-3-13 19:13 | 只看该作者
谢谢各位,泪奔中。但香主说的分时复用也不可行,我测试的只要打开SDIO的RCC,UART4的TXD就无法再使用,即使再次关闭SDIO的RCC。
看来只有把SD卡改成SPI总线了,这样UART4和UART5都可以用了,改板子吧。

使用特权

评论回复
7
dfsa| | 2012-3-13 19:41 | 只看该作者
貌似只能改板子了

使用特权

评论回复
8
秋天落叶| | 2012-3-13 19:54 | 只看该作者
碰到这样的问题,的确是很郁闷

使用特权

评论回复
9
logokfu| | 2012-3-14 10:20 | 只看该作者
汗,mark一下

使用特权

评论回复
10
logokfu| | 2012-3-14 10:21 | 只看该作者
居然bug了

使用特权

评论回复
11
whhityang| | 2012-3-14 11:18 | 只看该作者
这种bug都能遇到,运气真好呀

使用特权

评论回复
12
呆瓜一个| | 2012-3-14 17:16 | 只看该作者
楼主看看我这个方法是否可行,UART4的TX无法使用,但UART4的RX可以使用,那么楼主可以使用一个GPIO和一个定时器模拟一个UART4的TX端,GPIO产生电平,定时器用于匹配波特率。RX照用原来的UART4_RX,这样您这个问题是不是就解决了。而且模拟UART TX难度不大。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
香水城 + 2 是个办法。
13
mohanwei| | 2012-3-14 21:27 | 只看该作者
定时器模拟串口吧,这么快的单片机……
我曾经用50MHz的LM3SXXX模拟了5个串口,只用了一个定时器

使用特权

评论回复
14
IJK| | 2012-3-15 09:45 | 只看该作者
LS两位的办法挺好,另外还可以考虑使用定时器+DMA

使用特权

评论回复
15
mcustar|  楼主 | 2012-3-17 09:02 | 只看该作者
是个办法,谢谢楼上三位,回头我试试,不过我之前没有模拟过。

使用特权

评论回复
16
mcustar|  楼主 | 2012-3-17 21:26 | 只看该作者
搞定了,谢谢各位,不用改板子了。
要先打开SDIO的RCC,再打开串口的RCC。用UART的RXD直接当作GPIO用,模拟发送,可以成功。

使用特权

评论回复
17
lizilin595| | 2020-4-28 15:31 | 只看该作者
(我来碰碰运气楼主是怎么解决这个问题的!求解答~)

使用特权

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

本版积分规则

2

主题

7

帖子

0

粉丝