STM32CubeMX + AD7606 + FSMC 使用FSMC完成对8080并口的数据读取

AD7606部分

AD7606是一款采样率最高200ksps、8通道、16位AD芯片,可使用8080并口、按字节并口、SPI串行等方式读取AD转换的原始数据。

实验时使用的是安富莱的AD7606模块。

各引脚的作用:

OS2/OS1/OS2 : 组合状态选择过采样模式。

000表示无过采样,最大200Ksps采样速率。过采样倍率越高,ADC转换时间越长,可得到的最大采样频率就越低。

CVA,CVB (输入): 启动AD转换的控制信号。CVA决定1-4通道,CVB决定5-8通道,此实验中使STM32的某个引脚输出频率为200kHz,占空比为50%的PWM,启动AD转换。

RAGE(输入) : 量程范围选择。0表示正负5V, 1表示正负10V.

RD (输入): 读信号,控制RD以控制数据在8080并口输出。RD输入一个下降沿,就在8080并口输出下一个通道的数据。

RST (输入): 复位信号,在上电后都要复位,高电平复位。

BUSY (输出): 忙信号,当CVA,CVB的信号启动AD转换,BUSY变为高,当转换完成后BUSY变为低,随后可通过控制RD将本次转换结果数据输出在8080并口。
CS (输入): 片选信号,低电平有效,只使用单片AD7606的话可一直保持低电平。
FRST(输出) : 第1个通道样本的指示信号,不使用
VIO : 通信接口电平,一般单片机IO电平都为3.3V
DB0-DB15 : 8080数据总线。

总结一下整个数据采集过程:

STM32的CONVST输出频率为200kHz的PWM,当产生上升沿时,AD7606采样保持器保持8个通道的电平,进行AD转换,同时BUSY信号变为高电平,当AD转换完成时,BUSY信号从高电平变为低电平,之后我们就可以开始获取数据了,先在RD产生一个下降沿,DB0~DB15输出通道1的数据,再在RD产生一个下降沿,DB0~DB15输出通道2的数据,以此类推,直至8个通道数据依次输出,从而完成8个通道数据的采集。

在实验中测试发现:8个通道的原始数据通过STM32的FSMC采集耗时大约0.61us,而AD芯片完成8个通道的转换耗时大约4us(手册上的数据),所以我们可以在每次转换开始时(BUSY信号上升沿后)进行数据采集,这样我们每次采集的数据都是上次转换的结果。当我们数据采集完成后,AD芯片的本次转换还未完成,所以不会对数据产生影响(搜索手册中 CONVST时序—转换期间读取)。

 

FSMC部分

本次实验中将AD7606配置为无过采样,通过BUSY触发STM32F407ZG的外部中断引脚,在中断回调函数中,使用STM32的FSMC通过8080并口读取8个通道的采样数据。

由于我们对AD7606只进行读操作,与在FSMC的应用中控制ROM(只读)的情况比较接近。

从时序图上看也比较类似:

所以我们直接将NOE连接至AD7606的RD。

NEx可连接至AD7606的CS,但此次实验中只用了一片AD芯片,所以我们直接使AD7606的CS保持低电平。

NWE是写操作信号,不需要。

D[15:0]连接至DB0~DB15。

 

要使我们能够顺利读取AD7606的数据,还需设置ADDSET、DATAST这两个值设置NOE的高低电平宽度。

在AD7606的手册中要求RD高电平脉冲最短宽度为15ns,低电平最短宽度为21ns(当VIO为3.3V时)。

在时钟数中可以看到HCLK频率为168MHz,即HCLK周期约为5.95ns,所以我们将ADDSET设置为3(大于15ns),DATAST设置为4(大于21ns)。

所以我们在STM32CubeMX中,配置FSMC:

到此为止,STM32CubeMX中的FSMC部分配置都完成了,点击生成代码。

在fsmc.c中:

可以看到AddressSetupTime被设置为了3,DataSetupTime被设置为了4,剩下的4个值都是默认值,在我们设置的FSMC模式下是没有影响的(详情在STM32F4XX中文参考手册的表198),但是以防万一把这4个值都改成了0。

 

初步实验FSMC

①设置OS0、OS1、OS2、RANGE

②RESET下降沿复位AD7606

③CS设置为低电平

④在CONVSTA、CONVSTB输入一个下降沿,使AD7606开始AD转换

⑤延时一段时间,使用FSMC读取:

具体为什么是0x6C000000我也不知道=  =。

/* AD7606 FSMC总线地址,只能读,无需写 */
#define AD7606_RESULT()	*(__IO uint16_t *)0x6C000000
    
int16_t RawData[8];
RawData[0]=AD7606_RESULT();
RawData[1]=AD7606_RESULT();
RawData[2]=AD7606_RESULT();
RawData[3]=AD7606_RESULT();
RawData[4]=AD7606_RESULT();
RawData[5]=AD7606_RESULT();
RawData[6]=AD7606_RESULT();
RawData[7]=AD7606_RESULT();

此时一切顺利的话已经可以读取到原始数据了。

 

其他

为了使采样率达到200ksps,我们在PC6输出一个频率为200kHz的PWM方波,将PC8连接至AD7606的CONVSTA、CONVSTB。

