• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签: ADS8688  高速AD  stm32  

资源简介

TI公司的高速AD芯片,ADS8688模拟到数据的解决方案。网上找不到驱动资料,我自己写的驱动stm32驱动代码,希望能给大家带来帮助,谢谢!

资源截图

代码片段和文件信息

#include “ADS8688.H“
#include “spi.h“

//初始化ADS8688,并且检验读入寄存器数据和写入的是否一样
//返回TURE则说明初始化正常,否则错误
bool ADS8688_Init(void)
{
u8 i = 0;
GPIO_InitTypeDef GPIO_InitStructure;
  
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC ENABLE );

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //PA4->ADS8688CS
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA &GPIO_InitStructure);
GPIO_SetBits(GPIOAGPIO_Pin_4);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //PC4->ADS8688RST
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC &GPIO_InitStructure);
GPIO_SetBits(GPIOCGPIO_Pin_4);

SPI1_Init(); //初始化SPI1
Enter_RESET_MODE();
ADS8688_Write_Program_Register(0X010XF0);
i = ADS8688_READ_Program_Register(0X01);
if (i==0XF0)
return TRUE;
else return FALSE;
}

void ADS8688_Reset(void) //hardware reset
{
u8 i=5;
ADS8688RST = 0;
while (i--);
ADS8688RST = 1;
}

void ADS8688_PWRDN(void) //hardware power-down
{
u8 i=50;
ADS8688RST = 0;
while (i--);
}

void ADS8688_PWRUP(void) //power-down
{
ADS8688RST = 1;
}

void ADS8688_WriteCommandReg(u16 command)//写ADS8688命令寄存器
{
ADS8688CS = 0;
SPI1_ReadWriteByte(command>>8 & 0XFF);
SPI1_ReadWriteByte(command & 0XFF);
ADS8688CS = 1;
}

void Enter_RESET_MODE(void) //软件复位模式,复位 program registers
{
ADS8688_WriteCommandReg(RST);
}

//进入STDBY模式,且命令发送后CS立刻置高,不读数据帧;
//退出此模式需执行AUTO_RST或者MAN_CH_n命令,且需要等待至少20us以保证正常数据的AD转换
void Enter_STANDBY_MODE (void)
{
ADS8688_WriteCommandReg(STDBY);
}

//进入PWR_DN模式,且命令发送后CS立刻置高,不读数据帧;
//退出此模式需执行AUTO_RST或者MAN_CH_n命令,且需要等待至少15ms以保证正常数据的AD转换
void Enter_POWERDOWN_MODE (void) //此为软件方式进入PWR_DN模式,与硬件方式区别是不改变 program registers
{
ADS8688_WriteCommandReg(PWR_DN);
}

void AUTO_RST_Mode(void) //进入自动扫描模式
{
ADS8688_WriteCommandReg(AUTO_RST);
}

//读取扫描通道序列的AD转换数据code到变量数组中
void Get_AUTO_RST_Mode_Data(u16* outputdata u8 chnum)
{
u8 i=0datal=0datah=0;
u16 data=0;
for (i=0; i {
ADS8688CS = 0;
SPI1_ReadWriteByte(0X00);
SPI1_ReadWriteByte(0X00);
datah = SPI1_ReadWriteByte(0XFF);
datal = SPI1_ReadWriteByte(0XFF);
ADS8688CS = 1;

data = datah<<8 | datal; //高位在前,低位在后
*(outputdata+i) = data;
}
}

void MAN_Ch_n_Mode(u8 ch) //手动模式
{
ADS8688_WriteCommandReg(ch);
}

//读取手动通道的AD转换数据code
u16 Get_MAN_Ch_n_Mode_Data(void)
{
u8 datah=0datal=0;
ADS8688CS = 0;
SPI1_ReadWriteByte(0X00);
SPI1_ReadWriteByte(0X00);
datah = SPI1_ReadWriteByte(0XFF);
datal = SPI1_ReadWriteByte(0XFF);
ADS8688CS = 1;

return (datah<<8 | datal);
}

//Program Register写操作
void ADS8688_Write_Program_Register(u8 Addru8 data)
{
ADS8688CS = 0;
SPI1_ReadWriteByte(Addr<<1 | WRITE);
SPI1_ReadWriteByte(data);
ADS8688CS = 1;
}

//Program Register读操作
u8 ADS8688_READ_Program_Register(u8 Addr)
{
u8 data =

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-02-02 15:59  ADS8688\
     文件        3757  2016-01-21 10:20  ADS8688\ADS8688.c
     文件        2529  2016-01-21 10:21  ADS8688\ADS8688.h

评论

共有 条评论