硬汉嵌入式论坛

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

[例程下载] AD7606_spi问题

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2016-12-25 19:11:55 | 显示全部楼层 |阅读模式
例程里的AD7606_spi的程序,spi还是8位的数据,怎么回事啊,不应该是16位的吗,求好心人解答。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2016-12-26 09:44:56 | 显示全部楼层
连续读取两次,合并成16位


s_adc_now = bsp_spiRead1();
s_adc_now = s_adc_now * 256 + bsp_spiRead1(); /* 读数据 */
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2017-1-8 17:07:13 | 显示全部楼层
太感谢了,但现在我用的是407ZG的芯片,把这个例程改了后怎么也不行,没有采集任何数据,请问这个例程改成在407ZG上用有什么需要注意的地方吗?还有就是这个例程里用的是硬件SPI还是软件SPI
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2017-1-9 08:34:20 | 显示全部楼层

回 yj3639369 的帖子

yj3639369:太感谢了,但现在我用的是407ZG的芯片,把这个例程改了后怎么也不行,没有采集任何数据,请问这个例程改成在407ZG上用有什么需要注意的地方吗?还有就是这个例程里用的是硬件SPI还是软件SPI
 (2017-01-08 17:07) 
没什么要特别注意的,具体你看下程序,这个例子是其他人做的,应该是硬件的。
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2018-2-5 15:53:43 | 显示全部楼层
yj3639369 发表于 2017-1-8 17:07
太感谢了,但现在我用的是407ZG的芯片,把这个例程改了后怎么也不行,没有采集任何数据,请问这个例程改成 ...

请问现在调通了吗,用407ZG,我最近也再用407ZG调,采集数据不变
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-2-6 01:38:14 | 显示全部楼层
lqjgq 发表于 2018-2-5 15:53
请问现在调通了吗,用407ZG,我最近也再用407ZG调,采集数据不变

方便的话,贴下你的硬件截图了和驱动配置。
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2018-2-6 10:57:23 | 显示全部楼层
#define RCC_CS                 RCC_AHB1Periph_GPIOG
#define PORT_CS                GPIOG
#define PIN_CS                GPIO_Pin_1

/* RESET */
#define RCC_RESET         RCC_AHB1Periph_GPIOG
#define PORT_RESET        GPIOG
#define PIN_RESET        GPIO_Pin_0
/* RANGE */               
#define RCC_RANGE         RCC_AHB1Periph_GPIOA
#define PORT_RANGE         GPIOA
#define PIN_RANGE         GPIO_Pin_4

#define RESET_0()        GPIO_ResetBits(PORT_RESET, PIN_RESET)
#define RESET_1()        GPIO_SetBits(PORT_RESET, PIN_RESET)

/* CONVST */               
#define RCC_CONVST         RCC_AHB1Periph_GPIOG
#define PORT_CONVST        GPIOG
#define PIN_CONVST         GPIO_Pin_4

/* BUSY */
#define RCC_BUSY         RCC_AHB1Periph_GPIOG
#define PORT_BUSY         GPIOG
#define PIN_BUSY         GPIO_Pin_3

#define BUSY_IS_LOW()                                (GPIO_ReadInputDataBit(PORT_BUSY, PIN_BUSY) == Bit_RESET)

