打印

STM32F103如何在io口上输出连续高速的高低电平变化?

[复制链接]
4272|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kevinleez|  楼主 | 2010-12-1 18:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我把问题重新说明一下,之前的一个帖子可能没有说的很明白。
我现在要实现的就是把我SD卡中的一个文件内的数据,通过一个IO口,把数据的8位连续的在这个io口上输出。
比如数据库中的数据是AA,55,33,那么如果高位在前输出的话,这个IO口上要连续输出10101010 01010101 00110011。
当然这样是没有问题,可以用SPI和DMA结合输出大容量数据。
但是我现在的问题是,我的数据比如AA,55,33,我只需要连续输出每个byte中的高7位数据,也就是IO口上连续输出1010101 0101010 0011001。
而且每个数据的7bit之间都不能有空隙,必须是全部连续的,现在要实现2Mhz的频率发送,也就是0.5us一个bit,如果每个byte发送7位数据,按上面的例子,就是要占用3*7*0.5us=10.5us。
当然,我的数据量远远不止3个,有几万个数据。
如果是这样的情况,用这个STM32F103要如何实现啊?实在想不到好的方法。
(不知道这样说明情况是否清楚,如果有不清楚的,我继续说明)
沙发
kevinleez|  楼主 | 2010-12-1 18:31 | 只看该作者
当然,我把我要发送的数据的具体格式也发上来,大家可以也看一下。

送给 SDI 脚的输入信号必须遵循下列定义:
a. 有效输入数据必须为曼彻斯特编码,信号从高到低跳变表示"1",从低到高
跳变表示"0"
b. 在芯片上电后必须先发一次同步帧,以便芯片检测通讯的波特率。同步帧的
格式为:15’b111111111111111+4’b0001+11’b00000000000,在发送同步
帧后必须延时一段时间再发送数据帧,这样做是为了每个芯片都能准确检测
到通讯的波特率,延时时间(us)大于:连接芯片数÷通讯波率(MHz)×30
c. 在发送若干帧数据后,重新发送一次复位帧,等待1ms 之后,再发送一次同
步帧, 以便芯片消除积累误差, 复位帧格式为:
15’b111111111111111+4’b0100
d. 数据帧格式为:15’b111111111111111+4’b0010(数据头)+ 第一个芯片
39bit 数据 + 第二个芯片39bit 数据 + …… + 第n 个芯片39bit 数据
e. 第一个芯片为最先接收数据的芯片,芯片的数据格式为:1’ b0(标识位) + 12’
bxxxxxxxxxxxx(输出端口1 数据) + 1’ b0(标识位) + 12’ bxxxxxxxxxxxx(输
出端口2 数据) + 1’ b0(标识位) + 12’ bxxxxxxxxxxxx(输出端口3 数据),
x 为1 或则0
f. 数据先发送 MSB(最高位)
g. SDI 输入脚在空闲状态时,必须保持低电平
h. 同一帧数据发送过程中,必须连续发送,中间不能有中断,发送频率也不能
改变。

使用特权

评论回复
板凳
mxh0506| | 2010-12-1 20:58 | 只看该作者
确实是个棘手的问题。考虑用SPI+DMA?可能在启动DMA之前先要拼合数据,每个字节去掉一位才行。麻烦啊。

使用特权

评论回复
地板
kevinleez|  楼主 | 2010-12-1 23:15 | 只看该作者
是的,非常麻烦。
所以有考虑外加cpld或者fpga。
也有可能可以考虑用fpga上nios来完成所有功能。
郁闷啊。纠结啊。

使用特权

评论回复
5
mcuisp| | 2010-12-2 08:34 | 只看该作者
从SD卡读取的速度跟不上的。2MHz呢

使用特权

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

本版积分规则

46

主题

137

帖子

2

粉丝