ADS131A02驱动调试笔记(stm32f407+spi)
来源:互联网 发布:我赢职场java视频下载 编辑:程序博客网 时间:2024/05/16 14:02
hah 由于实验室研究采集研究心电信号,故开始使用ADS1292,而后考虑使用分立器件自己搭。故采用了这款ADS131A02高精度24bit的adc芯片;
调试中需要注意的点:
1、芯片初始化时,需要初始化M0,M1,M2.这将决定触发方式,数据帧长度,使能hamming code;(Page 5).我使用的是M0=VDD,M1=VDD,M2=GND;即异步中断+32bit数据帧通讯+hamming disable。
2. 时钟配置见下图,采样率为500HZ。基准电压采用内部4.0v。
3、SPI settings are CPOL = 0 and CPHA = 1 ;
4、配置寄存器强烈推荐看datasheet P79的那张图(Initialization Set Up (continued) ),超级详细。一步步来配置就好。
5、此芯片在通用spi的基础上,加上了点芯片自己的协议。芯片使用命令字+数据帧(数据帧长度即为M1设置的)的方式进行通信,需要注意!详细查考此代码和datesheet P49~54
/********************************************************************** Filename : ADS131A02.c** Abstract : This file implements user delay ctrol function.** Device : stm32f4xx** Compiler : keil 5** Target : adc sample** By : yulong <hylong2111@163.com>** Date : 2017-08-31 17:09:39** Changelog:1.首次创建********************************************************************/#include "ADS131A02.h"#include "stm32f4xx_exti.h"#include "stdio.h"#include "exti.h"#include "Show_Scope.h"/**初始化ADS131**/void ADS131A02_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;EXTI_InitTypeDef EXTI_InitStructure; //ADS13 CS脚 GPIO_InitStructure.GPIO_Pin = ADS13_CS; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(ADS13_CS_G, &GPIO_InitStructure); GPIO_SetBits(ADS13_CS_G, ADS13_CS);//CS 高电平,先不选中 //其他公用SPI的器件,将片选拉高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//PG15 //flash_cs GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化 GPIO_SetBits(GPIOG, GPIO_Pin_15);//PG15输出1,防止NRF干扰SPI FLASH的通信 //ADS13 DRDY脚 GPIO_InitStructure.GPIO_Pin = ADS13_DRDY; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100M GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(ADS13_DRDY_G, &GPIO_InitStructure); SPI3_Init(); //初始化SPI SPI3_SetSpeed(SPI_BaudRatePrescaler_256);//设置为42M时钟,高速模式 //DRDY中断接收初始化 EXTIX_Init();}/* write a command to ADS131a02 */u16 ADS13_WRITE_CMD(u16 command){u16 receive=0x0000;ADS13_CS_L;delay_us(10);receive = ADS13_SPI((u8)(command>>8));//发送unlockreceive <<= 8;receive |= ADS13_SPI((u8)(command));ADS13_SPI(0X00);//填满4个字节 ADS13_SPI(0X00);//填满4个字节 ADS13_CS_H;delay_us(10);return receive; //返回接收的数据}/****************************************************************************************** Function Name: ADS13_PowerOnInit* Description : ADS13上电复位* Arguments : NONE* Return Value : NONE******************************************************************************************/int adcenable_flag=0;void ADS13_PowerOnInit(void){u16 RECEIVE=0X0000, i=0, count=0; //接收spi返回的字符ADS13_CS_H;delay_ms(20);ADS13_WRITE_CMD(RESET); //RESET ADS131do{RECEIVE = ADS13_WRITE_CMD(NULL);printf("receive data is : %X...\n", RECEIVE);if(RECEIVE == 0xff02) //ADS131A02 is ready.break loopprintf("ADS131A02 is ready!\n Configuring Registers...\n");delay_ms(5);}while(RECEIVE != 0xff02); //初始化成功则跳出循环ADS13_WRITE_CMD(UNLOCK);//UNLOCK ADS131ADS13_REG(WREG|A_SYS_CFG, 0X78); //enable internal reference volatage (4.0v)ADS13_REG(WREG|CLK1, 0X08); //ADC CLK1 fICLK = fCLKIN(16.384mhz) / 8 ADS13_REG(WREG|CLK2, 0X21); //fMOD = fICLK / 2 fICLK = fCLKIN / 2048 ****** now is 500hz *****0x21ADS13_REG(WREG|ADC_ENA, 0X0F); //ADC CHANNEL ENABLE ALLADS13_WRITE_CMD(WAKEUP);//WAKEUP ADS131adcenable_flag=1; //初始化完毕标志位}/****************************************************************************************** Function Name: ADS13_SPI* Description : 通过SPI总线与ADS131通信* Arguments : com:需写入的数据* Return Value : 返回读取的数据******************************************************************************************/unsigned char ADS13_SPI(unsigned char com){ return(SPI3_ReadWriteByte(com));}/****************************************************************************************** Function Name: ADS13_REG* Description : 对ADS131内部寄存器进行操作 * Arguments : com:读写寄存器地址,data:需写入的数据* Return Value : 返回读取的数据******************************************************************************************/u16 ADS13_REG(unsigned char com, unsigned data){unsigned int i;u16 temp=0X0000;if((com&0x20)==0x20)//判断是否为读寄存器指令 if里面为读{ADS13_WRITE_CMD(com);temp= ADS13_WRITE_CMD(NULL);} else //写寄存器 {;ADS13_CS_L;ADS13_SPI(com); ADS13_SPI(data);ADS13_SPI(0X00); // 补齐0ADS13_SPI(0X00); // delay_us(6);ADS13_CS_H; } for(i=0;i<45;i++); return temp;}
最后采用一次性Ag/AgCl电极,3导联方式采集ECG信号,用匿名上位机绘制波形如下(能看到尖锐的R波,幅值在2V左右,至此驱动调试完成):
阅读全文
0 1
- ADS131A02驱动调试笔记(stm32f407+spi)
- MPU6500驱动调试笔记(STM32F407+SPI)
- STM32F103与STM32F407的SPI调试笔记
- 【stm32f407】SPI实验 驱动W25Q128
- LINUX SPI驱动笔记
- SPI调试笔记
- Linux驱动笔记:SPI驱动
- stm32f407 spi 双机通信
- SPI linux 驱动调试感悟
- Linux SPI驱动之笔记
- 高通 SPI驱动笔记
- Linux中SPI驱动调试总结
- 驱动调试--SPI通信深入解析
- Linux系统SPI驱动学习笔记(一)
- Linux系统SPI驱动学习笔记(二)
- Linux系统SPI驱动学习笔记(一)
- Linux系统SPI驱动学习笔记(二)
- linu spi子系统驱动开发笔记之实例(1)
- Unity调试shader
- springmvc中遇到的问题
- 剑指offer——赋值运算符函数
- 多线程编程学习一(Java多线程的基础)
- java web项目资源位置
- ADS131A02驱动调试笔记(stm32f407+spi)
- Eclipse工程启动错误:ClassNotFoundException-Log4jConfigListener
- hdu 4407 Sum(容斥原理+数论)
- bzoj1984 月下“毛景树”(边权的树链剖分)
- Android LayoutInflater开发中的用法
- 8、js基础:闭包
- 1小时学会MySQL系列:(1)数据库与数据表
- lua基础——基本语法
- SGISTL源码探究-迭代器的类型