|

楼主 |
发表于 2024-1-1 18:09:15
|
显示全部楼层
本次测试使用的AD7175代码,@STM32F103CB:
#define ADC_CLK_0 GPIO_ResetBits(GPIOB, GPIO_Pin_9) //PB9
#define ADC_CLK_1 GPIO_SetBits(GPIOB, GPIO_Pin_9)
#define IO_ADC_DAT GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_6) //PB6
#define ADC_SDI_1 GPIO_SetBits(GPIOB, GPIO_Pin_8)
#define ADC_SDI_0 GPIO_ResetBits(GPIOB, GPIO_Pin_8)
#define ADC_CS_1 GPIO_SetBits(GPIOB, GPIO_Pin_7)
#define ADC_CS_0 GPIO_ResetBits(GPIOB, GPIO_Pin_7)
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
//对应的SCK、MOSI为AF引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//液晶初始化I/O口 rs/rst
//PB10 CS
//PB11 RES
//PB12 RS A0
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_14|GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7|GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_6 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
uint32_t AD7175_RDATA(void)//
{
uint32_t Rdata=0;
// while(IO_ADC_DAT);
for(uint8_t s=0;s<24;s++)
{
ADC_CLK_0 ;
delay(1);
Rdata<<=1;
if(IO_ADC_DAT) Rdata++;
ADC_CLK_1;
delay(1);
}
return Rdata;
}
void AD7175_SPI_WB(uint8_t com)
{
uint8_t com_temp=com;
for(uint8_t s=0;s<8;s++)
{
if(com_temp&0x80)
{
ADC_SDI_1;
delay(10);
}
else
{
ADC_SDI_0;
delay(10);
}
ADC_CLK_0 ;
delay(10);
com_temp<<=1;
ADC_CLK_1 ;
delay(10);
}
}
uint8_t AD7175_SPI_RB(void)
{
uint8_t Rdata=0;
for(uint8_t s=0;s<8;s++)
{
ADC_CLK_0 ;
delay(10);
Rdata<<=1;
if(IO_ADC_DAT) Rdata++;
ADC_CLK_1 ;
delay(10);
}
return Rdata;
}
void AD7175_RESET(void)
{
ADC_CLK_1 ;
delay(0xff);
ADC_CS_0;
delay(10);
for(uint8_t a=0;a<15;a++)
{
AD7175_SPI_WB(0xff);
}
ADC_CS_1;
delay(0xff);//等待复位完成
ADC_CS_0;
}
uint16_t AD7175_Read_Reg(uint8_t addr)
{
uint16_t reg;
ADC_CS_0;
delay(10);
AD7175_SPI_WB(addr);
reg=AD7175_SPI_RB();
reg<<=8;
reg|=AD7175_SPI_RB();
ADC_CS_1;
delay(10);
return reg;
}
uint16_t Get_AD7175_ID(void)
{
uint16_t ID;
ID=0;
ADC_CS_0;
delay(10);
AD7175_SPI_WB(0x47);
ID=AD7175_SPI_RB();
ID<<=8;
ID|=AD7175_SPI_RB();
ADC_CS_1;
delay(10);
return ID;
}
void AD7175_INIT(void)//初始化函数
{
ADC_CS_0;
delay(10);
AD7175_SPI_WB(0x06);//GPIO 配置寄存器
AD7175_SPI_WB(0x00);//
AD7175_SPI_WB(0x0d);//写入0x0c时,D3、D5灭
AD7175_SPI_WB(0x01);//写ADC模式寄存器
AD7175_SPI_WB(0x20);// chang to external vref, single cycle
AD7175_SPI_WB(0x0c);//连续转换模式、外部晶振// external crystal: 11 00
AD7175_SPI_WB(0x10);//写通道映射寄存器0
AD7175_SPI_WB(0x00);//使能通道0,禁止多通道
AD7175_SPI_WB(0x44);//ADC+ -> AIN2;ADC- ->AIN4(AVSS)
AD7175_SPI_WB(0x20);//写配置寄存器
AD7175_SPI_WB(0x00);//// all ZERO ,all buffer closed. single-end, no buffer, ext ref
AD7175_SPI_WB(0x00);//
AD7175_SPI_WB(0x28);//写滤波器配置寄存器0
AD7175_SPI_WB(0x05);//
AD7175_SPI_WB(0x13);//0x07:10k 0x0A:1k 0x0f:59.95sps 0x14:5sps 0x05: 25ksps 0x13:10sps 0x12: 16.6sps
AD7175_SPI_WB(0x02);//写接口模式寄存器
AD7175_SPI_WB(0x01);// DOUT_RESET bit is used
AD7175_SPI_WB(0x80);//
}
uint32_t Get_Vol(void)
{
uint32_t v=0;
while(IO_ADC_DAT);
v = AD7175_RDATA();
return v;
}
void delay_us(uint32_t time)
{
while (time--);
}
/* 毫秒级延时函数 */
void delay(uint32_t time)
{
while(time--) delay_us(10);
}
float Vtest;
uint32_t AdcValue;
int main(void)
{
SystemInit();
RCC_Configuration();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
GPIO_Config();
AD7175_RESET();//复位AD7175-2
AD7175_ID=Get_AD7175_ID();//读取AD7175 ID 0X0CDX;
AD7175_INIT();
while(1)
{
AdcValue = Get_Vol();
Vtest = AdcValue *5.06*2.5/16777216; // 5.06 is ADC_Ref; 2.5 is reversed-scale of scale of 3:2.
delay(45000);
}
|
|