硬汉嵌入式论坛

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

[ADC] 使用STM32H743VI与AD7606通讯,每次程序复位后AD转换数据才更新

[复制链接]

7

主题

7

回帖

28

积分

新手上路

积分
28
发表于 2021-7-21 20:39:35 | 显示全部楼层 |阅读模式
AD7606的FMC总线驱动方式实现(8通道同步采样, 16bit, 正负10V)
在上面例子下修改的,使用BUSY中断来读取数据,在线调试时每次中断有进去,但是AD数据一直不变,AD数据是正确的,当每次重新执行程序时AD结果会更新

#define AD7606_RESULT()        *(__IO uint16_t *)0x60003000

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
        switch(GPIO_Pin)
        {
                case GPIO_PIN_12:
                                        AD_Value=AD7606_RESULT();
       
                        break;
        }
}



static void AD_CtrlLinesConfig(void)
{
        /* bsp_fm_io 已配置fmc,bsp_InitExtIO();
           此处可以不必重复配置
        */

        GPIO_InitTypeDef gpio_init_structure;

        /* 使能 GPIO时钟 */
        __HAL_RCC_GPIOD_CLK_ENABLE();
        __HAL_RCC_GPIOE_CLK_ENABLE();


        /* 使能FMC时钟 */
        __HAL_RCC_FMC_CLK_ENABLE();

        /* 设置 GPIOD 相关的IO为复用推挽输出 */
        gpio_init_structure.Mode = GPIO_MODE_AF_PP;
        gpio_init_structure.Pull = GPIO_PULLUP;
        gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH;
        gpio_init_structure.Alternate = GPIO_AF12_FMC;
       
        /* 配置GPIOD */
        gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 |  GPIO_PIN_7 |
                                    GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_14 |
                                    GPIO_PIN_15;
        HAL_GPIO_Init(GPIOD, &gpio_init_structure);

        /* 配置GPIOE */
        gpio_init_structure.Pin = GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |
                                    GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |
                                    GPIO_PIN_15;
        HAL_GPIO_Init(GPIOE, &gpio_init_structure);



}



static void AD_FSMCConfig(void)
{
        /*
           DM9000,扩展IO,OLED和AD7606公用一个FMC配置,如果都开启,请以FMC速度最慢的为准。
           从而保证所有外设都可以正常工作。
        */
        SRAM_HandleTypeDef hsram = {0};
        FMC_NORSRAM_TimingTypeDef SRAM_Timing = {0};
               
        /*
                AD7606规格书要求(3.3V时,通信电平Vdriver):RD读信号低电平脉冲宽度最短21ns,对应FMC的DataSetupTime
                CS片选和RD读信号独立方式的高电平脉冲最短宽度15ns。
                CS片选和RD读信号并联方式的高电平脉冲最短宽度22ns。
                这里将22ns作为最小值更合理些,对应FMC的AddressSetupTime
       
                5-x-5-x-x-x  : RD高持续25ns, 低电平持续25ns. 读取8路样本数据到内存差不多就是400ns。
        */
        hsram.Instance  = FMC_NORSRAM_DEVICE;
        hsram.Extended  = FMC_NORSRAM_EXTENDED_DEVICE;
       
        /* FMC使用的HCLK3,主频200MHz,1个FMC时钟周期就是5ns */
        SRAM_Timing.AddressSetupTime       = 5;  /* 5*5ns=25ns,地址建立时间,范围0 -15个FMC时钟周期个数 */
        SRAM_Timing.AddressHoldTime        = 2;  /* 地址保持时间,配置为模式A时,用不到此参数 范围1 -15个时钟周期个数 */
        SRAM_Timing.DataSetupTime          = 5;  /* 5*5ns=25ns,数据建立时间,范围1 -255个时钟周期个数 */
        SRAM_Timing.BusTurnAroundDuration  = 1;  /* 此配置用不到这个参数 */
        SRAM_Timing.CLKDivision            = 2;  /* 此配置用不到这个参数 */
        SRAM_Timing.DataLatency            = 2;  /* 此配置用不到这个参数 */
        SRAM_Timing.AccessMode             = FMC_ACCESS_MODE_A; /* 配置为模式A */

        hsram.Init.NSBank             = FMC_NORSRAM_BANK1;              /* 使用的BANK1,即使用的片选FMC_NE1 */
        hsram.Init.DataAddressMux     = FMC_DATA_ADDRESS_MUX_DISABLE;   /* 禁止地址数据复用 */
        hsram.Init.MemoryType         = FMC_MEMORY_TYPE_SRAM;           /* 存储器类型SRAM */
        hsram.Init.MemoryDataWidth    = FMC_NORSRAM_MEM_BUS_WIDTH_16;        /* 32位总线宽度 */
        hsram.Init.BurstAccessMode    = FMC_BURST_ACCESS_MODE_DISABLE;  /* 关闭突发模式 */
        hsram.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;   /* 用于设置等待信号的极性,关闭突发模式,此参数无效 */
        hsram.Init.WaitSignalActive   = FMC_WAIT_TIMING_BEFORE_WS;      /* 关闭突发模式,此参数无效 */
        hsram.Init.WriteOperation     = FMC_WRITE_OPERATION_ENABLE;     /* 用于使能或者禁止写保护 */
        hsram.Init.WaitSignal         = FMC_WAIT_SIGNAL_DISABLE;        /* 关闭突发模式,此参数无效 */
        hsram.Init.ExtendedMode       = FMC_EXTENDED_MODE_DISABLE;      /* 禁止扩展模式 */
        hsram.Init.AsynchronousWait   = FMC_ASYNCHRONOUS_WAIT_DISABLE;  /* 用于异步传输期间,使能或者禁止等待信号,这里选择关闭 */
        hsram.Init.WriteBurst         = FMC_WRITE_BURST_DISABLE;        /* 禁止写突发 */
        hsram.Init.ContinuousClock    = FMC_CONTINUOUS_CLOCK_SYNC_ONLY; /* 仅同步模式才做时钟输出 */
    hsram.Init.WriteFifo          = FMC_WRITE_FIFO_ENABLE;          /* 使能写FIFO */

        /* 初始化SRAM控制器 */
        if (HAL_SRAM_Init(&hsram, &SRAM_Timing, &SRAM_Timing) != HAL_OK)
        {
                /* 初始化错误 */
                Error_Handler(__FILE__, __LINE__);
        }       
}

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2021-7-22 08:26:57 | 显示全部楼层
方便的话,发下引脚接线图。

