1,初始化

接口:
/********************************************
     SPI2           STM32      ADS1256
    
    NSS      --  PB12   --   CS
    SCK      --  PB13   --  SCLK
    MISO    --  PB14   --  DOUT
    MOSI    --  PB15   --  DIN
                       PB10   --  DRDY
             PB11   --  RESET
    
    
********************************************/

2,ADS_sum(a,b):函数功能,测量电压a-b
          ADS1256_MUXP_AIN(0~7)代表通道0~7,差分正 P:positive
           ADS1256_MUXN_AIN(0~7)代表通道0~7,差分负 N:negative
            
            例:差分测量通道0和1:ADS_sum(ADS1256_MUXP_AIN0 | ADS1256_MUXN_AIN1);    返回通道0-通道1的电压值
                   单端测量通道0:   ADS_sum(ADS1256_MUXP_AIN0 | ADS1256_MUXN_AINCOM);  返回通道0对地的电压值


#include <stdio.h>
#include "stm32f10x_gpio.h"
#include "ADS1256.h"void SPI2_Init(void)
{SPI_InitTypeDef  SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;/****Initial SPI2******************//* Enable SPI2 and GPIOB clocks */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);/* Configure SPI2 pins: NSS, SCK, MISO and MOSI */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);//SPI2 NSS GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_SetBits(GPIOB, GPIO_Pin_12);/* SPI2 configuration */ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                   SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;      SPI_InitStructure.SPI_CRCPolynomial = 7;       SPI_Init(SPI2, &SPI_InitStructure);/* Enable SPI2  */SPI_Cmd(SPI2, ENABLE);
}  //ADS1256 GPIO
void Init_ADS1256_GPIO(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_ADS1256Reset | RCC_ADS1256DRDY, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_RCC_ADS1256Reset; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIO_RCC_ADS1256Reset_PORT, &GPIO_InitStructure);  GPIO_ResetBits(GPIO_RCC_ADS1256Reset_PORT, GPIO_RCC_ADS1256Reset );GPIO_InitStructure.GPIO_Pin = GPIO_ADS1256DRDY; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIO_ADS1256DRDY_PORT, &GPIO_InitStructure);  SPI2_Init();
}unsigned char SPI_WriteByte(unsigned char TxData)
{unsigned char RxData=0;while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET); //                                                   SPI_I2S_SendData(SPI2,TxData);while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);RxData=SPI_I2S_ReceiveData(SPI2);return RxData;
} void ADS1256WREG(unsigned char regaddr,unsigned char databyte)
{GPIO_ResetBits(GPIOB, GPIO_Pin_12);while(GPIO_ReadInputDataBit(GPIO_ADS1256DRDY_PORT,GPIO_ADS1256DRDY));SPI_WriteByte(ADS1256_CMD_WREG | (regaddr & 0x0F));SPI_WriteByte(0x00);SPI_WriteByte(databyte);GPIO_SetBits(GPIOB, GPIO_Pin_12);
}//ADS1256
void ADS1256_Init(void)
{ADS1256WREG(ADS1256_STATUS,0x06);
//  ADS1256WREG(ADS1256_MUX,0x08);                  ADS1256WREG(ADS1256_ADCON,0x00);               ADS1256WREG(ADS1256_DRATE,ADS1256_DRATE_10SPS);  ADS1256WREG(ADS1256_IO,0x00);
}unsigned int ADS1256ReadData()
{unsigned char i=0;unsigned int sum=0;unsigned int r=0;GPIO_ResetBits(GPIOB, GPIO_Pin_12);;while(GPIO_ReadInputDataBit(GPIO_ADS1256DRDY_PORT,GPIO_ADS1256DRDY));      // ADS1256WREG(ADS1256_MUX,channel);       SPI_WriteByte(ADS1256_CMD_SYNC);SPI_WriteByte(ADS1256_CMD_WAKEUP);                 SPI_WriteByte(ADS1256_CMD_RDATA);sum |= (SPI_WriteByte(0xff) << 16);sum |= (SPI_WriteByte(0xff) << 8);sum |= SPI_WriteByte(0xff);GPIO_SetBits(GPIOB, GPIO_Pin_12); return sum;
}unsigned int ADS_sum(unsigned char channel)
{ADS1256WREG(ADS1256_MUX,channel);      return ADS1256ReadData();
}

2主函数

