#include "Delay.h"
#include "ADS1248.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_spi.h"
#include "stm32f10x_rcc.h"
#include "INCLUDES.h"
bool gbIsADCConvertComplete=FALSE;
float gfADConvertVal=0.0;
/*******************************************************************************
* Function Name : SPI_GPIO_Config
* Description : Configure the used I/O ports pin
* Input : None
* Output : None
* Return : None
*******************************************************************************/
static void SPI_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);//使能SPI1的时钟
/* Configure SPI1 pins: SCK, MISO and MOSI */
/*
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //sclk
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //Dout
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //DIN
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/*******************************************************************************
* Function Name : SPI_Config
* Description : SPI Configuration
* Input : None
* Output : None
* Return : None
*******************************************************************************/
static void SPI_Config(void)
{
SPI_InitTypeDef SPI_InitStructure;
/* SPI1 configuration */
SPI_InitStructure.SPI_Direction =SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode =SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low ;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit =SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
}
/*******************************************************************************
* Function Name : Initialize_SPI
* Description : Initializes the SPI.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void ADS1248_Config(void)
{
Delay_N_10ms(1);
ADS1248_GPIO_Config();
SPI_GPIO_Config(); //GPIO configuration
SPI_Config(); //SPI configuration
}
/*******************************************************************************/
void ADS1248_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//配置PA3,此端口连接ADS1248的DRDY
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//配置PB_0,PB_1,分别连接到ADS1248的CS,START
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
ADS1248_START=0;
ADS1248_CS=1; //复位
}
void ADS1248_Intial(void)
{
ADS1248_START=1;
ADS1248_CS=1; //复位
Delay_N_10ms(10);
SPI_Cmd(SPI1,ENABLE);//允许SPI1
ADS1248_SendResetCommand();
Delay_N_10ms(1);
ADS1248_SendDsyncCommand();
ADS1248_SendDsyncCommand();
General_N_1us(300);
ADS1248_WriteOneRegister(ADS1248_MUX1_REGISTER,0x28);
ADS1248_WriteOneRegister(ADS1248_SYS0_REGISTER,0x08);
//芯片自身偏置校正
// ADS1248_SendSelfOCalCommand();
// Delay_N_10ms(10);
//ADS1248_SelInputChannel(ADS1248_MUXP_AIN3|ADS1248_MUXN_AIN2);
ADS1248_SelInputChannel(ADS1248_MUXP_AIN0|ADS1248_MUXN_AIN1);
ADS1248_SelMuxCal(ADS1248_NORMAL_OPT);
ADS1248_SetGain(ADS1248_GAIN_32);
ADS1248_SetSPS( ADS1248_SPS_20);
ADS1248_CS=1; //复位;
Delay_N_10ms(1);
}
void ADS1248_ReIntial(void)
{
IWDG_ReloadCounter();
ADS1248_START=1;
ADS1248_SendResetCommand();
General_N_1ms(1);
ADS1248_SendDsyncCommand();
ADS1248_SendDsyncCommand();
General_N_1us(300);
ADS1248_WriteOneRegister(ADS1248_MUX1_REGISTER,0x28);
ADS1248_WriteOneRegister(ADS1248_SYS0_REGISTER,0x08);
ADS1248_SelInputChannel(ADS1248_MUXP_AIN0|ADS1248_MUXN_AIN1);
ADS1248_SelMuxCal(ADS1248_NORMAL_OPT);
ADS1248_SetGain(ADS1248_GAIN_32);
ADS1248_SetSPS( ADS1248_SPS_20);
}
//--------------------------------------------------------------------------------
//函数名称: ADS1248_ADConvetOneTime
//函数功能: 进行一次AD转换,等待转换完成
//入口参数: 无
//出口参数: 无
void ADS1248_ADConvetOneTime(void)
{
ADS1248_SendDsyncCommand();
ADS1248_SendDsyncCommand();
General_N_1us(100);
// ADS1248_START=0;
// Delay_N_1us(1);
ADS1248_START=1;
// Delay_N_1us(2);
// ADS1248_START=0;
// Delay_N_1us(1);
ADS1248_SetADCConvetStatus(FALSE);
ADS1248_MaskDrdyEXTI3(TRUE); //允许EXTI3
ADS1248_WaitForADCCcomplete();
ADS1248_MaskDrdyEXTI3(FALSE); //禁止EXTI3
}
//--------------------------------------------------------------------------------
//函数名称: ADS1248_SetADCConvetStatus
//函数功能: 设置AD转换状态:是否转化完成
//入口参数: bStatusData:TRUE:转换完成,FALSE:没完成
//出口参数: 无
void ADS1248_SetADCConvetStatus(bool bStatusData)
{
if(TRUE==bStatusData)
{
gbIsADCConvertComplete=TRUE;
}
else
{
gbIsADCConvertComplete=FALSE;
}
}
//--------------------------------------------------------------------------------
//函数名称: ADS1248_WaitForADCCcomplete
//函数功能: 等待AD转换完成
//入口参数: 无
//出口参数: TURE
bool ADS1248_WaitForADCCcomplete(void)
{
do
{
// Delay_N_10us(1);
IWDG_ReloadCounter();
General_N_1us(100);
}
while(gbIsADCConvertComplete!=TRUE);
return TRUE;
}
//--------------------------------------------------------------------------------
//函数名称: ADS1248_GetADConvertValue
//函数功能: 获取AD转换的电压值
//入口参数: 无
//出口参数: AD转换的电压值
float ADS1248_GetADConvertValue(void)
{
return gfADConvertVal;
}
//--------------------------------------------------------------------------------
//函数名称: ADS1248_SetADConvertValue
//函数功能: 设置AD转换的电压值
//入口参数: AD转换的电压值
//出口参数: 无
void ADS1248_SetADConvertValue(float fADConvetVal)
{
gfADConvertVal=fADConvetVal;
}
/*******************************************************************************
* Function Name : SPI_FLASH_SendByte
* Description : Sends a byte through the SPI interface and return the byte
* received from the SPI bus.
* Input : byte : byte to send.
* Output : None
* Return : The value of the received byte.
*******************************************************************************/
u8 SPI_SendByte(u8 byte)
{
/* Loop while DR register in not emplty */
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
/* Send byte through the SPI1 peripheral */
SPI_I2S_SendData(SPI1, byte);
/* Wait to receive a byte */
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
/* Return the byte read from the SPI bus */
return SPI_I2S_ReceiveData(SPI1);
}
/**************************************************************
评论5