硬汉嵌入式论坛

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

[ADC] H7驱动AD7606

[复制链接]

2

主题

16

回帖

22

积分

新手上路

积分
22
发表于 2021-7-21 20:50:24 | 显示全部楼层 |阅读模式
硬汉大哥,现在做项目用H750驱动AD7606(并口8080时序的),用的你们的驱动调试,
出现的问题是:串口读数一开始8个通道为-1,在采集口接入3.3V电压后8个通道读数为2669

FMC的接线如下:      
接线配置:
        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      

以下是驱动AD7606的代码  我是以定时采集的 所以没初始化BUSY引脚

就是在定时中断函数中
定时启动,然后读取

#include "ad7606.h"


#define OS0_0()                HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET)
#define OS0_1()                HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET)
#define OS1_0()                HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET)
#define OS1_1()                HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET)
#define OS2_0()                HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,GPIO_PIN_RESET)
#define OS2_1()                HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,GPIO_PIN_SET)


#define CONVST_1()        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET)
#define CONVST_0()        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET)


#define RANGE_1()        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET)
#define RANGE_0()        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_RESET)


#define RESET_1()        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,GPIO_PIN_SET)
#define RESET_0()        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,GPIO_PIN_RESET)


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

AD7606_VAR_T g_tAD7606;                       
AD7606_FIFO_T g_tAdcFifo;               

static void AD7606_CtrlLinesConfig(void);
static void AD7606_FSMCConfig(void);

void bsp_InitAD7606(void)
{
        AD7606_CtrlLinesConfig();
        AD7606_FSMCConfig();

        AD7606_SetOS(AD_OS_NO);               
        AD7606_SetInputRange(0);       

        AD7606_Reset();

        CONVST_1();                                       
}
/***********************************************

***********************************************/
static void AD7606_CtrlLinesConfig(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        __HAL_RCC_FMC_CLK_ENABLE();
       
        __HAL_RCC_GPIOC_CLK_ENABLE();
        __HAL_RCC_GPIOD_CLK_ENABLE();
        __HAL_RCC_GPIOE_CLK_ENABLE();
        __HAL_RCC_GPIOF_CLK_ENABLE();
       
        GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStructure.Pull = GPIO_PULLUP;
        GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
        GPIO_InitStructure.Alternate = GPIO_AF12_FMC;
       
        /* ÅäÖÃGPIOD */
        GPIO_InitStructure.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_InitStructure);
        /* ÅäÖÃGPIODE*/
        GPIO_InitStructure.Pin = GPIO_PIN_4 |GPIO_PIN_5|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_InitStructure);
       
}

/********************************

********************************/
static void AD7606_FSMCConfig(void)
{
       
        SRAM_HandleTypeDef hsram = {0};
        FMC_NORSRAM_TimingTypeDef SRAM_Timing = {0};

        hsram.Instance  = FMC_NORSRAM_DEVICE;
        hsram.Extended  = FMC_NORSRAM_EXTENDED_DEVICE;
       
       
        SRAM_Timing.AddressSetupTime       = 5;
        SRAM_Timing.AddressHoldTime        = 2;  
        SRAM_Timing.DataSetupTime          = 5;  
        SRAM_Timing.BusTurnAroundDuration  = 1;
        SRAM_Timing.CLKDivision            = 2;
        SRAM_Timing.DataLatency            = 2;  
        SRAM_Timing.AccessMode             = FMC_ACCESS_MODE_A;

        hsram.Init.NSBank             = FMC_NORSRAM_BANK1;            
        hsram.Init.DataAddressMux     = FMC_DATA_ADDRESS_MUX_DISABLE;   
        hsram.Init.MemoryType         = FMC_MEMORY_TYPE_SRAM;         
        hsram.Init.MemoryDataWidth    = FMC_NORSRAM_MEM_BUS_WIDTH_16;       
        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;         

       
        HAL_SRAM_Init(&hsram, &SRAM_Timing, &SRAM_Timing);
       
}

/****************************************
*
**************************************/

void AD7606_SetOS(uint8_t _ucOS)
{
        g_tAD7606.ucOS = _ucOS;
        switch (_ucOS)
        {
                case AD_OS_X2:
                        OS2_0();
                        OS1_0();
                        OS0_1();
                        break;
                case AD_OS_X4:
                        OS2_0();
                        OS1_1();
                        OS0_0();
                        break;
                case AD_OS_X8:
                        OS2_0();
                        OS1_1();
                        OS0_1();
                        break;
                case AD_OS_X16:
                        OS2_1();
                        OS1_0();
                        OS0_0();
                        break;
                case AD_OS_X32:
                        OS2_1();
                        OS1_0();
                        OS0_1();
                        break;
                case AD_OS_X64:
                        OS2_1();
                        OS1_1();
                        OS0_0();
                        break;
                case AD_OS_NO:
                default:
                        g_tAD7606.ucOS = AD_OS_NO;
                        OS2_0();
                        OS1_0();
                        OS0_0();
                        break;
        }
}

/***************************************
*       

***************************************/
void AD7606_SetInputRange(uint8_t _ucRange)
{
        if (_ucRange == 0)
        {
                g_tAD7606.ucRange = 0;
                RANGE_0();       
        }
        else
        {
                g_tAD7606.ucRange = 1;
                RANGE_1();       
        }
}

/**********************************

***********************************/
void AD7606_Reset(void)
{
        RESET_0();       
       
        RESET_1();       
        RESET_1();       
        RESET_1();
        RESET_1();
       
        RESET_0();        /* íË3ö¸′λ×′ì¬ */
}

/***********************************

************************************/
void AD7606_StartConvst(void)
{
       
        CONVST_0();
        CONVST_0();
        CONVST_0();
        CONVST_1();
}


