OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12094|回复: 24

stm32与ads1247 spi通讯

[复制链接]

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2013-6-25
在线时间
18 小时
发表于 2013-6-27 09:33:33 | 显示全部楼层 |阅读模式

我尝试过模拟方式,可以采样,但是工作不久基准电压就消失了。不知道是否是芯片损坏。其次我尝试用硬件SPI方式通讯,但是始终无法通讯,程序内容如下(部分常见配置省略),请各位大神指点,如果需要完整程序,请留言谢谢:
#include "stm32f10x_lib.h"

#include <stdio.h>


/******************ads1247引脚设置*******************/
#define CS_0         GPIO_ResetBits(GPIOB, GPIO_Pin_12)
#define CS_1         GPIO_SetBits(GPIOB, GPIO_Pin_12)

#define START_1      GPIO_SetBits(GPIOB, GPIO_Pin_10)
#define START_0      GPIO_ResetBits(GPIOB, GPIO_Pin_10)

#define DRDY         GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)

void RCC_init(void);
void GPIO_init(void);
void USART_init(void);
void M3SPI_init(void);
void ADS1247_init(void);
void delay_ms(u16 time_cn);
u32 ADS1247_Read();
char WaitBusy();

void SPI2_WriteReg(char RegAddr,char *Buffer,char Length);
void SPI2_ReadReg(char RegAddr,char *Buffer,char Length);
void SPI2_ReadBytes(char *RxBuffer,char RxLenth);
void SPI2_WriteBytes(char *TxBuffer,char TxLenth);
void ADS1247_WriteCmd(char Cmd);

#define uint8 unsigned char 8;
#define uint16 unsigned char 16;

u32 D;
#define buffersize 529   //缓冲区大小,目前只用到4个字节
vu8 SPI2_RX_Buff[buffersize] = { 0 };    //接收缓冲区初始化
vu8 SPI2_TX_Buff[buffersize] = { 0 };  //发送缓冲区初始化
void main()
{
 RCC_init();/* 设置系统时钟 */ 
 GPIO_init();
 USART_init();
 
 START_1;
 
 M3SPI_init();
  ADS1247_init();

 while(1)
 {
  D=ADS1247_Read(); 
  printf("  %d\r\n",D);
  START_0;
  delay_ms(500);
  START_1;
 }
}


void M3SPI_init(void)

 SPI2->CR1 |= 0<<10 ;            //全双工模式 
 
 SPI2->CR1 |= 0<<9  ;            //硬件nss管理
 SPI2->CR2 |= 1<<2  ;            //SS输出使能
  CS_0;

 SPI2->CR1 |= 1<<2  ;            //SPI主机
 SPI2->CR1 |= 0<<11 ;            //数据格式:8bit 
 SPI2->CR1 |= 1<<1  ;            //CPOL=1:空闲模式下SCK为高电平
 SPI2->CR1 |= 1<<0  ;            //CPHA=1:数据采样从第二个时间边沿开始
 SPI2->CR1 |= 2<<3  ;            //Fsck=Fcpu/8
 SPI2->CR1 |= 0<<7  ;            //MSBfirst
 
 //SPI2->CR2 |= 1<<1  ;         //发送缓冲区DMA使能
 //SPI2->CR2 |= 1<<0  ;         //接收缓冲区DMA使能
 
 SPI2->CR1 |= 1<<6  ;            //SPI设备使能
}

