您的位置 首页 汽车

DMM电阻丈量剖析笔记三~ADS1232驱动程序

虽然一开始打算做的是四位半万用表,但是,我们的终极目标是用高档表——六位半,向经典表王——安捷伦34401A学习。所以,我思前想后,LT

尽管一开始计划做的是四位半万用表,可是,咱们的终极目标是用高级表—— 六位半,向经典表王——安捷伦34401A学习。所以,我左思右想,LT2440无疑是最好的挑选,由于其是积分型ADC,温漂够小,可是其价格昂贵,所以我计划在后期六位半中运用,四位半实验阶段就用TI的ADS1232,同是24位ADC,但ADS1232的淘宝价格是12元,与LT2440的几十个大洋想比,仍是很廉价的。

下面是ADS1232的STM32驱动程序

#include”stm32f10x.h”
#include”delay.h”
#include”ads1232.h”
extern unsigned char flag;
#define DOUT GPIO_Pin_0
#define SCLK GPIO_Pin_1
#define PDWN GPIO_Pin_2
#define SPEED GPIO_Pin_3
#define GAIN0 GPIO_Pin_4
#define GAIN1 GPIO_Pin_5
#define A0 GPIO_Pin_6
#define ADPORT GPIOB
#define DOUT_H GPIO_SetBits(ADPORT,DOUT)
#define DOUT_L GPIO_ResetBits(ADPORT,DOUT)
#define SCLK_H GPIO_SetBits(ADPORT,SCLK)
#define SCLK_L GPIO_ResetBits(ADPORT,SCLK)
#define SPEED_H GPIO_SetBits(ADPORT,SPEED)
#define SPEED_L GPIO_ResetBits(ADPORT,SPEED)
#define PDWN_H GPIO_SetBits(ADPORT,PDWN)
#define PDWN_L GPIO_ResetBits(ADPORT,PDWN)
#define A0_H GPIO_SetBits(ADPORT,A0) //AIN 2
#define A0_L GPIO_ResetBits(ADPORT,A0) //AIN 1
#define GAIN_1 GPIO_ResetBits(ADPORT,GAIN0|GAIN1);
/****************************************************
*function name: void AD_InitIO(void)
*description : AD GPIO Initialization,PB0-DOUT,PB1-SCLK
*input : null
*output : null
*return ºnull
******************************************************/
void AD_InitIO(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin=SCLK;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(ADPORT,&GPIO_InitStructure);
}
/****************************************************
*function name: void DOUT_IN(void)
*description : ADS1232s DOUT PB0 config input
*input : null
*output : null
*return ºnull
******************************************************/
void DOUT_IN(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin=DOUT;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //ÉÏÀ­ÊäÈë
GPIO_Init(ADPORT,&GPIO_InitStructure);
}
/****************************************************
*function name: void DOUT_OUT(void)
*description : ADS1232s DOUT PB0 config input
*input : null
*output : null
*return ºnull
******************************************************/
void DOUT_OUT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin=DOUT;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(ADPORT,&GPIO_InitStructure);
}
/****************************************************
*function name: unsigned long AD_read(void)
*description : read AD data
*input : null
*output : null
*return ºnull
******************************************************/
unsigned long AD_read(unsigned char channel)
{
int i=0;
unsigned long ad_value=0;
AD_InitIO();
SCLK_L;
PDWN_L;
delay_us(20);
if(channel == 1)
{
A0_L; //AIN1
}
else
{
A0_H; //AIN2
}
GAIN_1;
SPEED_H; //80SPS
PDWN_H;
delay_us(20);
// DOUT_OUT();
// DOUT_H;
// delay_us(1);
DOUT_IN();
while(GPIO_ReadInputDataBit(ADPORT,DOUT)==1);
//delay_ms(200);
flag=1;
for(i=0;i<24;i++)
{
ad_value=ad_value<<1;
SCLK_H;
delay_us(2);
if(GPIO_ReadInputDataBit(ADPORT,DOUT)==1)
{
ad_value|=0x00000001; //or ad_value+=1;
}
else
SCLK_L;
delay_us(2);
}
SCLK_H;
delay_us(2);
SCLK_L;
delay_ms(1);
return ad_value;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/210573.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部