STM32F207通过FSMC读取ADC数据

STM32F207通过FSMC读取ADC数据

1.控制寄存器配置

在这里插入图片描述
19:写突发使能
0:写操作为异步模式,1:同步模式
15:异步传输等待模式
0:异步时不等待(默认),1:异步时等待
14:扩展模式
可编程BWTR寄存器
0:关闭(默认),1:开启
13:等待模式
0:NWAIT无效,1:有效(默认)

2.时钟配置

每次读数只有七个脉冲,而adc要求有8个时钟周期的时延。
看看没发读数命令时是否有时钟输出?
看看单次发读数命令是否只有一个脉冲串?
为什么fsmc初始化完成后直接64m内存就写满数据了?

单步运行程序,每运行一次,发送的是一组脉冲串,每组脉冲串内部有7个脉冲,频率为20MHz,此为ADC采样频率。脉冲串之间的间隔为20us,脉冲串个数未知,但是从0x60000000地址开始的64M地址空间全部写满。

现象1:将 hsram1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;设为DISABLE后,时钟脉冲消失;
现象2:使用DEBUG模式读0XA0000000地址空间时,时钟脉冲也会消失;改成读0X60000000时又会重新出现。

发现NE1信号每隔20us触发一个低电平,宽度400ns
NADV信号宽度50ns,但是触发频率一直在抖动

同步突发模式只有CLKDIV和DATLAT两个设置项,不知道怎么设置读数长度。
把DATLAT默认是设置为2,设置成0后,脉冲数变为20个,NE1低电平脉冲宽度1us,但是时间间隔变成40us
在这里插入图片描述
好像是使用的单次突发模式
在这里插入图片描述

fsmc的同步工作模式应该是初始化之后就一直开始读数。然后配置psram的同步模式,应该把datlat设置成0。每次脉冲串会有21个脉冲。这个模式不能控制读数时间长度,不能一直连续读数,所以与ADC之间应该加一个双口RAM。

datlat设置成2是7个脉冲,3是8个脉冲,最多设置成15,一共20个脉冲

发现ADC输出不正常原因是STM32的MCO时钟输出引脚速度配置为低,导致时钟不对。
在这里插入图片描述

2020.2.11
在ADC和STM32中间加一个FIFO,FIFO与STM32的通信还是采用FSMC功能
我们只有一个外设,然后又没有地址,所以NE和NADV信号不需要,就直接把NOE送给FPGA,等一个周期后再转发给FIFO的RDEN,然后把NWAIT信号接到FIFO的EMPTY,如果没数据就等待,有数据就读数.
NWAIT的CFG设置为1,

2020.02.20
ADC-----FPGA-----STM32
FPGA里面做FIFO和RAM两级缓存。FIFO接收STM32的写控制指令来读ADC的数据,一边读一边给RAM发送数据;RAM接收的数据循环存储在地址空间里面,收到SMT32的读数指令后将最新的20000个数据通过FSMC发送给STM32。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pp_0604

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值