static void AD7606_ConfigGPIO(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

        /* ′ò¿aGPIOê±Öó */
        RCC_AHB1PeriphClockCmd(RCC_CS | RCC_RANGE | RCC_BUSY | RCC_RESET | RCC_CONVST, ENABLE);

        /* ÅäÖü¸¸öíÆíêêä3öIO */
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;                /* éèÎaêä3ö¿ú */
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                /* éèÎaíÆíìÄ£ê½ */
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;        /* éÏÏÂà-μç×è2»ê1Äü */
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;        /* IO¿ú×î′óËù¶è */

        GPIO_InitStructure.GPIO_Pin = PIN_RESET;
        GPIO_Init(PORT_RESET, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = PIN_CONVST;
        GPIO_Init(PORT_CONVST, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = PIN_RANGE;
        GPIO_Init(PORT_RANGE, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = PIN_CS;
        GPIO_Init(PORT_CS, &GPIO_InitStructure);

        /* ÅäÖÃGPIOÎa¸¡¶ˉêäèëÄ£ê½(êμ¼êéÏCPU¸′λoó¾íêÇêäèë×′ì¬) */
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                /* éèÎaêäèë¿ú */
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                /* éèÎaíÆíìÄ£ê½ */
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;        /* ÎTDèéÏÏÂà-μç×è */
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        /* IO¿ú×î′óËù¶è */

        GPIO_InitStructure.GPIO_Pin = PIN_BUSY;
        GPIO_Init(PORT_BUSY, &GPIO_InitStructure);
}

void AD7606_CfgSpiHard(void)
{
        SPI_InitTypeDef  SPI_InitStructure;

        /* ÅäÖÃSPIó2¼t2Îêy */
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;        /* êy¾Y·½Ïò£o2Ïßè«Ë«1¤ */
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                /* STM32μÄSPI1¤×÷Ä£ê½ £oÖ÷»úÄ£ê½ */
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;        /* êy¾Yλ3¤¶è £o 8λ */
        /* SPI_CPOLoíSPI_CPHA½áoÏê1óþö¶¨ê±Öóoíêy¾Y2éÑùμãμÄÏàλ1ØÏμ¡¢
           ±¾àyÅäÖÃ: ×üÏß¿ÕÏDêǸßμçƽ,μú2¸ö±ßÑØ£¨éÏéyÑØ2éÑùêy¾Y)
        */
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                        /* ê±ÖóéÏéyÑØ2éÑùêy¾Y */
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                /* ê±ÖóμÄμú2¸ö±ßÑØ2éÑùêy¾Y */
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                        /* Ƭѡ¿ØÖÆ·½ê½£oèí¼t¿ØÖÆ */

        /* éèÖÃ2¨ìØÂêÔ¤·ÖÆμÏμêy SPI_BaudRatePrescaler_64 êμ2aSCKÖüÆú 800ns £¬12.5MHz */
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;

        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        /* êy¾Yλ′«êä′ÎDò£o¸ßλÏè′« */
        SPI_InitStructure.SPI_CRCPolynomial = 7;                        /* CRC¶àÏîê½¼Ä′æÆ÷£¬¸′λoóÎa7¡£±¾ày3ì2»óà */
        SPI_Init(SPI1, &SPI_InitStructure);

        SPI_Cmd(SPI1, ENABLE);                                /* ê1ÄüSPI  */
}


void bsp_InitSPIBus(void)
{
#ifdef SOFT_SPI                /* èí¼tSPI */
        GPIO_InitTypeDef  GPIO_InitStructure;

        /* ′ò¿aGPIOê±Öó */
        RCC_AHB1PeriphClockCmd(RCC_SCK | RCC_MOSI | RCC_MISO, ENABLE);

        /* ÅäÖü¸¸öíÆíêêä3öIO */
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;                /* éèÎaêä3ö¿ú */
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                /* éèÎaíÆíìÄ£ê½ */
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;        /* éÏÏÂà-μç×è2»ê1Äü */
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;        /* IO¿ú×î′óËù¶è *///25

        GPIO_InitStructure.GPIO_Pin = PIN_SCK;
        GPIO_Init(PORT_SCK, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = PIN_MOSI;
        GPIO_Init(PORT_MOSI, &GPIO_InitStructure);

        /* ÅäÖÃGPIOÎa¸¡¶ˉêäèëÄ£ê½(êμ¼êéÏCPU¸′λoó¾íêÇêäèë×′ì¬) */
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                /* éèÎaêäèë¿ú */
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                /* éèÎaíÆíìÄ£ê½ */
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;        /* ÎTDèéÏÏÂà-μç×è */
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;        /* IO¿ú×î′óËù¶è */

        GPIO_InitStructure.GPIO_Pin = PIN_MISO;
        GPIO_Init(PORT_MISO, &GPIO_InitStructure);
#endif

#ifdef HARD_SPI
        /* ó2¼tSPI */
        GPIO_InitTypeDef  GPIO_InitStructure;

        /* ¿aÆôGPIOê±Öó */
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

        /* ¿aÆôSPIê±Öó */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

        /* ÅäÖÃ SCK, MISO ¡¢ MOSI Îa¸′óÃ1|Äü */
        //GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI3);
        //GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI3);
        //GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI3);
        /* ÅäÖÃ SCK, MISO ¡¢ MOSI Îa¸′óÃ1|Äü */
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI1);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI1);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI1);

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        /* ′ò¿aSPIê±Öó */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

#endif
}

硬件接线:
电源——5V
CS---PG1
RANGE——3.3V
BUSY——PG3
OS0,OS2——GND
CVA、CVB——PG4
RST——PG0
DB15——GND
RD/SCK——PB3
DB7/MISO——PB4
VIO——3.3V

AD的片选、启动、忙检测用示波器看都有信号,用的安富莱的例程,STM32用的407ZGT6,外加信号后,s_dat[i]数据一致都是0x0427,不加信号,s_dat[i]数据是0xffXX,XX随机。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-2-7 01:19:55 | 显示全部楼层
lqjgq 发表于 2018-2-6 10:57
#define RCC_CS                 RCC_AHB1Periph_GPIOG
#define PORT_CS                GPIOG
#define PIN_CS                GPIO_Pin_1

看这个程序,没什么问题。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 05:48 , Processed in 0.240088 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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