硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3321|回复: 6
收起左侧

[有问必答] STM32F407,AD7606,FSMC并口读取数据例程疑问,请教坛内

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2021-8-4 23:37:41 | 显示全部楼层 |阅读模式
最近在使用AD7606芯片做一个数据采集器,学习了安富莱相关例程,有几点不理解的,请大神赐教。
1.例程中FIFO是开辟的2K软缓存区,而STM32的硬件FIFO缓存只有16字节?FSMC是否也可以直接调用硬件FIFO?
2.V6,V7版本的软件中在FSMC配置时都开启了FIFO写使能,这个写使能有什么用?因为开辟的内存做FIFO缓存,只要往数组里压数据即可。
3.FSMC的存储区,例如Bank1中使用的是第四片区,#define AD7606_RESULT()        *(__IO uint16_t *)0x6C400000,是将AD7606实时采集的数据先全部存放在0x6C400000这个地址开始的存储区吗?FSMC是什么时候开始往地址存储器器写数据,写数据是硬件操作的吗?
4.读取FSMC存储数据这段函数,从0x6C400000地址开始,以此往后读取每一路的ADC数值?
void AD7606_ReadNowAdc(void)
{
        g_tAD7606.sNowAdc[0] = AD7606_RESULT();        /* ¶áμú1·Ñù±¾ */
        g_tAD7606.sNowAdc[1] = AD7606_RESULT();        /* ¶áμú2·Ñù±¾ */
        g_tAD7606.sNowAdc[2] = AD7606_RESULT();        /* ¶áμú3·Ñù±¾ */
        g_tAD7606.sNowAdc[3] = AD7606_RESULT();        /* ¶áμú4·Ñù±¾ */
        g_tAD7606.sNowAdc[4] = AD7606_RESULT();        /* ¶áμú5·Ñù±¾ */
        g_tAD7606.sNowAdc[5] = AD7606_RESULT();        /* ¶áμú6·Ñù±¾ */
        g_tAD7606.sNowAdc[6] = AD7606_RESULT();        /* ¶áμú7·Ñù±¾ */
        g_tAD7606.sNowAdc[7] = AD7606_RESULT();        /* ¶áμú8·Ñù±¾ */
}

5.既然数据可以往FSMC的储存器里保存,然后定时读取,用于无需实时采集数据的场合。
  FIFO开辟内存,用于实时数据采集。
  两者取其一使用即可?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107072
QQ
发表于 2021-8-5 08:32:39 | 显示全部楼层
1、没有硬件FIFO
2、没用,AD7606用不到写。
3、用户调用 AD7606_RESULT();读取时,是FSMC完成的。
4、这个地址是固定的,连续读取8次,就是读取8路。
5、对。

评分

参与人数 1金币 +1 收起 理由
曹世鹏 + 1

查看全部评分

回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2021-8-5 08:58:28 | 显示全部楼层
eric2013 发表于 2021-8-5 08:32
1、没有硬件FIFO
2、没用,AD7606用不到写。
3、用户调用 AD7606_RESULT();读取时,是FSMC完成的。

调用这个AD7606_RESULT();函数读取8路数据时,由于8路存储了1秒钟的数据,如何分辨每一路这1秒内所采集的所有点数据。
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2021-8-5 09:05:06 | 显示全部楼层
eric2013 发表于 2021-8-5 08:32
1、没有硬件FIFO
2、没用,AD7606用不到写。
3、用户调用 AD7606_RESULT();读取时,是FSMC完成的。

我是想AD7606实时每一路的实时数据都存储在Bank1内,等整个采样过程结束了,将每一路1S内采集到是数据都读取出来,目前是没有看明白,该如何操作。看例程500ms读取一次数据,只读到最后保存的一个采样值?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107072
QQ
发表于 2021-8-5 09:49:39 | 显示全部楼层
tqcg6386363 发表于 2021-8-5 08:58
调用这个AD7606_RESULT();函数读取8路数据时,由于8路存储了1秒钟的数据,如何分辨每一路这1秒内所采集的 ...

是8路依次顺序存储的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107072
QQ
发表于 2021-8-5 09:50:53 | 显示全部楼层
tqcg6386363 发表于 2021-8-5 09:05
我是想AD7606实时每一路的实时数据都存储在Bank1内,等整个采样过程结束了,将每一路1S内采集到是数据都 ...

开个大的缓冲,够存储1s的数据量即可。

每次就绪每次读取。连续存够1s,再从这个缓冲读取出来做处理
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-2-15 13:57:25 | 显示全部楼层
eric2013 发表于 2021-8-5 09:49
是8路依次顺序存储的。

硬汉哥,这个八路顺序读取是如何规定的?是不是每一路读取完,才能读取下一路?比如我想直接读第八路的数据,是不是就得前进行前七次的读取后,才能得到第八路的数据
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-16 11:46 , Processed in 0.314871 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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