资源简介
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位版
相关资源
- stm32f103c8t6 最小系统 开发板 AD电路图
- stm32 modbus
- STM32 4*4矩阵键盘扫描方式
- STM32F103 AM2302温湿度模块驱动例程
- STM32F103 NRF24L01无线通讯模块驱动例程
- DHT11与STM32F103ZET6
- stm32f103的PCF8563驱动代码
- STM32并口、串口驱动12864
- STM32F1+PS2+Serial+PWM (KEIL5)
- STM32f103zet6.Schlib 器件原理图 封装 Al
- 基于stm32的血压算法
- STM32F103串口DMA接收
- STM32 DMA中断模式下ADC多通道数据采集
- 通过PID算法控制STM32的PWM输出
- 1602液晶可靠的4位数据线方式驱动_基
- 嵌入式平台 STM32 libqrencode 移植二维码
- STM32Pack支持包
- 战舰stm32蓝牙开发代码
- 基于STM32的VL53L0X程序源码
- STM32F103C8T6核心板之配套程序源码 -
- 4*4矩阵键盘(方法2) STM32F103
- stm32f105双CAN协议盒PCB板适用于车载
- STM32_DS1302
- STM32HAL库使用NTC热敏电阻读取温度代码
- 实验5 外部中断实验.zip
- stm32f103+Vs1003b例程
- AD Altium Designer STM8 STM32 库
- STM32 两轮平衡车 程序 获取姿态传感器
- STM32F103使用定时器的捕获方式测量车
- STM32F407 步进电机含角度输出Keil代码
评论
共有 条评论