void ADS1247_init(void)

    delay_ms(100);
  char cmd;
    ADS1247_WriteCmd(ADC_CMD_RESET);
   delay_ms(10);
  
  cmd=0x13;
  SPI2_WriteReg(ADS1248_REG_MUX0,&cmd,1);
    char WaitBusy();
  
 /*cmd=0;
  SPI2_WriteReg(ADS1248_REG_VBIAS,&cmd,1);
    char WaitBusy();
   delay_ms(10);*/
  
  cmd=0x30;
  SPI2_WriteReg(ADS1248_REG_MUX1,&cmd,1);
  char WaitBusy();
    delay_ms(10);
                                                    
  /* cmd=0xff;
    SPI2_WriteReg(ADS1248_REG_IDAC1,&cmd,1);
  char WaitBusy();
   delay_ms(10);*/
  
  /*cmd=0x00;
    SPI2_WriteReg(ADS1248_REG_IDAC0,&cmd,1);
    char WaitBusy();
   delay_ms(10);*/  //默认设置
  
  cmd=0x02;    //0000 0010  增益1倍  20SPS
    SPI2_WriteReg(ADS1248_REG_SYS0,&cmd,1);
   char WaitBusy();
  delay_ms(10);
  
}

 

void SPI2_ReadReg(char RegAddr,char *Buffer,char Length)
{
    char Cmd[2];
    CS_0;
    Cmd[0]=ADC_CMD_RREG|RegAddr;
    Cmd[1]=Length-1;
    SPI2_WriteBytes(Cmd,2);
    SPI2_ReadBytes(Buffer,Length);
    Cmd[0]=ADC_CMD_NOP;
    SPI2_WriteBytes(Cmd,1);
    CS_1;
}
void SPI2_WriteReg(char RegAddr,char *Buffer,char Length)
{
    char Cmd[2];
    CS_0;
    Cmd[0]=ADC_CMD_WREG|RegAddr;
    Cmd[1]=Length-1;
    SPI2_WriteBytes(Cmd,2);
    SPI2_WriteBytes(Buffer,Length);
    CS_1;
}

void SPI2_WriteBytes(char *TxBuffer,char TxLenth)
{
    char i;
    while(TxLenth--)
  {
        while(( SPI2->SR & SPI_SR_TXE )==0);
        SPI2->DR=*TxBuffer++;
        while(( SPI2->SR & SPI_SR_RXNE)==0);
        i=SPI2->DR;
    }
    i++;
}

void SPI2_ReadBytes(char *RxBuffer,char RxLenth)
{
    while(RxLenth--)
  {
        while(( SPI2->SR & SPI_SR_TXE)==0);
        SPI2->DR=*RxBuffer;
        while(( SPI2->SR & SPI_SR_RXNE)==0);
        *RxBuffer++=SPI2->DR;
    }
}
void ADS1247_WriteCmd(char Cmd)
{
    CS_0;
    SPI2_WriteBytes(&Cmd,1);
    CS_1;
}

u32 ADS1247_Read()
{
    char  Cmd[5];
    Cmd[0]=ADC_CMD_RDATA;
  Cmd[1]=ADC_CMD_NOP;
    Cmd[2]=ADC_CMD_NOP;
    Cmd[3]=ADC_CMD_NOP;
    Cmd[4]=ADC_CMD_NOP;
    CS_0;
   SPI2_ReadBytes(Cmd,5);
    CS_1;
    Cmd[0]= (Cmd[1]&0x80)!=0 ? 0xFF:0x00;
   D=Cmd[0]<<24 || Cmd[1]<<16 || Cmd[2]<<8 ||Cmd[3];
    return D;
}

void  delay_ms(u16 time_cn)
{
 u32 temp = time_cn*10000;
 while(temp--); 
}

int fputc(int ch, FILE *f)
{
/* 将Printf内容发往串口 */
  USART_SendData(USART1, (unsigned char) ch);
//  while (!(USART1->SR & USART_FLAG_TXE));
 while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
  return (ch);
}

char WaitBusy()
{
    char i;
    i=0;
    while(DRDY>0)
  {
    delay_ms(10);
    i++;
    if(i>21)return 1;
    }
    return 0;
}

 
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA |
                   RCC_APB2Periph_GPIOB, ENABLE);
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
 /* 打开 GPIOA,GPIOB,USART1 时钟 */
}

