【求助】STM32如何实现IO口高速并行通信

2019-07-20 23:18发布

我的项目中需要用到传感器输出的是10M、10bit的高频并行数据,数据在时钟的上升沿锁存输出;在这种情况下,大家有没有什么好的方法可以实现高速并行通信来读取IO的并行数据

目前的我想利用DMA,数据源设为GPIO->IDR,来读取数据。但是DMA的触发可以达到10M吗?而且STM32的DMA好像无法实现外部触发吧?这个如果可以改选用DMA的那个触发源?


不知道各位大神有没有什么好的方法?FSMC?
谢谢!




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
ricefat
1楼-- · 2019-07-21 22:24
 精彩回答 2  元偷偷看……
lonky
2楼-- · 2019-07-22 00:18
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-22 00:20
lonky 发表于 2016-1-4 21:23
感谢原子哥!103确实不太好搞,于是我上了407的片子,407的话也一定要用FSMC吗?能不能直接DMA2读 ...

用FSMC比较好.
DMA+GPIO也是可以的,不过我测试过,速度也不是很理想.不过可以利用DCMI接口,来读取数据,这个东西可以很快,而且是被动的(时钟由外部提供),非常适合高速ADC数据读取.
不过DCMI最高只有14位,对16位情况无法使用.不过你用10位问题不大.

lonky
4楼-- · 2019-07-22 04:05
正点原子 发表于 2016-1-4 23:15
用FSMC比较好.
DMA+GPIO也是可以的,不过我测试过,速度也不是很理想.不过可以利用DCMI接口,来读取数据,这 ...

今天尝试了下DCMI+DMA,说实话DCMI非常适合我的情况。但是对于DCMI有些疑虑:
(1)DCMI使用DMA来搬运数据到底该什么时候开始?
       手册上说DCMI每收到一个完整的32位数据块时,都将触发DMA请求。这样说来我是不是该在有效数据开始传输时就开启DMA来搬运?
       但在硬件同步模式下(我的工作模式),启用捕获时,数据传输将于VSYNC信号的无效电平同步,这个又是什么意思呢?是说在发送帧结束中断再开启DMA传输吗?
(2)我的信号在使能信号拉高时连续输出4K个10bit数据,那我的DMA Buffersize是不是该设为2K(4K的一半)?

不好意思又要麻烦原子哥了,非常感谢!!
250229163
5楼-- · 2019-07-22 07:29
感谢原子哥和论坛诸位大神@正点原子
采用DCMI完美解决,目前测试的速度在42M压力不大,再往上就不清楚了(手册上说支持54M速度)。对于这种被动高速并行采样而言,DCMI要比FSMC更为好用。
lonky
6楼-- · 2019-07-22 13:09
您好,请问可以参考下您的代码吗,最近也在做类似的东西,非常感谢

一周热门 更多>