OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5390|回复: 17

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

[复制链接]

2

主题

18

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2015-11-5
在线时间
19 小时
发表于 2015-12-29 21:26:19 | 显示全部楼层 |阅读模式
30金钱
我的项目中需要用到传感器输出的是10M、10bit的高频并行数据,数据在时钟的上升沿锁存输出;在这种情况下,大家有没有什么好的方法可以实现高速并行通信来读取IO的并行数据

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


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




最佳答案

查看完整内容[请看2#楼]

1,给一个PIXCLK时钟,就读取一次DCMI_D0~D14. 有效数据是指HREF,当HREF=0/1的时候,数据才被捕获.这个电平是可以自己设置的.相当于EN. 2,10bit会被封装成16位数据.至于buf是多少,得根据你的传输次数和存储器的大小来确定.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-12-29 21:26:20 | 显示全部楼层
lonky 发表于 2016-1-5 20:26
今天尝试了下DCMI+DMA,说实话DCMI非常适合我的情况。但是对于DCMI有些疑虑:
(1)DCMI使用DMA来搬运数 ...

1,给一个PIXCLK时钟,就读取一次DCMI_D0~D14.
有效数据是指HREF,当HREF=0/1的时候,数据才被捕获.这个电平是可以自己设置的.相当于EN.
2,10bit会被封装成16位数据.至于buf是多少,得根据你的传输次数和存储器的大小来确定.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2015-12-29 21:44:16 | 显示全部楼层
这个还是上CPLD或是FPGA吧,不是单片机干的活
回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2015-12-29 22:06:39 | 显示全部楼层
DMA是必须的,但源头应当是FSMC。
触发信号问题,要看传感器的情况,是否有“信号准备好”、“转换完成”之类的主动输出端。

如果有,要考虑用定时器转换一下,再触发DMA。
如果没有,就要靠CPU自主生成,同样要考虑定时器。
10M数据率有点紧张,但也是有可能的,至少几M应当没问题。

但是,有没有考虑过数据怎么处理?CPU内部没有这么大的存储器,处理也需要时间。

综合考虑,单靠CPU是否可行呢?


回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-12-29 22:50:58 | 显示全部楼层
STM32F103的FSMC,也就8M左右的速度.如果你要10M的速度,的确很麻烦.用103有点悬.就算你能及时读取,数据存储也是个很大的问题.
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-12-29 22:50:58 | 显示全部楼层
STM32F103的FSMC,也就8M左右的速度.如果你要10M的速度,的确很麻烦.用103有点悬.就算你能及时读取,数据存储也是个很大的问题.
回复

使用道具 举报

2

主题

18

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2015-11-5
在线时间
19 小时
 楼主| 发表于 2015-12-30 08:59:07 | 显示全部楼层
ricefat 发表于 2015-12-29 21:44
这个还是上CPLD或是FPGA吧,不是单片机干的活

恩,有想过上FPGA,但是为了考虑成本,还是想选用STM32(如果可行的话)
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2015-12-30 09:15:34 | 显示全部楼层
lonky 发表于 2015-12-30 08:59
恩,有想过上FPGA,但是为了考虑成本,还是想选用STM32(如果可行的话)

STM32速度达不到10M,也许汇编能好点。另外如上面所说,就算速度能够达到要求,怎么储存和及时取出也是个问题。
回复

使用道具 举报

2

主题

18

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2015-11-5
在线时间
19 小时
 楼主| 发表于 2016-1-4 21:23:59 | 显示全部楼层
正点原子 发表于 2015-12-29 22:50
STM32F103的FSMC,也就8M左右的速度.如果你要10M的速度,的确很麻烦.用103有点悬.就算你能及时读取,数据存储 ...

       感谢原子哥!103确实不太好搞,于是我上了407的片子,407的话也一定要用FSMC吗?能不能直接DMA2读取GPIOB->IDR 的数据搬运出来。
       我今天试过单独用DMA读取GPIOB->IDR 的值,但是收到的数据完全不对,接不接传感器的 数据口都是一个样,这时我想应该是我的配置有问题。
      但是我不接传感器的数据口直接给某个PB脚高电平,串口里输出的DMA2目的Buff得值却是完全对应的,这样说来,配置应该也问题不大。所以搞不懂是什么原因?难道DMA2不能直接读取GPIOB->IDR吗??
      还有一个问题,DMA2读取GPIOB->IDR的值时,此时我外部一直给PB0高电平,按理说Buff的值应该全为0x01,但是串口观察到的Buff数据前一半是0x01,后一半是0x00。不知道大神们有遇到这种问题吗??
      DMA的配置:外设到存储器模式;Normal传输(size=20);外设地址:GPIOB->IDR(禁止地址递增); 存储器地址:Buff数组的首地址(开启地址递增)
      不好意思不知道怎么贴代码,不知道我说清楚了没有
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-1-4 23:15:48 | 显示全部楼层
lonky 发表于 2016-1-4 21:23
感谢原子哥!103确实不太好搞,于是我上了407的片子,407的话也一定要用FSMC吗?能不能直接DMA2读 ...

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

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

18

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2015-11-5
在线时间
19 小时
 楼主| 发表于 2016-1-5 20:26:26 | 显示全部楼层
正点原子 发表于 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的一半)?

不好意思又要麻烦原子哥了,非常感谢!!
回复

使用道具 举报

头像被屏蔽

12

主题

26

帖子

0

精华

禁止发言

积分
112
金钱
112
注册时间
2013-3-16
在线时间
29 小时
发表于 2016-1-6 14:32:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

2

主题

18

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2015-11-5
在线时间
19 小时
 楼主| 发表于 2016-1-8 18:16:33 | 显示全部楼层
感谢原子哥和论坛诸位大神@正点原子
采用DCMI完美解决,目前测试的速度在42M压力不大,再往上就不清楚了(手册上说支持54M速度)。对于这种被动高速并行采样而言,DCMI要比FSMC更为好用。
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2018-1-25
在线时间
32 小时
发表于 2019-7-2 00:07:06 | 显示全部楼层
您好,请问可以参考下您的代码吗,最近也在做类似的东西,非常感谢
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2020-7-21
在线时间
0 小时
发表于 2020-7-21 21:45:23 | 显示全部楼层
Enshadower 发表于 2019-7-2 00:07
您好,请问可以参考下您的代码吗,最近也在做类似的东西,非常感谢

老哥,解决了吗?加个Q240941760交流一下吧
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2023-4-4
在线时间
11 小时
发表于 2023-12-19 19:47:00 | 显示全部楼层
lonky 发表于 2016-1-8 18:16
感谢原子哥和论坛诸位大神@正点原子
采用DCMI完美解决,目前测试的速度在42M压力不大,再往上就不清楚了 ...

大佬,可以看一下你的代码吗?非常感谢!!!最近也遇到相似的问题需要时钟的下降沿并行输出数据,且时钟速度要达到12M以上;
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2023-4-4
在线时间
11 小时
发表于 2023-12-19 19:47:26 | 显示全部楼层
花落123 发表于 2023-12-19 19:47
大佬,可以看一下你的代码吗?非常感谢!!!最近也遇到相似的问题需要时钟的下降沿并行输出数据,且时钟 ...

我的qq1525915366
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2023-4-4
在线时间
11 小时
发表于 2023-12-19 19:47:53 | 显示全部楼层

可以交流一下吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 16:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表