DMM电阻测量分析笔记三~ADS1232驱动程序
下面是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;
}
DMM电阻测量ADS1232驱动程 相关文章:
- 频宽、取样速率及奈奎斯特定理(09-14)
- 为什么要进行信号调理?(09-30)
- IEEE802.16-2004 WiMAX物理层操作和测量(09-16)
- 为任意波形发生器增加价值(10-27)
- 基于PCI 总线的高速数据采集系统(09-30)
- 泰克全新VM6000视频测试仪助力数字电视等产品测试 (10-06)