将PG8设置为外部中断触发模式

在main.c中 重定义HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)外部中断回调函数。


/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  //if(GPIO_Pin == BUSY_Pin)
  {
    RawData[0]=AD7606_RESULT();
    RawData[1]=AD7606_RESULT();
    RawData[2]=AD7606_RESULT();
    RawData[3]=AD7606_RESULT();
    RawData[4]=AD7606_RESULT();
    RawData[5]=AD7606_RESULT();
    RawData[6]=AD7606_RESULT();
    RawData[7]=AD7606_RESULT();
  }
}
/* USER CODE END 4 */

结束

了解了8080并口的读取方式,了解了FSMC的应用流程,大致了解了AD7606的工作原理。

### 回答1: STM32操作AD7606说明FSMC方式并行16bit_USB转UART接口(串口)的具体步骤如下: 首先,需要配置FSMC接口以与AD7606通信。FSMC是强大的外设,用于处理外部存储器的通信。需要设置FSMC的时序参数、数据宽度和模式等。根据AD7606的接口规范,配置FSMC的参数以确保能够正确地读取AD7606数据。 然后,将STM32的USB接口与PC连接,以将数据传输到PC上。USB转UART接口通常由USB转串口芯片实现,该芯片与STM32主芯片进行UART通信。需要设置STM32的UART参数,包括波特率、停止位、数据位和校验位等。 接下来,需要编写代码来操作AD7606FSMC和USB转UART接口。首先,通过FSMC读取AD7606数据。根据AD7606的规格书,读取16位并行数据必须遵守严格的时序要求。使用STM32FSMC外设进行读取操作,并将数据存储在特定的寄存器中。 然后,将读取到的数据通过串口发送到PC上。将数据FSMC寄存器读取出来,使用UART发送函数将数据发送到PC。根据UART的特性,确保发送的数据与PC端的串口配置匹配。 最后,需要在PC端使用串口助手等工具来接收和显示来自STM32数据。在PC上打开串口助手软件,选择正确的串口端口和波特率,然后在PC上显示接收到的数据。 需要注意的是,以上仅是整体操作步骤的概述。具体实现还需要根据具体的STM32型号和AD7606规格书进行详细的硬件连接和软件编程。并且需要根据实际情况进行调试和优化,以确保数据的正确传输和显示。 ### 回答2: STM32是一种32位的微控制器,可以通过不同的接口来控制外部设备。在操作AD7606时,可以通过FSMC方式来实现并行16位的数据传输。FSMC(Flexible Static Memory Controller)是STM32的一个特殊的接口,它可以用来连接外部存储器和外设。 AD7606是一种16位的ADC(模数转换器),它可以将模拟信号转换成数字信号。通过FSMC方式,我们可以将AD7606的输出信号接入STM32的外部总线,并将其连接到FSMC接口中的相应引脚。然后,我们可以通过STM32的编程接口(如HAL库)来读取AD7606的输出数据。 为了将AD7606数据传输到PC或其他设备,我们可以使用USB转UART接口。USB(Universal Serial Bus)是一种通用的串行总线,它可以连接不同类型的设备。UART(Universal Asynchronous Receiver/Transmitter)是一种常见的串口通信协议,它可以实现设备之间的异步串行通信。 在我们的应用中,我们可以使用USB转UART模块来连接STM32开发板和PC。通过设置STM32的串口配置,我们可以将AD7606数据通过UART发送到PC。PC上的应用程序可以接收并处理这些数据,以实现我们需要的功能。 总结一下,通过STM32FSMC方式和USB转UART接口,我们可以实现对AD7606的控制和数据传输。使用并行16位的方式,我们可以高效地读取AD7606的输出信号。然后,通过USB转UART接口,我们可以将数据传输到PC或其他设备上,以实现我们的应用需求。 ### 回答3: STM32是一款微控制器,常用于嵌入式系统中。操作AD7606是指与AD7606芯片进行通信和控制,AD7606是一款16位高速采样率的模数转换器。 FSMC(Flexible Static Memory Controller)方式是STM32的一种外设接口模式,用于连接外部存储器和其他外设。通过FSMC方式,可以将STM32AD7606芯片进行连接,实现数据读取和控制。 AD7606芯片是一款带有16个模拟输入通道的多通道模数转换器。通过FSMC方式连接STM32AD7606芯片时,可以通过读取AD7606芯片的数据寄存器来获取模拟输入通道的电压值。通过控制AD7606芯片的控制寄存器,可以设置采样率、工作模式等参数。 USB转UART接口是用于将USB信号转换为UART信号的接口,以便与外部设备进行通信。在本案例中,可以通过使用USB转UART接口,将STM32与计算机或其他设备进行通信。 串口是一种用于将数据以串行方式传输的通信接口。通过UART接口,可以将数据以串行方式发送和接收。在本案例中,通过USB转UART接口,可以将STM32与计算机或其他设备以串口方式进行数据传输。 总结起来,本案例中的任务是通过FSMC方式将STM32AD7606芯片进行连接,实现对AD7606芯片的控制和数据读取。同时,通过USB转UART接口,将STM32与计算机或其他设备进行串口通信,实现数据的传输和交互。
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值