STM32F407 FSMC并口读取AD7606

先贴一下最终效果图.这个是AD7606并口读取数据一个周期后的数据结果. 原始波形用示波器看是很平滑的. AD7606不知为何就会出现干扰, 我猜测可能是数字信号干扰导致的. 因为干扰的波形很有规律. 这种现象基本上可以排除是程序问题. 应该是干扰或者数字信号干扰,或者是数字和模拟共地导致的.

在这里插入图片描述

最早用的是SPI串行协议, 结果发现最高读取速度有限, 无法发挥AD7606的性能, 即使AD7606能转换及时, 数据传输也不及时. 于是改成了并口. 所以要想充分发货AD7606的性能一定要用并口.并口读取数据要使用单片机上的FSMC接口. 这个挺好的. 速度非常快, 使用非常简单.

引脚使用情况如下,
我用的是STM32F407IGT6

/** FSMC GPIO Configuration
PF0 ------> FSMC_A0 //没啥用,但是必须得占用.
PE7 ------> FSMC_D4
PE8 ------> FSMC_D5
PE9 ------> FSMC_D6
PE10 ------> FSMC_D7
PE11 ------> FSMC_D8
PE12 ------> FSMC_D9
PE13 ------> FSMC_D10
PE14 ------> FSMC_D11
PE15 ------> FSMC_D12
PD8 ------> FSMC_D13
PD9 ------> FSMC_D14
PD10 ------> FSMC_D15
PD14 ------> FSMC_D0
PD15 ------> FSMC_D1
PD0 ------> FSMC_D2
PD1 ------> FSMC_D3
PD4 ------> FSMC_NOE //接AD7606的RD
PD5 ------> FSMC_NWE//没啥用
PG9 ------> FSMC_NE2 //接AD7606的CS
PE0 ------> FSMC_NBL0//没啥用
PE1 ------> FSMC_NBL1 //没啥用
*/

在这里插入图片描述
在这里插入图片描述
另外几个引脚的配置如下
在这里插入图片描述
还有一个引脚如下.这个是触发转换的ADC的采样时钟.连接AD7606的ConvertA和ConvertB 两个脚并联.
在这里插入图片描述
总的来说. AD7606也挺简单的

  1. ConverA,和ConvertB是采样时钟信号.负责触发采样.
  2. OS0,OS1,OS2 负责设置过采样
  3. BUSY负责通知单片机,数据已采样完毕, (最好是在下降沿时触发,转换结束时此引脚变成低电位)
  4. RANGE引脚负责设置测量量程, ±5或者±10V
  5. RD 是读数据的时钟信号
  6. CS 负责片选信号, 可以将RD和CS短接. 同时触发.

工作过程是
ConvertA和ConvertB在定时器下,持续输出采样时钟.保持合理的采样率.
波形频率要稳定.采用软件触发的形式肯定是不合理的. 频率最高不能超 过200KHZ.
当AD7606转换完成时会将BUSY引脚拉低, 单片机在接收到BUSY的下降沿外部中断触发时, 用软件读取内存中的数据到自定义变量中.代码如下

 /**
  * @brief This function handles EXTI line2 interrupt.
  * 需要注释掉stm32F4xx_it.c中的同名函数
  */
void EXTI2_IRQHandler(void)
{ 
  if(__HAL_GPIO_EXTI_GET_IT(AD7606_BUSY_Pin) != RESET)
  {
    AD7606_Read8ChAdc();
    __HAL_GPIO_EXTI_CLEAR_IT(AD7606_BUSY_Pin); 
  } 

}

//#define AD7606_ReadOneChannelData() *(__IO uint16_t *)0x60000000    //Bank1
#define AD7606_ReadOneChannelData() *(__IO uint16_t *)0x64000000      //Bank2 使用的PG9/FSMC_NE2引脚.
//#define AD7606_ReadOneChannelData() *(__IO uint16_t *)0x68000000    //Bank3
//#define AD7606_ReadOneChannelData() *(__IO uint16_t *)0x6C000000    //Bank4

