OpenEdv-开源电子网

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

stm32f103外接12位并口高速20Madc,怎么实现实时高速读取

[复制链接]

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-12-4
在线时间
20 小时
发表于 2017-12-5 17:31:23 | 显示全部楼层 |阅读模式
stm32f103外接12位并口高速20Madc,怎么实现实时高速读取。是在两者之间加FIFO数据缓存器还是什么设计。用的是ad9224这款芯片,目的实时显示测得波形数据
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8062
金钱
8062
注册时间
2014-8-13
在线时间
1597 小时
发表于 2017-12-5 21:50:55 | 显示全部楼层
本帖最后由 mack13013 于 2017-12-5 22:18 编辑
李白 发表于 2017-12-5 20:18
没时间学fpga了   我现在如果买个FIFO   主要看什么参数啊   传输速度吗。有人说FSMC可以达到几十兆的读 ...

DMA读取,开辟一段缓存用来存放DMA读来的数据,这段缓存用FIFO的方法存取。
103只有72MHz的主频啊,不用DMA的话,单单IO就用掉至少20MHz(应该是20MHz的几倍),基本没什么资源可以用来操作显示了。

你这个可以用定时器触发ADC,用ADC触发DMA(或者用定时器同时触发DMA和ADC,但是DMA此次读取的数据是ADC上次转换的数据,时序不太严格的话就加个锁存)。这样ADC数据搬运工作交给DMA,MCU专注读取数据并显示就可以了(刷新率应该不需要太多,MCU还可以空余出资源做做波形处理什么的)。

FSMC类似,但是MCU资源应该比DMA占用要高。

回复 支持 0 反对 1

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8062
金钱
8062
注册时间
2014-8-13
在线时间
1597 小时
发表于 2017-12-7 01:20:51 | 显示全部楼层
李白 发表于 2017-12-6 10:09
您能指导下 为啥不支持加SRAM   如果我用ZET6,怎么设计可以满足需求。我还有一路adc是100ks的,只采集峰 ...

采集峰值的可以采用峰值保持电路,这样ADC常规采集就是峰值了,不用采集了之后再求出峰值。
感觉加SRAM没什么用啊。最多放到FSMC上做片外RAM。
如果是双口SRAM,ADC数据直接存入RAM不经过MCU,估计不便宜,而且比不用SRAM要麻烦不少,并没有节省什么东西,反而更麻烦。

回复 支持 1 反对 0

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8062
金钱
8062
注册时间
2014-8-13
在线时间
1597 小时
发表于 2017-12-5 23:16:27 | 显示全部楼层
李白 发表于 2017-12-5 22:36
这个FIFO选择有什么刚性要求不  我选了款FIFO芯片SN74ALS232BDW,附带参数

这个硬件缓存芯片哪里够用啊,这才16字节。

直接开辟一段内存做FIFO就可以了,设置读写两个指针。不需要外部硬件缓存的,MCU的内存开辟1K(至少)-50K(103才64K内存,给FIFO50K之后,自己也不剩多少了,到不如换STM32F407ZG,管脚应该可以兼容,主频高,RAM有1M,直接开辟个800K的FIFO,MCU就会轻松很多),然后管理好读写指针,做起来应该不难。
回复 支持 1 反对 0

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-12-4
在线时间
20 小时
 楼主| 发表于 2017-12-5 17:32:04 | 显示全部楼层
顶一个
回复 支持 反对

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8062
金钱
8062
注册时间
2014-8-13
在线时间
1597 小时
发表于 2017-12-5 17:48:42 | 显示全部楼层
本帖最后由 mack13013 于 2017-12-5 17:51 编辑

这个速度,最好做个FIFO,然后DMA在读取。MCU直接驱动IO,还要实时显示,MCU压力太大,不太可能了,必然要交给外设了。

如果让我来做这个的话,肯定是FPGA了,然后选择LVDS通讯的ADC。103做这个压力比较大。
回复 支持 反对

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-12-5 18:20:49 | 显示全部楼层
FMSC  或者DMA..
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-12-4
在线时间
20 小时
 楼主| 发表于 2017-12-5 20:18:00 | 显示全部楼层
mack13013 发表于 2017-12-5 17:48
这个速度,最好做个FIFO,然后DMA在读取。MCU直接驱动IO,还要实时显示,MCU压力太大,不太可能了,必然要 ...

没时间学fpga了   我现在如果买个FIFO   主要看什么参数啊   传输速度吗。有人说FSMC可以达到几十兆的读取速度
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-12-4
在线时间
20 小时
 楼主| 发表于 2017-12-5 20:18:45 | 显示全部楼层

你的意思直接用FMSC   不用外接FIFO
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-12-4
在线时间
20 小时
 楼主| 发表于 2017-12-5 22:36:03 | 显示全部楼层
mack13013 发表于 2017-12-5 21:50
DMA读取,开辟一段缓存用来存放DMA读来的数据,这段缓存用FIFO的方法存取。
103只有72MHz的主频啊,不用 ...

这个FIFO选择有什么刚性要求不  我选了款FIFO芯片SN74ALS232BDW,附带参数
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-12-4
在线时间
20 小时
 楼主| 发表于 2017-12-5 22:39:31 | 显示全部楼层
