初级会员

- 积分
- 91
- 金钱
- 91
- 注册时间
- 2020-7-11
- 在线时间
- 23 小时
|
20金钱
以下是AD7606.c文件
#include "AD7606.h"
#include"stm32f4xx_conf.h"
#include "stm32f4xx_tim.h" //ARM¶¨ê±Æ÷μÄoˉêy
#include "Nebula_Comm.h"
#include "Nebula_Main.h"
#include "stm32f4xx_rtc.h"
static int16_t s_adc_now[8];
static int16_t s_dat[8];
static int16_t s_volt[8];
void AD7606_Disp(void);
void AD7606_Mak(void);
//Âß¼-êäè룬×a»»¿aê¼A¡¢B£¬½«Æä¶ì½ó
#define AD7606_CONVST_H GPIO_SetBits(GPIOE,GPIO_Pin_5)
#define AD7606_CONVST_L GPIO_ResetBits(GPIOE,GPIO_Pin_5)
void spiDelay(void)
{
#if 1
uint32_t i;
/*
Ñó3ù5ê±£¬ F407 (168MHzÖ÷Æ죩 GPIOÄ£Äa£¬êμ2a SCK ÖüÆú = 480ns (′óÔ¼2M)
*/
for (i = 0; i < 5; i++);
#else
/*
2»ìí¼óÑó3ùóï¾ä£¬ F407 (168MHzÖ÷Æ죩 GPIOÄ£Äa£¬êμ2a SCK ÖüÆú = 200ns (′óÔ¼5M)
*/
#endif
}
//AD7606¸′λêäèëoˉêy
void AD7606_RESET(void)
{
printf( "3\r\n");
/* CS SCLKà-¸ß */
// #ifdef SOFT_SPI
AD7606_CS_H;
AD7606_SCLK_H;
// #endif
// /* AD7606êǸßμçƽ¸′룬òaÇó×îD¡Âö¿í50ns */
AD7606_RESET_L;
AD7606_RESET_H;
AD7606_RESET_H;
AD7606_RESET_H;
AD7606_RESET_H;
AD7606_RESET_L;
}
//oˉ êy Ãû: bsp_InitAD7606 1|ÄüËμÃ÷: 3õê¼»ˉAD7606 SPI¿úÏß DÎ2ΣoÎT ·μ »Ø Öμ: ÎT
void InitAD7606(void)
{
AD7606_ConfigGPIO(); /* ÅäÖÃGPIO */
// #ifdef HARD_SPI
// AD7606_CfgSpiHard();
// #endif
AD7606_SETOS(0); /* éèÖÃ1y2éÑùÄ£ê½ */
printf( "2\r\n");
AD7606_RESET(); /* ó2¼t¸′λ¸′AD7606 */
AD7606_CONVST_H; /* CONVST½ÅéèÖÃÎa¸ßμçƽ */
}
//éèÖÃAD7606μÄ1y2éÑùÂêOS[2:0]
void AD7606_SETOS(uint8_t osv)
{
printf( "1\r\n");
switch(osv)
{
case 0://000¡¢ÎT1y2éÑùÂê
AD7606OS0_L;
AD7606OS1_L;
AD7606OS2_L;
break;
case 1://001¡¢2±¶1y2éÑùÂê
AD7606OS0_H;
AD7606OS1_L;
AD7606OS2_L;
break;
case 2://010¡¢4±¶1y2éÑùÂê
AD7606OS0_L;
AD7606OS1_H;
AD7606OS2_L;
break;
case 3://011¡¢8±¶1y2éÑùÂê
AD7606OS0_H;
AD7606OS1_H;
AD7606OS2_L;
break;
case 4://100¡¢16±¶1y2éÑùÂê
AD7606OS0_L;
AD7606OS1_L;
AD7606OS2_H;
break;
case 5://101¡¢32±¶1y2éÑùÂê
AD7606OS0_H;
AD7606OS1_L;
AD7606OS2_H;
break;
case 6://110¡¢64±¶1y2éÑùÂê
AD7606OS0_L;
AD7606OS1_H;
AD7606OS2_H;
break;
}
}
//oˉ êy Ãû: AD7606_CfgSpiHard
//1|ÄüËμÃ÷: ÅäÖÃSTM32Äú2¿SPIó2¼tμÄ1¤×÷Ä£꽡¢Ëù¶èμè2Îêy£¬óÃóú·ÃÎêAD7606
//DÎ 2Î: ÎT
//·μ »Ø Öμ: ÎT
//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(SPI2, &SPI_InitStructure);
// SPI_Cmd(SPI2, ENABLE); /* ê1ÄüSPI */
//}
//oˉ êy Ãû: bsp_InitSPIBus
//1|ÄüËμÃ÷: ÅäÖÃSPI×üÏß¡£ Ö»°üਠSCK¡¢ MOSI¡¢ MISO¿úÏßμÄÅäÖá£2»°üà¨Æ¬Ñ¡CS£¬ò22»°üà¨íaéèD¾Æ¬ìØóDμÄINT¡¢BUSYμè
//DÎ 2Î: ÎT
//·μ »Ø Öμ: ÎT
void InitSPI(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC, ENABLE);
/* ÅäÖü¸¸öíÆíêêä3öIO */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; /* éèÎ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 = GPIO_Pin_13;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* ÅäÖÃGPIOÎa¸¡¶ˉêäèëÄ£ê½(êμ¼êéÏCPU¸′λoó¾íêÇêäèë×′ì¬) */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; /* éèÎ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 = GPIO_Pin_15;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// /* ÅäÖÃ SCK, MISO ¡¢ MOSI Îa¸′óÃ1|Äü */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
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(SPI2, &SPI_InitStructure);
SPI_Cmd(SPI2, ENABLE); /* ê1ÄüSPI */
//
// 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_NOPULL;
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13| GPIO_Pin_15;
// GPIO_Init(GPIOB, &GPIO_InitStructure);
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
// GPIO_Init(GPIOC, &GPIO_InitStructure);
// /* ′ò¿aSPIê±Öó */
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI2, ENABLE);
}
//oˉ êy Ãû: AD7606_ConfigGPIO
//1|ÄüËμÃ÷: ÅäÖÃGPIO¡£ 2»°üਠSCK MOSI MISO 12ÏíμÄSPI×üÏß¡£
//DÎ 2Î: ÎT
//·μ »Ø Öμ: ÎT
static void AD7606_ConfigGPIO(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* ′ò¿aGPIOê±Öó */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC| RCC_AHB1Periph_GPIOD| RCC_AHB1Periph_GPIOE, 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¿ú×î′óËù¶è */
//RESET
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//CONVST,á½Õß½óò»ÆeᬠE5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOE, &GPIO_InitStructure);
//OS[2:0]
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_Init(GPIOE, &GPIO_InitStructure);
//PIN_CS
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_Init(GPIOB, &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¿ú×î′óËù¶è */
//BUSY
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
//oˉ êy Ãû: AD7606_scan1|ÄüËμÃ÷: é¨Ãèμ÷óñ¾oˉêy£¬óÃóú¶áè¡AD×a»»Æ÷êy¾Y/* ′Ëoˉêy′úÂë°′ÕÕê±Dò±àD′ */
void AD7606_Scan(void)
{
uint8_t i;
printf( "4\r\n");
/* BUSY = 0 ê±.ad7606′|óú¿ÕÏD×′ì¬ad×a»»½áêø */
if (AD7606_BUSY == 0)
{
printf( "5\r\n");
AD7606_CS_L; /* SPIƬѡ = 0 */
for (i = 0; i < CH_NUM; i++)
{
s_adc_now[i] = spiRead1();
printf( "6\r\n");
printf( "s_adc_now[i]=:%d\r\n",s_adc_now[i]);
s_adc_now[i] = s_adc_now[i] * 256 + spiRead1(); /* ¶áêy¾Y */
// printf( "s_adc_now[i]=:%d\r\n",s_adc_now[i]);
}
AD7606_CS_H; /* SPIƬѡ = 1 */
printf( "7\r\n");
AD7606_STARTCONV(); /* ¸ø¿aê¼DÅoÅ */
while (AD7606_BUSY == 0);
}
}
void AD7606_STARTCONV(void)
{
printf( "8\r\n");
AD7606_CONVST_L;
AD7606_CONVST_L;
AD7606_CONVST_L;
AD7606_CONVST_H;
}
//¶áè¡AD7606μÄ2éÑù½á1û
uint8_t spiRead1(void)
{
uint8_t i;
uint8_t read = 0;
printf( "read0=:%d\r\n",read);
for (i = 0; i < 8; i++)
{
AD7606_SCLK_L;
spiDelay();
read = read << 1;
if (AD7606_DOUTA == 1)
{
read++;
}
AD7606_SCLK_H;
spiDelay();
}
printf( "read3=:%d\r\n",read);
return read;
//oˉ êy Ãû: GetAdcFormFifo1|ÄüËμÃ÷: ′óFIFOÖD¶áè¡ò»¸öADCÖμ DÎ2Σo_usReadAdc : ′æ·ÅADC½á1ûμıäá¿Ö¸Õë ·μ »Ø Öμ: 1 ±íê¾OK£¬0±íê¾ÔYÎTêy¾Y
int16_t AD7606_ReadAdc(uint8_t _ch)
{
int16_t sAdc;
// DISABLE_INT();
sAdc = s_adc_now[_ch];
// ENABLE_INT();
printf( "sAdc=:%d\r\n",sAdc);
return sAdc;
}
// oˉ êy Ãû: AD7606_Mak
// 1|ÄüËμÃ÷: ′|àí2éÑùoóμÄêy¾Y
// DÎ 2ΣoÎT
// ·μ »Ø Öμ: ÎT
void AD7606_Mak(void)
{
uint8_t i;
int16_t adc;
// int32_t adc;
printf( "9\r\n");
for (i = 0;i < CH_NUM; i++)
{
s_dat[i] = AD7606_ReadAdc(i);
printf( "s_dat[i]=:%d\r\n",s_dat[i]);
//32767 = 5V , ÕaêÇàíÂÛÖ죬êμ¼ê¿éòÔ¸ù¾Y5V»ù×¼μÄêμ¼êÖμ½øDD1«ê½½ÃÕy
//volt[i] = ((int16_t)dat[i] * 5000) / 32767; ¼ÆËãêμ¼êμçÑ1Ö죨½üËÆ1àËãμÄ£©£¬èçDè׼跣¬Çë½øDDD£×¼
//volt[i] = dat[i] * 0.3051850947599719
printf( "10\r\n");
adc = s_dat[i];
printf( "adc=¶áè¡ADC2:%d\r\n",adc);
s_volt[i] = (adc * 10000) / 32767;
printf( "s_volt[i]=¶áè¡ADC3:%d\r\n",s_volt[i]);
}
}
//oˉ êy Ãû: AD7606_Disp
//1|ÄüËμÃ÷: ÏÔê¾2éÑùoóμÄêy¾Y
//DÎ 2ΣoÎT
//·μ »Ø Öμ: ÎT
void AD7606_Disp(void)
{
int16_t i;
int16_t iTemp;
/* ′òó¡2é¼ˉêy¾Y */
for (i = 0; i < CH_NUM; i++)
{
iTemp = s_volt[i]; /* uV */
printf( "11\r\n");
if (s_dat[i] < 0)
{
iTemp = -iTemp;
printf(" CH%d = %6d,0x%04X (-%d.%d%d%d V) \r\n", i+1, s_dat[i], (uint16_t)s_dat[i], iTemp /1000, (iTemp%1000)/100, (iTemp%100)/10,iTemp%10);
}
else
{
printf(" CH%d = %6d,0x%04X ( %d.%d%d%d V) \r\n", i+1, s_dat[i], s_dat[i] , iTemp /1000, (iTemp%1000)/100, (iTemp%100)/10,iTemp%10);
}
}
}
void printf_AD7606(void)
{
AD7606_Mak();
AD7606_Disp();
}
下面是AD7606.h文件
#ifndef __AD7606_H
#define __AD7606_H
//AD7606¶Ë¿ú¶¨òå
//1y2éÑùÂê¿ØÖÆòy½Å
#define AD7606OS0_H GPIO_SetBits(GPIOE,GPIO_Pin_2)
#define AD7606OS0_L GPIO_ResetBits(GPIOE,GPIO_Pin_2)
#define AD7606OS1_H GPIO_SetBits(GPIOE,GPIO_Pin_3)
#define AD7606OS1_L GPIO_ResetBits(GPIOE,GPIO_Pin_3)
#define AD7606OS2_H GPIO_SetBits(GPIOE,GPIO_Pin_4)
#define AD7606OS2_L GPIO_ResetBits(GPIOE,GPIO_Pin_4)
//éèÖÃSPI-CS
#define AD7606_CS_H GPIO_SetBits(GPIOB,GPIO_Pin_12)
#define AD7606_CS_L GPIO_ResetBits(GPIOB,GPIO_Pin_12)
//éèÖÃAD7606_DOUTB
#define AD7606_DOUTB GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)
//êä3ö·±Ã|BUSY,¸′λêäèëRESET
#define AD7606_BUSY GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_5)
#define AD7606_RESET_H GPIO_SetBits(GPIOD,GPIO_Pin_6)
#define AD7606_RESET_L GPIO_ResetBits(GPIOD,GPIO_Pin_6)
/* ¶¨òåGPIO¶Ë¿ú */
//éèÖÃSPI-SCK£¬Æ¬Ñ¡CS
#define AD7606_SCLK_H GPIO_SetBits(GPIOB,GPIO_Pin_13)
#define AD7606_SCLK_L GPIO_ResetBits(GPIOB,GPIO_Pin_13)
//DB7òy½ÅéèÖÃ3éSPI-MISO
#define AD7606_DOUTA GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)
//éèÖÃSPI-MOSI
#define MOSI_L GPIO_ResetBits(GPIOC, GPIO_Pin_3)
#define MOSI_H GPIO_SetBits(GPIOC, GPIO_Pin_3)
/* ¿a1Ø諾ÖÖD¶ÏμÄoê */
#define ENABLE_INT() __set_PRIMASK(0) /* ê1Äü諾ÖÖD¶Ï */
#define DISABLE_INT() __set_PRIMASK(1) /* ½ûÖ1諾ÖÖD¶Ï */
#define SOFT_SPI /* ¶¨òå′ËDD±íê¾ê1óÃGPIOÄ£ÄaSPI½ó¿ú */
//#define HARD_SPI /* ¶¨òå′ËDD±íê¾ê1óÃCPUμÄó2¼tSPI½ó¿ú */
typedef unsigned char uint8_t;
#define CH_NUM 8 /* 2é¼ˉ2í¨μà */
//¶¨òåoˉêy
void AD7606_RESET(void); //AD7606¸′λoˉêy
void AD7606_STARTCONV(void); //AD7606¿aÆô×a»»oˉêy
static void AD7606_ConfigGPIO(void);
void AD7606_CfgSpiHard(void);
void AD7606_SETOS(uint8_t osv);//éèÖÃAD7606μÄ1y2éÑùÂêOS[2:0]
void InitAD7606(void);
void AD7606_Scan(void);
uint8_t spiRead1(void);
void printf_AD7606(void);
void spiDelay(void);
void InitSPI(void);
#endif
求助大佬!!!!!
|
|