|
发表于 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随机。 |
|