硬汉嵌入式论坛

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

[STM32H7] stm32H750驱动AD7606出现问题

[复制链接]

2

主题

16

回帖

22

积分

新手上路

积分
22
发表于 2021-8-9 21:51:05 | 显示全部楼层 |阅读模式
H750串口定时输出读取,现在的问题是采集端在不接入电压有数据显示,接入电压后数值不变
已经调了好多天了,就是查不出哪里的问题

接线
FMC_D0->PD14
FMC_D1->PD15
FMC_D2->PD0
FMC_D3->PD1
FMC_D4->PE7
FMC_D5->PE8
FMC_D6->PE9
FMC_D7->PE10
FMC_D8->PE11
FMC_D9->PE12
FMC_D10->PE13
FMC_D11->PE14
FMC_D12->PE15
FMC_D13->PD8
FMC_D14->PD9
FMC_D15->PD10

//信号引脚
FMC_NOE->PD4
FMC_CS->PC7


//控制引脚
BUSY->PE6
CONVEST->PC6
OS0->PC8
OS1->PC9
OS2->PC10
RANGE->PC11
RESET->PC12

AD7606的驱动程序
#include "ad7606.h"
#include "stdio.h"
#include "bsp_SysTick.h"

#define OS0_0()                GPIOC->BSRR = ((uint32_t)GPIO_PIN_8<<16U)
#define OS0_1()                GPIOC->BSRR = GPIO_PIN_8
#define OS1_0()                GPIOC->BSRR = ((uint32_t)GPIO_PIN_9<<16U)
#define OS1_1()                GPIOC->BSRR = GPIO_PIN_9
#define OS2_0()                GPIOC->BSRR = ((uint32_t)GPIO_PIN_10<<16U)
#define OS2_1()                GPIOC->BSRR = GPIO_PIN_10

#define CONVST_1()        GPIOC->BSRR = GPIO_PIN_6
#define CONVST_0()        GPIOC->BSRR = ((uint32_t)GPIO_PIN_6<<16U)

/*éè&#214;&#195;ê&#228;è&#235;á&#191;3ìμ&#196;GPIO: PC11 */
#define RANGE_1()        GPIOC->BSRR = GPIO_PIN_11
#define RANGE_0()        GPIOC->BSRR = ((uint32_t)GPIO_PIN_11<<16U)

/*AD7606&#184;′&#206;&#187;&#191;ú&#207;&#223; : PC12*/
#define RESET_1()        GPIOC->BSRR = GPIO_PIN_12
#define RESET_0()        GPIOC->BSRR = ((uint32_t)GPIO_PIN_12<<16U)

/*AD7606 FSMC×ü&#207;&#223;μ&#216;&#214;·£&#172;&#214;&#187;&#196;ü&#182;á,&#206;TDèD′ */
#define AD7606_RESULT()        *(__IO uint16_t *)0x60000000

AD7606_VAR_T g_tAD7606;                        /* &#182;¨ò&#229;1&#184;&#246;è&#171;&#190;&#214;±&#228;á&#191;£&#172;±£′&#230;ò&#187;D&#169;2&#206;êy */
AD7606_FIFO_T g_tAdcFifo;                /* &#182;¨ò&#229;FIFO&#189;á11ì&#229;±&#228;á&#191; */

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_GPIOB_CLK_ENABLE();
        __HAL_RCC_GPIOC_CLK_ENABLE();
        __HAL_RCC_GPIOD_CLK_ENABLE();
        __HAL_RCC_GPIOE_CLK_ENABLE();
      
        __HAL_RCC_FMC_CLK_ENABLE();
      
        GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStructure.Pull = GPIO_NOPULL;
        GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
        GPIO_InitStructure.Alternate = GPIO_AF12_FMC;
      
        GPIO_InitStructure.Pin = GPIO_PIN_0 | GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |
                                 GPIO_PIN_14 |GPIO_PIN_15;
        HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
      
        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);
        {
                GPIO_InitTypeDef   GPIO_InitStructure;
                __HAL_RCC_GPIOC_CLK_ENABLE();
               
                GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;               
                GPIO_InitStructure.Pull = GPIO_NOPULL;                              
                GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_MEDIUM;         
               
                GPIO_InitStructure.Pin=GPIO_PIN_6|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
                HAL_GPIO_Init(GPIOC,&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;         
        if(HAL_SRAM_Init(&hsram, &SRAM_Timing, &SRAM_Timing)!=HAL_OK)
        {
                while(1){;}
        }
}

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

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

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();      
}

/***********************************
************************************/
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();
}
————————————————————————————————————————————————————
定时中断读取
void TIM3_IRQHandler(void)
{
        if((TIM3->SR & TIM_FLAG_UPDATE) != RESET)
        {
                AD7606_StartConvst();               
                AD7606_ReadNowAdc();               
                ucRefresh=1;
                HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);
                TIM3->SR = ~ TIM_FLAG_UPDATE;
        }
}
________________________________________________________________________________________
主函数
int main(void)
{
        ucRefresh=0;
        SystemClock_Config();
        MPU_Config(); //MPU config
        LED_GPIO_Config();
        DEBUG_USART_Config();
  bsp_InitAD7606();
        AD7606_Reset();
        AD7606_StartConvst();               
  TIM3_Init();       
        while(1)
        {       
                if (ucRefresh == 1)
                {
                        //′òó&#161;ADC2é&#209;ù&#189;á1&#251;
                        printf("Range = %d, OS = %d\r\n", g_tAD7606.ucRange, g_tAD7606.ucOS);
                        printf("CH1 = %6d, CH2 = %6d, CH3 = %6d, CH4 = %6d",
                                g_tAD7606.sNowAdc[0], g_tAD7606.sNowAdc[1], g_tAD7606.sNowAdc[2], g_tAD7606.sNowAdc[3]);
                        printf("CH5 = %6d, CH6 = %6d, CH7 = %6d, CH8 = %6d\r\n",
                                g_tAD7606.sNowAdc[4], g_tAD7606.sNowAdc[5], g_tAD7606.sNowAdc[6], g_tAD7606.sNowAdc[7]);
                  ucRefresh=0;
                }
        }  
}
希望各位大佬能给点指点