int main(void)
{
unsigned char i=0;
long ulResult;
long double ldVolutage;
uart_init(9600);
Init_ADS1256_GPIO();
ADS1256_Init();while(1){    for(i = 0;i < 8;i++){//ulResult = ADS_sum( (i << 4) | ADS1256_MUXN_AINCOM);      //8路测量时放开ulResult = ADS_sum( ADS1256_MUXP_AIN0 | ADS1256_MUXN_AINCOM); //单测0路    if( ulResult & 0x800000 ){ulResult = ~(unsigned long)ulResult;ulResult &= 0x7fffff;ulResult += 1;ulResult = -ulResult;}ldVolutage = (long double)ulResult*0.59604644775390625;//  printf("第%d路:",(i & 0x07)?(i & 0x07) - 1:7);printf("第1路");printf("%lf",ldVolutage);   printf("uV\r\n");delay_ms(1000);//printf("%x",(unsigned long)ulResult);//16Delay(0x3fFFF);}}}

3.中值滤波


#define MEDIAN_LEN  5                     //中直滤波的总长度,一般选取奇数
#define MEDIAN      2                     //中值在滤波数组中的位置
unsigned long   AD_buffer[MEDIAN_LEN];    //ad采集数组缓存
//unsigned long   MED_buffer[MEDIAN_LEN];   //中值滤波数组缓存
unsigned char   medleng = 0;          //存入缓存的数据个数
/**********************************************************/
// 函数名:中值滤波函数
// 描述  :提取前9次采集的数据,去掉高3个,去掉低3个,然后中间的
// 描述  :3个数据求平均值,该算法可尽可能的滤掉干扰数据,并不影响采集速度。
// 输入  :9个数据的数组
// 输出  :中间3个数据的平均值
/*********************************************************/
unsigned long medina_filter(unsigned long *MED_buffer)  //xad - ADC转换值
{   unsigned char i,j;unsigned long xd;u32 xxd;for(i = 0; i < MEDIAN_LEN; i ++)     {   for(j = 0; j < MEDIAN_LEN - i; j ++){if( MED_buffer[i] > MED_buffer[i + 1]) // 轮询到的当前元素>AD值,则交换它们的值   { xd = MED_buffer[i]; MED_buffer[i] = MED_buffer[i + 1]; MED_buffer[i + 1] = xd;} }           } xxd = MED_buffer[MEDIAN - 1] + MED_buffer[MEDIAN] + MED_buffer[MEDIAN + 1];xd = xxd/3;return xd; //中值
}

ADS1256驱动程序相关推荐

  1. OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?

    OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)? 图形硬件供应商,需要为显示适配器编,编写用户模式显示驱动程序.用户模式显示驱动程序,是由Microsoft Direct3D运行时加 ...

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

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

  3. 嵌入式Linux设备驱动程序:用户空间中的设备驱动程序

    嵌入式Linux设备驱动程序:用户空间中的设备驱动程序 Embedded Linux device drivers: Device drivers in user space Interfacing ...

  4. 嵌入式Linux设备驱动程序:发现硬件配置

    嵌入式Linux设备驱动程序:发现硬件配置 Embedded Linux device drivers: Discovering the hardware configuration Interfac ...

  5. 嵌入式Linux设备驱动程序:编写内核设备驱动程序

    嵌入式Linux设备驱动程序:编写内核设备驱动程序 Embedded Linux device drivers: Writing a kernel device driver 编写内核设备驱动程序 最 ...

  6. 现代传感器的接口:中断驱动的ADC驱动程序

    现代传感器的接口:中断驱动的ADC驱动程序 Interfacing with modern sensors: Interrupt driven ADC drivers 研究了如何编写一个阻塞的模数转换 ...

  7. 与现代传感器的接口:轮询ADC驱动程序

    与现代传感器的接口:轮询ADC驱动程序 Interfacing with modern sensors: Polled ADC drivers 我们研究了在现代嵌入式应用程序中,开发人员应该如何创建一 ...

  8. java加载驱动没有异常显示_java – Tomcat没有加载MSSQL驱动程序

    我正在尝试将我的webapp部署到Tomcat容器,但是我得到一个例外,说明找不到我的数据库的驱动程序.在本地我测试Jetty上的应用程序,驱动程序jar由Maven提供.我将驱动程序jar复制到To ...

  9. Linux驱动程序编写

    工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微 软垄断的强有力武器,日益受到大家的喜爱.真希望她能在中国迅速成长.把程序文档贴出来, ...

  10. Linux网卡驱动程序编写

    Linux网卡驱动程序编写 [摘自 LinuxAID] 工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微软垄断的强有力武器,日益受到大 ...

最新文章

  1. 面临找工作,要记住给自己的这些话。
  2. 二进制字符串模5的值(有限状态机法)
  3. tensorflow r1.5 版本差异调研
  4. MFC添加背景图片方法
  5. 一个屌丝程序猿的人生(十九)
  6. spring boot mybatis没有扫描jar中的Mapper接口
  7. discuz回贴通知插件实现-配置邮件服务器
  8. Android开发之获取通知栏的内容
  9. java fx 内置图标_图标 – 如何在Windows上为javafx本机程序包图标设置自定义图标...
  10. java -jar 怎么停止_图解Java日志体系
  11. ROS入门-13.服务数据的定义与使用
  12. 浅析Linux设备树dts相关知识
  13. 计算机网络基础学ppt,计算机网络基础学习情景.ppt
  14. 微博java版_新浪微博JAVA通用版
  15. 好用的Android抓包神器 VNET
  16. Linux沙箱技术简介
  17. 论文引用文献并插入编号
  18. 如何破解Word锁定文件的方法
  19. 青年APP大赛陕西省复赛 收获
  20. python基础--绘制棋盘图形

热门文章

  1. JavaScript Lodash 工具库
  2. python掷骰子实验代码_Python Tkinter实例——模拟掷骰子
  3. 权御天下计算机音乐数字乐谱,权御天下-洛天依-和弦谱-《弹吧》官网tan8.com-和弦谱大全,学吉他,秀吉他...
  4. bof - pwnable
  5. C# WPF MVVM 实战 – 2.2
  6. python中forward是什么意思_pytorch 中forward 的用法与解释说明
  7. SDI科普--- SD-SDI/HD-SDI/3G-SDI/12G-SDI
  8. python批量注释快捷键wingide_WingIDE 常用快捷键
  9. 计算机资源管理器出问题怎么办,电脑资源管理器运行异常导致任务栏出现问题...
  10. 洛谷P1600 天天爱跑步