void GPIO_init(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;

  /* 设置引脚 START*/
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_12;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 
 
 /* 设置 SPI2 引脚: SCK, MISO 和 MOSI,NSS */
 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;
 //GPIOB->ODR |= 7<<13;            //PB13,14,15上拉
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 
 
 /* 设置SPI2引脚 DRDY*/
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
 
 /*GPIOA9、10为串口配置端口*/
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
}


 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2013-6-27 09:58:53 | 显示全部楼层
你看好对应的时序,你可以一步步调,初始化完成一个标志位,然后读写命令,数据一个标志位。一步步调。
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2013-6-25
在线时间
18 小时
 楼主| 发表于 2013-6-27 10:04:23 | 显示全部楼层
回复【2楼】ST-FAE-SALE:
---------------------------------
现在的问题是标志位从不置位,我大概讲一下这个通讯,ads1247的spi端口与stm32联通,一共有6个数据端口,sclk、mosi、miso、drdy、cd、start。是否只需配置stm32 的spi就可以实现通讯。
回复 支持 反对

使用道具 举报

14

主题

164

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1860
金钱
1860
注册时间
2012-5-19
在线时间
286 小时
发表于 2013-6-27 10:08:32 | 显示全部楼层
回复【楼主位】WZZ强悍:
---------------------------------
http://www.amobbs.com/thread-5530199-1-1.html
LZ看看这个帖子
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2013-6-25
在线时间
18 小时
 楼主| 发表于 2013-7-2 22:23:29 | 显示全部楼层
回复【4楼】zhcj66:
---------------------------------
最近一直没顾得上回复你,我现在主要的问题是芯片本身,谢谢你的回复。
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2013-6-25
在线时间
18 小时
 楼主| 发表于 2013-7-4 21:40:50 | 显示全部楼层
回复【5楼】WZZ强悍:
---------------------------------
版主,我的硬件SPI始终无法调通,就是始终标志位无法置位啊。
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2013-6-25
在线时间
18 小时
 楼主| 发表于 2013-7-4 21:43:16 | 显示全部楼层
回复【6楼】WZZ强悍:
---------------------------------
要么,我只把配置部分发给你?我的硬件连接图和原子哥使用指南中的一样,四根口线均和复用端口相对应。
void M3SPI_init(void)
{
SPI2->CR1 = 0x0000 ;          //SPI1->CR1复位
SPI2->CR1 |= 0<<10 ;            //全双工模式

SPI2->CR1 |= 1<<9  ;            //软件nss管理
  SPI2->CR1 |= 1<<8  ;            //SSI管理,高电平

SPI2->CR1 |= 1<<2  ;            //SPI主机
SPI2->CR1 |= 0<<11 ;            //数据格式:8bit
SPI2->CR1 |= 1<<1  ;            //CPOL=1:空闲模式下SCK为高电平
SPI2->CR1 |= 1<<0  ;            //CPHA=1:数据采样从第二个时间边沿开始
SPI2->CR1 |= 2<<3  ;            //Fsck=Fcpu/8
SPI2->CR1 |= 0<<7  ;            //MSBfirst

//SPI2->CR2 |= 1<<1  ;         //发送缓冲区DMA使能
//SPI2->CR2 |= 1<<0  ;         //接收缓冲区DMA使能

SPI2->CR1 |= 1<<6  ;            //SPI设备使能
}

void ADS1247_init(void)
{
    delay_ms(100);
char cmd;
    ADS1247_WriteCmd(ADC_CMD_RESET);
   delay_ms(10);

cmd=0x13;
SPI2_WriteReg(ADS1248_REG_MUX0,&cmd,1);
    char WaitBusy();  // AIN2+   AIN3-

/*cmd=0x01;
SPI2_WriteReg(ADS1248_REG_MUX0,&cmd,1);
    char WaitBusy();  // AIN0+   AIN1-
delay_ms(10);*/

/*cmd=0;
SPI2_WriteReg(ADS1248_REG_VBIAS,&cmd,1);
    char WaitBusy();
  delay_ms(10);*/  //默认设置

cmd=0x30;
SPI2_WriteReg(ADS1248_REG_MUX1,&cmd,1);
char WaitBusy();
    delay_ms(10);
                                                   
 /* cmd=0xff;
    SPI2_WriteReg(ADS1248_REG_IDAC1,&cmd,1);
char WaitBusy();
  delay_ms(10);*/  //默认设置

/*cmd=0x00;
    SPI2_WriteReg(ADS1248_REG_IDAC0,&cmd,1);
    char WaitBusy();
  delay_ms(10);*/  //默认设置

cmd=0x02;    //0000 0010  增益1倍  20SPS
    SPI2_WriteReg(ADS1248_REG_SYS0,&cmd,1);
  char WaitBusy();
delay_ms(10);

cmd=0xff;
SPI2_WriteBytes(&cmd,1); //开始
}

