请选择 进入手机版 | 继续访问电脑版
搜索
查看: 272|回复: 1

ltc6803-2问题求助,写配置后Vref引脚无电压,读命令SDO引脚...

[复制链接]

3

主题

6

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2018-8-12 11:57:38 | 显示全部楼层 |阅读模式
ltc6803-2问题求助,写配置后Vref引脚无电压,读命令SDO引脚始终高电平。。。就像是一直在待机模式,但是我已经写配置了啊,电路板检测没错,SPI用示波器看了也正常,MCU用的stm32f103,用的IO口模拟SPI。。问题出在哪,急,求助,多谢大家~~

电路图

电路图


#define MAX7219_DIN_PORT  GPIOB
#define MAX7219_DIN_PIN   GPIO_Pin_15
#define MAX7219_DO_PORT  GPIOB
#define MAX7219_DO_PIN   GPIO_Pin_14
#define ReadDO  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)
#define MAX7219_LOAD_PORT GPIOB
#define MAX7219_LOAD_PIN  GPIO_Pin_12
#define MAX7219_CLK_PORT  GPIOB
#define MAX7219_CLK_PIN   GPIO_Pin_13


uint8_t  DATA_WRBUF,DATA_RDBUF;
unsigned char CFGR[6];

int main(void)
{
         delay_init();
         SPIwo_Init();
         LED_Init();
         while(1)
        {
          Ltc6803Init();
          delay_ms(500);
        }
}


void  Ltc6803Init(void)
{
        uint8_t Err,check[6],CRC_Temp;
        CFGR[0]=0xe1;
        CFGR[1]=0x00;
        CFGR[2]=0x00;
        CFGR[3]=0xf0;
        CFGR[4]=VUV;
        CFGR[5]=VOV;
        GPIO_ResetBits(MAX7219_LOAD_PORT, MAX7219_LOAD_PIN);
        delay_us(2);
        SpiWrite_wo(WRCFG);
        delay_us(2);
        SpiWrite_wo(WRCFG_CRC);
        delay_us(2);
        for(Err=0;Err<6;Err++)
        {
                SpiWrite_wo(CFGR[Err]);
                delay_us(2);
        }
        CRC_Temp=CRC8(CFGR,6);  
           SpiWrite_wo(CRC_Temp);
        delay_us(2);
        GPIO_SetBits(MAX7219_LOAD_PORT, MAX7219_LOAD_PIN);

        delay_us(500);
        GPIO_ResetBits(MAX7219_LOAD_PORT, MAX7219_LOAD_PIN);
        delay_us(2);
        SpiWrite_wo(RDCFG);
        delay_us(2);
        SpiWrite_wo(RDCFG_CRC);
        delay_us(2);
        for(Err=0;Err<6;Err++)       
        {
                check[Err]=SpiRead_wo();
                delay_us(2);
        }
    GPIO_SetBits(MAX7219_LOAD_PORT, MAX7219_LOAD_PIN);
}


void SpiWrite_wo(unsigned char  byte)
{
        uint8_t i;       
        DATA_WRBUF=byte;                                // Put function's parameter into a bdata variable       
        for (i=0;i<8;i++)                                // Setup byte circulation bits
        {       
                GPIO_ResetBits(MAX7219_CLK_PORT, MAX7219_CLK_PIN);
                if((DATA_WRBUF&0x80) == 0x80)
                {
                        GPIO_SetBits(MAX7219_DIN_PORT, MAX7219_DIN_PIN);
                }   
                else
                {
                        GPIO_ResetBits(MAX7219_DIN_PORT, MAX7219_DIN_PIN);
                }  
                delay_us(2);
                GPIO_SetBits(MAX7219_CLK_PORT, MAX7219_CLK_PIN);
                DATA_WRBUF<<=1;        // Shift DATA_BUF
                delay_us(2);
        }       
}


unsigned char SpiRead_wo(void)
{
        uint8_t i;       
        DATA_RDBUF=0;
        for (i=0;i<8;i++)                        // Setup byte circulation bits
        {       
                GPIO_ResetBits(MAX7219_CLK_PORT, MAX7219_CLK_PIN);
                delay_us(2);
                DATA_RDBUF=DATA_RDBUF<<1;        // Right shift DATA_BUF
                GPIO_SetBits(MAX7219_CLK_PORT, MAX7219_CLK_PIN);
                if (ReadDO==1)
                        DATA_RDBUF|=0x01;                        // Read data
                delay_us(2);                                       
        }
        return DATA_RDBUF;                        // Return function parameter
}


void SPIwo_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = MAX7219_DIN_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(MAX7219_DIN_PORT, &GPIO_InitStructure);
        GPIO_SetBits(MAX7219_DIN_PORT, MAX7219_DIN_PIN);
       
        GPIO_InitStructure.GPIO_Pin = MAX7219_LOAD_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(MAX7219_LOAD_PORT, &GPIO_InitStructure);
        GPIO_SetBits(MAX7219_LOAD_PORT, MAX7219_LOAD_PIN);

        GPIO_InitStructure.GPIO_Pin = MAX7219_CLK_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(MAX7219_CLK_PORT, &GPIO_InitStructure);
        GPIO_SetBits(MAX7219_CLK_PORT, MAX7219_CLK_PIN);
       
        GPIO_InitStructure.GPIO_Pin  = MAX7219_DO_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
}


uint8_t CRC8(uint8_t *buf, int8_t len)   
{   
  uint16_t   i,j=0;   
  uint8_t  crc = 0x41;   

  while(len--!=0)  
        {   
    for(i= 0x80;i!=0;i/=2)  
                {   
      if ((crc & 0x80)!=0)  
                        {   
        crc *= 2;   
        crc ^= 0x07;   
      }  
                        else  crc *= 2;      
      if ((*(buf+j) & i)!=0)   
        crc^=0x07;   
    }   
    j++;
  }   
  return   crc;   
}



回复

使用道具 举报

3

主题

6

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2018-8-12 11:59:09 | 显示全部楼层
试了各种办法,但都是不行,很疑惑
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|ADI技术社区

GMT+8, 2019-9-23 07:29 , Processed in 0.089586 second(s), 10 queries , MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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