另外你的7606是5V供电吧
回复

使用道具 举报

7

主题

7

回帖

28

积分

新手上路

积分
28
 楼主| 发表于 2021-7-22 09:57:10 | 显示全部楼层

回复

使用道具 举报

7

主题

7

回帖

28

积分

新手上路

积分
28
 楼主| 发表于 2021-7-22 09:58:07 | 显示全部楼层

回复

使用道具 举报

7

主题

7

回帖

28

积分

新手上路

积分
28
 楼主| 发表于 2021-7-22 10:18:44 | 显示全部楼层
见电路图 QQ图片20210722095607.png
回复

使用道具 举报

7

主题

7

回帖

28

积分

新手上路

积分
28
 楼主| 发表于 2021-7-22 10:55:20 | 显示全部楼层
#define AD7606_RESULT()        *(__IO uint16_t *)0x60003000
#define AD7606_RESULT()        *(__IO uint16_t *)0x60000000
#define AD7606_RESULT()        *(__IO uint16_t *)0x64000000

hsram.Init.NSBank             = FMC_NORSRAM_BANK1;      
hsram.Init.NSBank             = FMC_NORSRAM_BANK2;      
hsram.Init.NSBank             = FMC_NORSRAM_BANK3;      
hsram.Init.NSBank             = FMC_NORSRAM_BANK4;      

这个不管怎么搭配都可以读到正确的数据,但是数据不会更新,除非重新复位,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2021-7-22 12:30:51 | 显示全部楼层
MPU配置了吗,没有看到你的MPU配置代码
一定要配置。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2021-7-22 12:32:12 | 显示全部楼层
另外接线图看着有点累,有这种的接线说明吗

PE6/BUSY
        
        PC6/CONVST
        PC8/OS0
        PC9/OS1
        PC10/OS2
        PC11/RANGE
        PC12/RESET

        PD0/FMC_D2
        PD1/FMC_D3
        PD4/FMC_NOE
        PD7/FMC_NE1
        PD8/FMC_D13
        PD9/FMC_D14
        PD10/FMC_D15
        PD14/FMC_D0
        PD15/FMC_D1

        PE7/FMC_D4
        PE8/FMC_D5
        PE9/FMC_D6
        PE10/FMC_D7
        PE11/FMC_D8
        PE12/FMC_D9
        PE13/FMC_D10
        PE14/FMC_D11
        PE15/FMC_D12      
回复

使用道具 举报

7

主题

7

回帖

28

积分

新手上路

积分
28
 楼主| 发表于 2021-7-22 13:02:18 | 显示全部楼层
是MPU出现问题,MPU配置了,但是有部分错误,谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2021-7-23 09:16:37 | 显示全部楼层
hai325 发表于 2021-7-22 13:02
是MPU出现问题,MPU配置了,但是有部分错误,谢谢

可以考虑关闭Cache。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 09:11 , Processed in 0.734467 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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