资源简介
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
- 上一篇:Cloudera Manager安装部署
- 下一篇:MinGW64位版
相关资源
- STM32F103RC+ADC+DMA多通道采样LCD显示
- I2C读写AT24C02 基于STM32F103 cube116540
- 基于stm32f103ve的程序——跑马灯实验
- 基于STM32RCT6的步进电机驱动程序
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- STM32 2.4G通信例程
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- STM32基于rt_thread操作系统的SDHC卡文件
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
- STM32F103 CC2500完整驱动(模拟SPI)
- AD7606采集程序
- stm32 用SPI 方式读写 SDHC
- stm32通过DMA方式采集ADC数据
- 意法半导体STM全系列微控制器STM32ST
- 基于STM32芯片的SX1278 驱动 LORA.rar
评论
共有 条评论