环境:STM32F103RC,主频 72MHz(外部晶振)或64MHz(HSI)

普通IO口模拟spi

note:自动扫描模式下改完量程,必须要增加AUTO_RST_Mode()。

代码实现:

// ADS8684.c#define ADS8684_GLOBALS
#include "ADS8684.h"/********************************************************普通IO口模拟spi驱动********************************************/
/******************************************************
函数名称:ReadWriteByte
函数描述:IO口模拟spi读写8位数据,上升沿写数据,下降沿读数据
Calls:
Called by:
输入参数:data:需要写入的数据
返回值:读到的8位数据
******************************************************/
static uint32_t ReadWriteByte(uint32_t data)
{uint32_t status = 0;uint32_t result = 0;for (int number = 0; number < 8; number++){if (data & (1 << (7 - number))){ADS8684_SDI_H;}else{ADS8684_SDI_L;}ADS8684_CLK_H; ADS8684_CLK_H;  ADS8684_CLK_H;              status = ADS8684_SD0_STATUS();     ADS8684_CLK_L;if (status){result |= 1; }                       result <<= 1;                     }return (result >> 1);
}/***************************************************************************************************************//********************************************************ADS8684驱动********************************************/
/******************************************************
函数名称:WriteCommandReg
函数描述:写ADS8688命令寄存器
Calls:
Called by:
输入参数:command:命令寄存器
返回值:无
******************************************************/
static void WriteCommandReg(uint32_t command)
{ADS8684_CS_L;ReadWriteByte((command & 0xff00) >> 8);ReadWriteByte(command & 0xff);ADS8684_CS_H;
}/******************************************************
函数名称:AUTO_RST_Mode
函数描述:进入自动扫描模式
Calls:
Called by:
输入参数:无
返回值:无
******************************************************/
void AUTO_RST_Mode(void)
{WriteCommandReg(AUTO_RST);
}/******************************************************
函数名称:Write_Program_Register
函数描述:Program Register写操作
Calls:
Called by:
输入参数:Addr:Program Register地址data:写入Program Register的值
返回值:无
******************************************************/
static void Write_Program_Register(uint32_t Addr, uint32_t data)
{ADS8684_CS_L;ReadWriteByte((Addr << 1) | WRITE);ReadWriteByte(data);ADS8684_CS_H;
}/******************************************************
函数名称:Read_Program_Register
函数描述:Program Register读操作
Calls:
Called by:
输入参数:Addr:Program Register地址
返回值:Program Register的值
******************************************************/
uint32_t Read_Program_Register(uint32_t Addr)
{uint32_t data = 0;ADS8684_CS_L;ReadWriteByte((Addr) << 1 | READ);data = ReadWriteByte(0XFF);data = ReadWriteByte(0XFF);ADS8684_CS_H;return data;
}/******************************************************
函数名称:Set_Auto_Scan_Sequence
函数描述:设置自动扫描序列通道
Calls:
Called by:
输入参数:seq:需要设置Auto-Scan Sequence Enable Register的值
返回值:无
******************************************************/
void Set_Auto_Scan_Sequence(uint32_t seq)
{Write_Program_Register(AUTO_SEQ_EN, seq);
}/******************************************************
函数名称:Set_CH_Range_Select
函数描述:设置各个通道的范围
Calls:
Called by:
输入参数:ch:通道输入范围寄存器地址range:量程范围
返回值:无
******************************************************/
void Set_CH_Range_Select(uint32_t ch, uint32_t range)
{Write_Program_Register(ch, range);
}
/***************************************************************************************************************//******************************************************
函数名称:Get_AUTO_RST_Mode_Data
函数描述:读取扫描通道序列的AD转换数据
Calls:
Called by:
输入参数:pADCData:传入gUADCData.ChADCDatachNum:总通道数
返回值:无
******************************************************/
static void Get_AUTO_RST_Mode_Data(uint16_t* pADCData, uint32_t chNum)
{uint32_t datal = 0, datah = 0;for (uint32_t i = 0; i < chNum; i++){ADS8684_CS_L;ReadWriteByte(0X00);ReadWriteByte(0X00);datah = ReadWriteByte(0XFF);datal = ReadWriteByte(0XFF);ADS8684_CS_H;*(pADCData + i) = (datah << 8) | datal; //高位在前,低位在后}
}/******************************************************
函数名称:Init_ADS8684
函数描述:ADS8684的初始化代码
Calls:
Called by: main
输入参数:无
返回值:TRUE:初始化成功;FALSE:初始化失败
******************************************************/
uint32_t Init_ADS8684(void)
{   Set_Auto_Scan_Sequence(0x0F);// 通道1~通道4if (Read_Program_Register(AUTO_SEQ_EN) != 0x0F){return FALSE;}AUTO_RST_Mode(); // 默认通道1~通道4的量程为-10~10Vreturn TRUE;
}
// ADS8684.h
#ifndef __ADS8684_H
#define __ADS8684_H#ifdef ADS8684_GLOBALS
#define ADS8684_EXT
#else
#define ADS8684_EXT extern
#endif#include "global.h"/**************************************ADS8684寄存器********************************************/
//Command Register
#define NO_OP       0X0000
#define STDBY       0X8200
#define PWR_DN      0X8300
#define RST         0X8500
#define AUTO_RST    0XA000
#define MAN_Ch_0    0XC000
#define MAN_CH_1    0XC400
#define MAN_Ch_2    0XC800
#define MAN_Ch_3    0XCC00
#define MAN_Ch_4    0XD000
#define MAN_Ch_5    0XD400
#define MAN_Ch_6    0XD800
#define MAN_Ch_7    0XDC00
#define MAN_AUX     0XE000//Program Register
#define AUTO_SEQ_EN             0X01
#define Channel Power Down      0X02
#define Feature Select          0X03#define Channel_0_Input_Range       0X05
#define Channel_1_Input_Range       0X06
#define Channel_2_Input_Range       0X07
#define Channel_3_Input_Range       0X08
#define Channel_4_Input_Range       0X09
#define Channel_5_Input_Range       0X0A
#define Channel_6_Input_Range       0X0B
#define Channel_7_Input_Range       0X0C#define Ch_0_Hysteresis             0X15
#define Ch_0_High_Threshold_MSB     0X16
#define Ch_0_High_Threshold_LSB     0X17
#define Ch_0_Low_Threshold_MSB      0X18
#define Ch_0_Low_Threshold_LSB      0X19#define Ch_7_Hysteresis             0X38
#define Ch_7_High_Threshold_MSB     0X39
#define Ch_7_High_Threshold_LSB     0X3A
#define Ch_7_Low_Threshold_MSB      0X3B
#define Ch_7_Low_Threshold_LSB      0X3C#define Command_Read_Back           0X3F    #define WRITE   1
#define READ    0#define CH7_EN  0X80
#define CH6_EN  0X40
#define CH5_EN  0X20
#define CH4_EN  0X10
#define CH3_EN  0X08
#define CH2_EN  0X04
#define CH1_EN  0X02
#define CH0_EN  0X01#define CH7_PD  0X80
#define CH6_PD  0X40
#define CH5_PD  0X20
#define CH4_PD  0X10
#define CH3_PD  0X08
#define CH2_PD  0X04
#define CH1_PD  0X02
#define CH0_PD  0X01#define VREF_25_25      0X00
#define VREF_125_125    0X01
#define VREF_0625_0625  0X02
#define VREF_0_25       0X05
#define VREF_0_125      0X06
/***********************************************************************************************/

ADS8684 驱动相关推荐

  1. ADS8688 驱动记录(ATmega128)

    做了一块用于污水处理单元的控制采集板,其中传感器部分大部分是4-20ma的电流输出,由于要做全隔离设计,于是采用了TI的8路ADC芯片ADS8688实现.原理图部分如下: 驱动部分代码,在他人基础上修 ...

  2. 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态

    嵌入式Linux设备驱动程序:在运行时读取驱动程序状态 Embedded Linux device drivers: Reading driver state at runtime 在运行时了解驱动程 ...

  3. 0、Spring 注解驱动开发

    0.Spring注解驱动开发 0.1 简介 <Spring注解驱动开发>是一套帮助我们深入了解Spring原理机制的教程: 现今SpringBoot.SpringCloud技术非常火热,作 ...

  4. 安装 Python MySQL 驱动(mysql-connector-python、MySQL-python)

    1. 安装 由于 MySQL 服务器以独立的进程运行,并通过网络对外服务,所以,需要支持 Python 的MySQL 驱动来连接到 MySQL 服务器. 目前,有两个MySQL驱动: mysql-co ...

  5. Linux驱动框架之framebuffer驱动框架

    1.什么是framebuffer? (1)framebuffer帧缓冲(一屏幕数据)(简称fb)是linux内核中虚拟出的一个设备,framebuffer向应用层提供一个统一标准接口的显示设备.帧缓冲 ...

  6. [Ubuntu] 安装/卸载 声卡驱动

    卸载 sudo apt-get --purge remove linux-sound-base alsa-base alsa-utils 安装 sudo apt-get install linux-s ...

  7. pci串口驱动安装失败_TSC TTP-243E Pluse装LTP并口驱动无法安装

    一.前言描述 接到客户报修说,电脑无法开机,即到哥上门维修立即安排人员到现场查看原因,到现场后,查看的确是电脑系统问题,重新安装系统,安装完成系统后,发现打印机无法使用.这个打印机型号是TSC TTP ...

  8. linux mipi驱动分析_寒武纪社招内推数字IC设计、DSI驱动、软件架构、产品经理、芯片架构、工具链开发、深度学习、FAE工程师...

    点击上方蓝字关注我吧! 为什么内推更靠谱?内推是基于人脉关系链的推荐,其背后有一定的信用背书,靠谱的人推荐的人相对也会比较靠谱,所以企业一般职位都是从内部开始分享的,相较于自己海投简历,内推的效率和成 ...

  9. i7 7700hq安装Linux,黑苹果安装火影金刚4K VULCAN JinGang GTX i7-7700HQ 独显驱动 Hackintosh...

    严格来说,这不是一台笔记本,更像是一台移动一体机.火影金刚4K,独显GTX 1060,核显HD 630,在BIOS里是可以屏蔽核显的.所以这一次安装黑苹果时,直接当是一台IMAC来安装,连机型都是选择 ...

最新文章

  1. .net mvc 报表_Web在线报表设计器使用指南
  2. 16-作用域(全局作用域及局部作用域)
  3. Spark入门:也可以用Java创建轻量级的RESTful应用程序
  4. 超好用的webssh(支持秘钥登录)
  5. scanf可以输入负数吗_C语言进行数据的多输入多输出
  6. staruml java_非常详细的StarUML使用教程,推荐阅读!
  7. Confluence 6 完成你的任务
  8. 魔兽世界python脚本拍卖行_Python大法之告别脚本小子系列—信息资产收集类脚本编写(上)...
  9. mysql-存储过程 使用游标获取数据集并且操作
  10. Rust 与服务端编程的碎碎念
  11. 双系统装完只能u盘启动_U盘启动盘如何安装Win7+Win8双系统史上最详细教程
  12. 易语言制作计算软件简单步骤_基于飞时达FastTFT软件方格网法计算土方量的具体步骤...
  13. 基于STM32CUBE MX 的TM1640的使用例程
  14. Python中的 生成器、迭代器
  15. 大学英语(第三册)复习(原文及全文翻译)——Unit 7 - The Shelter(防空洞)
  16. 安卓逆向007之安卓系统架构
  17. eclipse中referenced libraries的引入方法
  18. 【Linux常用命令】linux常用命令集合配例子解析说明(持续更新)【Linux基础命令使用及总结】2020-12-21
  19. 外一篇:九阳豆浆机故障一则
  20. [附源码]计算机毕业设计Python+uniapp基于Android的学生评教系统rfl6a(程序+源码+LW+远程部署)

热门文章

  1. 用python发送163邮件
  2. linux回到命令首字符,Linux 命令词典选段
  3. 洛谷P1957 口算练习题
  4. 【自语】如何前后端的web及移动都打通?
  5. 欧盟委员会敲定新SCC,以恢复正常的欧盟-美国数据传输协议
  6. Delphi中关于DBGrid的DrawDataCell和DrawColumnCell的触发条件
  7. RHCE考点-个人见解
  8. BlackBerry 软件全球现已部署超过2.15亿辆汽车
  9. 对偶方法(Dual Methods)
  10. 基于51单片机的传送带产品计数器