串口打印

串口打印
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2021-8-10 08:30:48 | 显示全部楼层
你的PC7片选应交配置在哪里了
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-8-10 08:58:49 | 显示全部楼层
eric2013 发表于 2021-8-10 08:30
你的PC7片选应交配置在哪里了

啥是应交配置啊
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-8-10 08:59:16 | 显示全部楼层
eric2013 发表于 2021-8-10 08:30
你的PC7片选应交配置在哪里了

应该在哪里配置呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2021-8-10 09:01:56 | 显示全部楼层

应交 = 引脚
你贴的代码里面看不到PC7的引脚配置。
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-8-10 09:06:30 | 显示全部楼层
eric2013 发表于 2021-8-10 09:01
应交 = 引脚
你贴的代码里面看不到PC7的引脚配置。

我加上PC7的配置了,还是不行
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2021-8-10 09:11:21 | 显示全部楼层
Mr_Robot 发表于 2021-8-10 09:06
我加上PC7的配置了,还是不行

你的PC7怎么配置的,你贴出来我看下,我觉得你配置错了。
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-8-10 09:17:16 | 显示全部楼层
GPIO_InitTypeDef GPIO_InitStructure;
       
        __HAL_RCC_GPIOB_CLK_ENABLE();
        __HAL_RCC_GPIOC_CLK_ENABLE();
        __HAL_RCC_GPIOD_CLK_ENABLE();
        __HAL_RCC_GPIOE_CLK_ENABLE();
       
        __HAL_RCC_FMC_CLK_ENABLE();
       
        GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStructure.Pull = GPIO_NOPULL;
        GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
        GPIO_InitStructure.Alternate = GPIO_AF12_FMC;
       
        GPIO_InitStructure.Pin=GPIO_PIN_7;
        HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
       
        GPIO_InitStructure.Pin = GPIO_PIN_0 | GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |
                                 GPIO_PIN_14 |GPIO_PIN_15;
        HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);

        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);
这个
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-8-10 09:17:36 | 显示全部楼层
eric2013 发表于 2021-8-10 09:11
你的PC7怎么配置的,你贴出来我看下,我觉得你配置错了。

GPIO_InitTypeDef GPIO_InitStructure;
       
        __HAL_RCC_GPIOB_CLK_ENABLE();
        __HAL_RCC_GPIOC_CLK_ENABLE();
        __HAL_RCC_GPIOD_CLK_ENABLE();
        __HAL_RCC_GPIOE_CLK_ENABLE();
       
        __HAL_RCC_FMC_CLK_ENABLE();
       
        GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStructure.Pull = GPIO_NOPULL;
        GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
        GPIO_InitStructure.Alternate = GPIO_AF12_FMC;
       
        GPIO_InitStructure.Pin=GPIO_PIN_7;
        HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
        /* &#197;&#228;&#214;&#195;GPIOD */
        GPIO_InitStructure.Pin = GPIO_PIN_0 | GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |
                                 GPIO_PIN_14 |GPIO_PIN_15;
        HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);

        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);
这个
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-8-10 09:29:18 | 显示全部楼层
eric2013 发表于 2021-8-10 09:11
你的PC7怎么配置的,你贴出来我看下,我觉得你配置错了。

现在加上PC7的配置后,串口打印都是-1了,加上电压也反应
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2021-8-10 10:08:08 | 显示全部楼层
Mr_Robot 发表于 2021-8-10 09:17
GPIO_InitTypeDef GPIO_InitStructure;
        
        __HAL_RCC_GPIOB_CLK_ENABLE();

PC7配置错了,PC7做FMC_NE1,那么AF复用要使用AF9,即GPIO_AF9_FMC
QQ截图20210810101033.png
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2021-8-10 10:51:36 | 显示全部楼层
eric2013 发表于 2021-8-10 10:08
PC7配置错了,PC7做FMC_NE1,那么AF复用要使用AF9,即GPIO_AF9_FMC

GPIO_InitStructure.Pin = GPIO_PIN_7;
  GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStructure.Pull = GPIO_PULLUP;
  GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStructure.Alternate = GPIO_AF9_FMC;

  HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
我加上这些配置后,串口打印仍然是-1,加上电压后示数没反应
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2021-8-10 10:59:06 | 显示全部楼层
Mr_Robot 发表于 2021-8-10 10:51
GPIO_InitStructure.Pin = GPIO_PIN_7;
  GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStr ...

别的问题看不出来了,你再找找。
回复

使用道具 举报

3

主题

13

回帖

22

积分

新手上路

积分
22
发表于 2021-10-4 08:30:22 | 显示全部楼层
楼主问题解决了吗?
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-3-12 23:42:23 | 显示全部楼层
您最后是怎么解决的呢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 12:48 , Processed in 0.271666 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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