void AD7606_ReadNowAdc(void)
{
        g_tAD7606.sNowAdc[0] = AD7606_RESULT();       
        g_tAD7606.sNowAdc[1] = AD7606_RESULT();       
        g_tAD7606.sNowAdc[2] = AD7606_RESULT();       
        g_tAD7606.sNowAdc[3] = AD7606_RESULT();       
        g_tAD7606.sNowAdc[4] = AD7606_RESULT();       
        g_tAD7606.sNowAdc[5] = AD7606_RESULT();       
        g_tAD7606.sNowAdc[6] = AD7606_RESULT();       
        g_tAD7606.sNowAdc[7] = AD7606_RESULT();       
}

不是我不写注释,注释都是乱码啊





回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-7-22 08:28:11 | 显示全部楼层
MPU配置没,AD7606是5V供电吗。
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-7-22 09:31:33 | 显示全部楼层
eric2013 发表于 2021-7-22 08:28
MPU配置没,AD7606是5V供电吗。

MPU的配置是必须的吗,上个同事用407驱动,在代码里没看到配置MPU啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-7-22 09:48:07 | 显示全部楼层
Mr_Robot 发表于 2021-7-22 09:31
MPU的配置是必须的吗,上个同事用407驱动,在代码里没看到配置MPU啊

F4不用,H7必须配置
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-7-22 09:55:22 | 显示全部楼层
eric2013 发表于 2021-7-22 09:48
F4不用,H7必须配置

感谢,我再试试
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-7-22 11:07:54 | 显示全部楼层
eric2013 发表于 2021-7-22 09:48
F4不用,H7必须配置

硬汉大哥 我配置了MPU也5V供电了,结果还是没变
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-7-22 11:11:16 | 显示全部楼层
C:\Users\David\Desktop
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-7-22 11:29:15 | 显示全部楼层
目前的情况就是在采集口没接入电压 每个通道输出示数
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-7-22 12:32:51 | 显示全部楼层
Mr_Robot 发表于 2021-7-22 11:29
目前的情况就是在采集口没接入电压 每个通道输出示数

MPU配置代码发下
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-7-22 13:04:13 | 显示全部楼层

static void MPU_Config( void )
{
        MPU_Region_InitTypeDef MPU_InitStruct;

        HAL_MPU_Disable();

        MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
        MPU_InitStruct.BaseAddress      = 0x24000000;
        MPU_InitStruct.Size             = MPU_REGION_SIZE_512KB;
        MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
        MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;
        MPU_InitStruct.IsCacheable      = MPU_ACCESS_NOT_CACHEABLE;
        MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
        MPU_InitStruct.Number           = MPU_REGION_NUMBER0;
        MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL1;
        MPU_InitStruct.SubRegionDisable = 0x00;
        MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;

        HAL_MPU_ConfigRegion(&MPU_InitStruct);
       
        MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
        MPU_InitStruct.BaseAddress      = 0x60000000;
        MPU_InitStruct.Size             = ARM_MPU_REGION_SIZE_64KB;       
        MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
        MPU_InitStruct.IsBufferable     = MPU_ACCESS_BUFFERABLE;
        MPU_InitStruct.IsCacheable      = MPU_ACCESS_NOT_CACHEABLE;        /*

        MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
        MPU_InitStruct.Number           = MPU_REGION_NUMBER1;
        MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL0;
        MPU_InitStruct.SubRegionDisable = 0x00;
        MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;
       
        HAL_MPU_ConfigRegion(&MPU_InitStruct);

        HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-7-22 13:47:16 | 显示全部楼层

static void MPU_Config( void )
{
        MPU_Region_InitTypeDef MPU_InitStruct;


        HAL_MPU_Disable();


        MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
        MPU_InitStruct.BaseAddress      = 0x24000000;
        MPU_InitStruct.Size             = MPU_REGION_SIZE_512KB;
        MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
        MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;
        MPU_InitStruct.IsCacheable      = MPU_ACCESS_NOT_CACHEABLE;
        MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
        MPU_InitStruct.Number           = MPU_REGION_NUMBER0;
        MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL1;
        MPU_InitStruct.SubRegionDisable = 0x00;
        MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;

        HAL_MPU_ConfigRegion(&MPU_InitStruct);
       
       

        MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
        MPU_InitStruct.BaseAddress      = 0x60000000;
        MPU_InitStruct.Size             = ARM_MPU_REGION_SIZE_64KB;       
        MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
        MPU_InitStruct.IsBufferable     = MPU_ACCESS_BUFFERABLE;
        MPU_InitStruct.IsCacheable      = MPU_ACCESS_NOT_CACHEABLE;       
        MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
        MPU_InitStruct.Number           = MPU_REGION_NUMBER1;
        MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL0;
        MPU_InitStruct.SubRegionDisable = 0x00;
        MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;
       
        HAL_MPU_ConfigRegion(&MPU_InitStruct);


        HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-7-22 16:36:04 | 显示全部楼层
Mr_Robot 发表于 2021-7-22 13:47
static void MPU_Config( void )
{
        MPU_Region_InitTypeDef MPU_InitStruct;

看着没什么问题,你接上示波器看看FMC控制引脚波形正常输出没。

别的问题不清楚了。
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-7-22 16:42:19 | 显示全部楼层
eric2013 发表于 2021-7-22 16:36
看着没什么问题,你接上示波器看看FMC控制引脚波形正常输出没。

别的问题不清楚了。

好的 感谢
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-7-23 11:01:30 | 显示全部楼层
eric2013 发表于 2021-7-22 16:36
看着没什么问题,你接上示波器看看FMC控制引脚波形正常输出没。

别的问题不清楚了。

我测了几个引脚电平,这个CS和RD都为3.3V,这是正常的吗
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 16:58 , Processed in 0.239773 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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