void SPI2_WriteBytes(char *TxBuffer,char TxLenth)
{
    char i;
    while(TxLenth--)
{
        while(( SPI2->SR & SPI_SR_TXE )==0);
        SPI2->DR=*TxBuffer++;
        while(( SPI2->SR & SPI_SR_RXNE)==0);
        i=SPI2->DR;
    }
    i++;
}

void SPI2_ReadBytes(char *RxBuffer,char RxLenth)
{
    while(RxLenth--)
{
        while(( SPI2->SR & SPI_SR_TXE)==0);
        SPI2->DR=*RxBuffer;
        while(( SPI2->SR & SPI_SR_RXNE)==0);
        *RxBuffer++=SPI2->DR;
    }
回复 支持 反对

使用道具 举报

14

主题

164

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1860
金钱
1860
注册时间
2012-5-19
在线时间
286 小时
发表于 2013-7-9 16:10:55 | 显示全部楼层
回复【7楼】WZZ强悍:
---------------------------------
你用逻辑分析仪看看你的时序对吗
回复 支持 反对

使用道具 举报

14

主题

164

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1860
金钱
1860
注册时间
2012-5-19
在线时间
286 小时
发表于 2013-7-9 16:15:55 | 显示全部楼层
那就用模拟的
还有 如果用硬件SPI的时候注意一下 是在什么脉冲情况下发送数据
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2013-6-25
在线时间
18 小时
 楼主| 发表于 2013-7-18 15:19:21 | 显示全部楼层
回复【9楼】zhcj66:
---------------------------------
我的硬件SPI弄好了,应该是时序的问题。AD与M3的时序不对应,就是你说的那个问题
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2013-8-31
在线时间
0 小时
发表于 2013-8-31 09:29:00 | 显示全部楼层
回复【楼主位】WZZ强悍:
---------------------------------
大神,求份源程序,邮箱是624591992@qq.com
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2013-6-25
在线时间
18 小时
 楼主| 发表于 2013-9-12 10:27:06 | 显示全部楼层
回复【11楼】xuxiarong:
---------------------------------
#include "init.h"
#include "stm32f10x_lib.h"


//   ****SPI2引脚定义和配置
void SPI2_Init(void)
{
SPI_InitTypeDef SPI_InitStructure;

GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//管脚复用功能使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE );

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;           /* 设置SPI2引脚 DRDY*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_12;/* 设置引脚 START和CS*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_10 | GPIO_Pin_12);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15 |GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;     //PB13/14/15 复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_15 |GPIO_Pin_14);

SPI_Cmd(SPI2, DISABLE);
    SPI_I2S_DeInit(SPI2);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //设置 SPI 全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;          //设置 SPI 工作模式:设置为主 SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;         // 8 位帧结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;            //选择了串行时钟的稳态:时钟悬空低

SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;            //数据捕获于第二个时钟沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSS 信号由软件管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //预分频 256
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;         //数据传输从 MSB 位开始
SPI_InitStructure.SPI_CRCPolynomial = 7;                   //CRC 值计算的多项式
SPI_Init(SPI2, &SPI_InitStructure); //            根据指定的参数初始化外设 SPIx 寄存器

SPI_Cmd(SPI2, ENABLE); //③使能 SPI 外设
}

//SPIx 读写一个字节
char SPI2_ReadWriteByte(char *TxData)
{
u32 retry=0;
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //等待发送区空
{
retry++;
if(retry>2000)return 0;
}
SPI_I2S_SendData(SPI2, *TxData); //通过外设 SPIx 发送一个数据
retry=0;
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //等待接收完一个 byte
{ retry++;
if(retry>2000)return 0;
}
return SPI_I2S_ReceiveData(SPI2); //返回通过 SPIx 最近接收的数据
}

//   spi写指令
void spi_write_bytes(char *txBuf, char length)
{
    while(length--)
{
        SPI2_ReadWriteByte(&*txBuf++);
    }
}

//   spi读指令
void spi_read_bytes(char *rxBuf, char length)
{
while(length--)
{
  *rxBuf++ = SPI2_ReadWriteByte( 0x00 );
}
}


void SPI2_ReadReg(char RegAddr,char *Buffer,char Length)   //读寄存器
{
    char Cmd[2];
  //  CS_0;
    Cmd[0]=ADC_CMD_RREG|RegAddr;
    Cmd[1]=Length-1;
    spi_read_bytes(Cmd,2);
    spi_read_bytes(Buffer,Length);
    Cmd[0]=ADC_CMD_NOP;
    spi_read_bytes(Cmd,1);
  //  CS_1;
}
void SPI2_WriteReg(char RegAddr,char *Buffer,char Length)  //写寄存器
{
    char Cmd[2];
   // CS_0;
    Cmd[0]=ADC_CMD_WREG|RegAddr;
    Cmd[1]=Length-1;
    spi_write_bytes(Cmd,2);
    spi_write_bytes(Buffer,Length);
   // CS_1;
}


// 1247复位和寄存器配置
void ADS1247_init(void)
{
  delay_ms(100);
START_1;
delay_ms(20);

char cmd;
cmd=ADC_CMD_RESET;    //芯片复位
    SPI2_ReadWriteByte(&cmd);
   delay_ms(20);

cmd=0x13;
SPI2_WriteReg(ADS1248_REG_MUX0,&cmd,1);// AIN2+   AIN3- */

/*cmd=0x01;
SPI2_WriteReg(ADS1248_REG_MUX0,&cmd,1);// AIN0+   AIN1-*/

cmd=0x00;
SPI2_WriteReg(ADS1248_REG_VBIAS,&cmd,1);//默认设置
    //char WaitBusy();
  delay_ms(20);

cmd=0x30;
SPI2_WriteReg(ADS1248_REG_MUX1,&cmd,1);

cmd=0x02;    //0101 0001  增益32倍  20SPS
    SPI2_WriteReg(ADS1248_REG_SYS0,&cmd,1);

  cmd=0x00;
    SPI2_WriteReg(ADS1248_REG_IDAC0,&cmd,1);//默认设置

    cmd=0xff;
    SPI2_WriteReg(ADS1248_REG_IDAC1,&cmd,1);//默认设置

//cmd=0xff;
//SPI2_ReadWriteByte(&cmd,1);
}

//  1247采样取数
u32 ADS1247_Read()
{
    char  Cmd[5];
    Cmd[0]=ADC_CMD_RDATA;
Cmd[1]=ADC_CMD_NOP;
    Cmd[2]=ADC_CMD_NOP;
    Cmd[3]=ADC_CMD_NOP;
    Cmd[4]=ADC_CMD_NOP;

spi_read_bytes(Cmd,5);

D=Cmd[0]*0x10000+Cmd[1]*0x100+Cmd[2];
//D>>=6;
//D=D & 0XFFFF00;
if(k3>50)
{
k3=0;
}

D3[k3]=D;
k3++;
    return D;
}
回复 支持 反对

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-10-16
在线时间
0 小时
发表于 2013-11-27 18:17:06 | 显示全部楼层
回复【12楼】WZZ强悍:
---------------------------------
版主,能否分享下的硬件电路设计部分?
回复 支持 反对

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-10-16
在线时间
0 小时
发表于 2013-11-27 18:19:32 | 显示全部楼层
回复【12楼】WZZ强悍:
---------------------------------
楼主,能否分享下的硬件电路设计部分?
回复 支持 反对

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-9-12
在线时间
0 小时
发表于 2014-9-23 16:59:49 | 显示全部楼层
求楼主把程序分享下,我最近在弄ADS1247,指令写不进去,读出来全是0
回复 支持 反对

使用道具 举报

19

主题

90

帖子

1

精华

高级会员

Rank: 4

积分
543
金钱
543
注册时间
2012-5-13
在线时间
40 小时
发表于 2014-9-23 21:33:58 | 显示全部楼层
回复【5楼】WZZ强悍:
---------------------------------
  楼主能否发一份程序参考一下。我在TI申请三片ADS1220也是SPI接口的。调试出来一次。后来误删了,对着时序图一直没发现那里错了。这个跟ADS1247一样都是在热电阻和热电偶应用。谢谢您。我的邮箱372542262@qq.com
回复 支持 反对

使用道具 举报

27

主题

259

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2014-8-19
在线时间
0 小时
发表于 2014-10-4 21:51:22 | 显示全部楼层
回复【16楼】蓝色天使211:
---------------------------------
这片每秒才2K你也能用??
回复 支持 反对

使用道具 举报

27

主题

259

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2014-8-19
在线时间
0 小时
发表于 2014-10-4 21:52:09 | 显示全部楼层
回复【15楼】723263134:
---------------------------------
这片每秒才2K你也能用??
回复 支持 反对

使用道具 举报

27

主题

259

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2014-8-19
在线时间
0 小时
发表于 2014-10-4 21:53:04 | 显示全部楼层
回复【15楼】723263134:
---------------------------------
这片每秒才2K你也能用??
回复 支持 反对

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-9-12
在线时间
0 小时
发表于 2014-10-8 10:16:46 | 显示全部楼层
回复【19楼】dongbaohui:
---------------------------------
你的每秒2K不能用?
回复 支持 反对

使用道具 举报

27

主题

259

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2014-8-19
在线时间
0 小时
发表于 2014-10-8 10:18:47 | 显示全部楼层
回复【20楼】723263134:
---------------------------------
至少50K
回复 支持 反对

使用道具 举报

19

主题

90

帖子

1

精华

高级会员

Rank: 4

积分
543
金钱
543
注册时间
2012-5-13
在线时间
40 小时
发表于 2014-10-14 10:41:16 | 显示全部楼层
回复【21楼】dongbaohui:
---------------------------------
    我们做的是温度采集和压力采集用的,这些信号变化很慢。输出的精度要求高。对速度要求么有那么苛刻。
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2013-6-25
在线时间
18 小时
 楼主| 发表于 2014-12-17 10:39:04 | 显示全部楼层
http://blog.csdn.net/wangsanhuai2010/article/details/8846269
我当时是参考这个帖子改出来的。其实搞清楚主从配置就好了。ADS1247是从设备,你用的单片机是主设备,单片机SPI配置正确,关键是SPI的时序要和从器件的时序所对应。看ADS1247的时序图是关键,看懂时序图就很简单了。
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2013-6-25
在线时间
18 小时
 楼主| 发表于 2014-12-31 09:14:46 | 显示全部楼层
上面的同学非常不好意思,经常不来了,上次看到大家问我要代码和硬件原理图。原理图我没有,代码我今天翻电脑的时候才找到,已经很久不碰这个了。但是stm32的spi应该没什么大问题,不像iic很容易调试不出来。大家可以下载附件看看

STM32-ADS1247.zip

3.56 KB, 下载次数: 3116

回复 支持 反对

使用道具 举报

0

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2015-3-30
在线时间
17 小时
发表于 2015-5-12 16:37:04 | 显示全部楼层
回复【15楼】723263134:
---------------------------------
你用示波器量一下MISO,如果没有数据,说明你还没连接上。因为MOSI和MISO是成对出现的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 13:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表