这64位内存具有高速和快速落空次。它是作为16个字了4比特。先入先出( FIFO)存储器是存储装置,其允许数据写入和读从其在独立的数据传输速率阵列。这FIFO被设计为速率高达处理数据,以40兆赫的位并行格式,一字一句。数据被写入到存储器上的一个低到高的在负载时钟跳变( LDCK )输入,并读出的由低到高的转变卸载时钟( UNCK )输入。内存已满当单词的数目主频在超过由16个字的数量逐个输出。当内存已满, LDCK信号,对无影响驻留在内存中的数据。当存储器是空, UNCK信号有任何影响。LDCKD0NCD1D245678FN包装( TOP VIEW )满OENCVCCUNCK3 2 1 20 1918171615149 10 11 12 13空Q0NCQ1Q2D3GNDNCNC - 无内部连接FIFO存储器的状态由FULL和EMPTY输出标记监控。完整的输出为低电平时,内存已满,高的时候是不完整的。空输出为低电平时,内存是空的,高当它不是空的。上电复位( RST )输入的低电平复位内部堆栈指针的控制,并设置EMPTY低,套FULL高。 Q输出不返回到任何特定的逻辑电平。在LDCK头低到高的转变,后任一个RST脉冲或从空的状态下,使EMPTY变为高电平,并出现在所述数据Q输出。
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-12-4
在线时间
20 小时
 楼主| 发表于 2017-12-5 23:26:10 | 显示全部楼层
mack13013 发表于 2017-12-5 23:16
这个硬件缓存芯片哪里够用啊,这才16字节。

直接开辟一段内存做FIFO就可以了,设置读写两个指针。不需 ...

亲哥  首先太感谢您了。我学习的f103,也只是基础,不知道要花多久才能学会f4,而且我之前做了一块板子了,时间也很急,快要交了,您能看ALIENTEK 战舰 STM32F103 板载资源如下:
◆ CPU: STM32F103ZET6, LQFP144, FLASH: 512K, SRAM: 64K;
◆ 外扩 SRAM: IS62WV51216, 1M 字节
◆ 外扩 SPI FLASH: W25Q128, 16M 字节。这个芯片 IS62WV51216够用了吧,您说我就在CPU和ad之间加个这个可以吧
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-12-4
在线时间
20 小时
 楼主| 发表于 2017-12-5 23:49:38 | 显示全部楼层
mack13013 发表于 2017-12-5 21:50
DMA读取,开辟一段缓存用来存放DMA读来的数据,这段缓存用FIFO的方法存取。
103只有72MHz的主频啊,不用 ...

IS62WV51216 是 ISSI( Integrated Silicon Solution, Inc)公司生产的一颗 16 位宽 512K
( 512*16,即 1M 字节)容量的 CMOS 静态内存芯片。该芯片具有如下几个特点:
 高速。具有 45ns/55ns 访问速度。
 低功耗。
 TTL 电平兼容。
 全静态操作。不需要刷新和时钟电路。
 三态输出。
 字节控制功能。支持高/低字节控制。
回复 支持 反对

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8062
金钱
8062
注册时间
2014-8-13
在线时间
1597 小时
发表于 2017-12-6 00:30:48 | 显示全部楼层
李白 发表于 2017-12-5 23:26
亲哥  首先太感谢您了。我学习的f103,也只是基础,不知道要花多久才能学会f4,而且我之前做了一块板子了 ...

你会用STM32F103ZET6,就会用STM32F407ZGT6,他们管脚几乎兼容(只有一个引脚需要改一下高低电平),其他外设几乎一样的驱动方法。103和407之间除了性能不同,407多几个外设,其他没什么不同(有的话,查下手册,不用10分钟就搞定)。

CPU和ADC之间不建议添加RAM做缓存。 如果时序不能满足可以用373(或者74HC573、574)什么的缓冲一下。

你如果换STM32F407ZGT6的话,完全不需要加缓冲(有可能原本就不需要加缓冲,因为那个ADC的数据手册我没细看,有可能ADC本身就带缓存)了。
方法还是之前说的,定时器定时启动ADC和DMA(可由定时器驱动,也可由ADC的EOC驱动)将ADC的数据直接读取到MCU的RAM里就可以了。
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-12-4
在线时间
20 小时
 楼主| 发表于 2017-12-6 10:05:14 | 显示全部楼层
大神我想了想,我还是用f103,加个sram,不够用就延迟显示  延迟一点时间  
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-12-4
在线时间
20 小时
 楼主| 发表于 2017-12-6 10:09:44 | 显示全部楼层
mack13013 发表于 2017-12-6 00:30
你会用STM32F103ZET6,就会用STM32F407ZGT6,他们管脚几乎兼容(只有一个引脚需要改一下高低电平),其他 ...

您能指导下 为啥不支持加SRAM   如果我用ZET6,怎么设计可以满足需求。我还有一路adc是100ks的,只采集峰值,但是两个工作模式是不同时工作的,
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-12-4
在线时间
20 小时
 楼主| 发表于 2017-12-11 16:24:56 | 显示全部楼层
mack13013 发表于 2017-12-5 23:16
这个硬件缓存芯片哪里够用啊,这才16字节。

直接开辟一段内存做FIFO就可以了,设置读写两个指针。不需 ...

stm32f407的ram192k,不过也差不多够用了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-24 05:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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