void AD7606_Read8ChAdc(void)
{  
	AdcValues[0] = AD7606_ReadOneChannelData(); /* 读第1路样本 */  
	AdcValues[1] = AD7606_ReadOneChannelData(); /* 读第2路样本 */
	AdcValues[2] = AD7606_ReadOneChannelData(); /* 读第3路样本 */
	AdcValues[3] = AD7606_ReadOneChannelData(); /* 读第4路样本 */
	AdcValues[4] = AD7606_ReadOneChannelData(); /* 读第5路样本 */
	AdcValues[5] = AD7606_ReadOneChannelData(); /* 读第6路样本 */
	AdcValues[6] = AD7606_ReadOneChannelData(); /* 读第7路样本 */
	AdcValues[7] = AD7606_ReadOneChannelData(); /* 读第8路样本 */ 
}

代码中 AD7606_ReadOneChannelData(); 是一个宏,实际上是指向的一个内存地址, 这个内存地址是FSMC指定的地址. 使用FSMC接口, 可免于控制引脚, 直接读取某个地址即可, FSMC会自动产生操作时序. 具体请见FSMC相关知识.

关键要素之一
一定要在中断函数中判断中断状态,
在 __HAL_GPIO_EXTI_GET_IT() 和__HAL_GPIO_EXTI_CLEAR_IT()之间 进行读取转换数据.

另外, FRST引脚总是不正确, 所以不要使用它 .

最后,
数据太多, 通过接口发到上位机, 再处理, 是个非常糟糕的做法.
最好的做法是在单片机上进行计算, 再把计算结果发到上位机.

在这里插入图片描述

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32F407FSMC是一款由ST微电子生产的高性能32位ARM Cortex-M4内核的微控制器。它具有丰富的外设和接口,适用于一系列的应用领域,包括工业控制、消费电子、医疗设备和通信等。 9488是一种TFT LCD显示屏幕模块,具有9488控制器芯片。这种显示屏模块具有3.5英寸的屏幕大小,显示分辨率为320x480像素。它支持RGB接口和并行数据传输。 STM32F407FSMC与9488显示屏模块可以进行连接和通信,实现图形界面的显示和操作。通过FSMC(Flexible Static Memory Controller)外设,STM32F407可以以并行模式和SRAM接口与9488进行数据传输。通过合适的引脚配置和编程设置,可以将STM32F407的数据输出连接到9488的控制线和数据线上,以控制显示屏的显示内容。 通过使用STM32F407FSMC和9488显示屏模块,可以实现各种应用场景下的图形界面显示和操作,如智能家居控制面板、仪器仪表操作界面等等。同时,STM32F407FSMC还具有丰富的外设资源,如通信接口(UART、SPI、I2C)、定时器、ADC等,可以与其他外围设备进行通信和控制,提供全面的系统集成能力。 总之,STM32F407FSMC和9488显示屏模块的结合为开发人员提供了一种高性能、灵活可扩展的解决方案,用于实现复杂的图形界面显示和操作。 ### 回答2: STM32F407FSMC 9488 是一款高性能的微控制器,属于STM32F4系列。它具有强大的功能和多种接口,非常适合于各种应用领域,特别是在液晶显示和存储器控制等方面。 STM32F407FSMC 9488采用ARM Cortex-M4内核,拥有浮点单元(FPU),运行频率高达168MHz。这意味着它可以快速处理复杂的算法和任务。而且,内置了512KB的闪存和192KB的RAM,提供了足够的存储空间。 这款微控制器还具有FSMC(Flexible Static Memory Controller)接口,使其可以方便地与多种外部存储器设备进行通信。FSMC支持多种存储器类型,如SRAM、NOR闪存和PSRAM,因此可以满足各种不同的存储需求。此外,它还支持异步存储器,提供更灵活的存储器访问方式。 除了存储器控制外,STM32F407FSMC 9488 还具有多种接口和功能,如SPI、I2C、USART和USB等。这些接口使其能够连接到其他外部设备,如传感器、显示屏、WiFi模块等,实现更丰富的功能。同时,它还支持多个定时器和中断控制器,提供了强大的定时和中断处理能力。 总体而言,STM32F407FSMC 9488 是一款功能强大的微控制器,适用于各种应用领域。它具有高性能、丰富的接口和灵活的存储器控制功能,可以完美满足复杂应用的需求。无论是进行图形显示还是大规模数据存储,它都能提供可靠的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值