OpenEdv-开源电子网

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

求助,精英板SPI连接个芯片,没法成功通讯

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2020-2-12
在线时间
5 小时
发表于 2020-3-7 23:17:13 | 显示全部楼层 |阅读模式
3金钱
想做一个BMS,连接的是LTC6804,用的SPI1,以下是通讯有关的代码,请大手看看有没有问题,没有的话可能就是硬件问题
最近困在家,示波器不在手边但是从现象可以肯定从机没成功接收,调试的时候主机发出之前数据是没问题的,读回来的全部是FF
6804最大通信速率1M/s,CPOL=1,CPHA=1,MSB在前
MISO是浮动输入,外面接了5K上拉电阻到3.3v
新手多谢各位
以下是SPI.c,基本是按例程改的
void SPI1_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
  SPI_InitTypeDef  SPI_InitStructure;

        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOA, ENABLE );
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_SPI1,  ENABLE );       
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5  | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_SetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7);

        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_High;               
        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(SPI1, &SPI_InitStructure);

        SPI_Cmd(SPI1, ENABLE);
       
  SPI1_ReadWriteByte(0xff);

}  


u8 SPI1_ReadWriteByte(u8 TxData)
{               
        u8 retry=0;                                        
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET)
                {
                retry++;
                if(retry>200)return 0;
                }                          
        SPI_I2S_SendData(SPI1, TxData);
        retry=0;

        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)
                {
                retry++;
                if(retry>200)return 0;
                }                                                              
        return SPI_I2S_ReceiveData(SPI1);                                     
}


以下是LTC6804.c的两个通讯函数,官方用的是ARDUINO,我把SPI通讯函数换了

void spi_write_array(uint8_t len, // Option: Number of bytes to be written on the SPI port
                                         uint8_t data[] //Array of bytes to be written on the SPI port
                                         )
{
        uint8_t i;
  for(i = 0; i < len; i++)
  {
     SPI1_ReadWriteByte((int8_t)data[i]);
  }
}


void spi_write_read(uint8_t tx_Data[],//array of data to be written on SPI port
                                        uint8_t tx_len, //length of the tx data arry
                                        uint8_t *rx_data,//Input: array that will store the data read by the SPI port
                                        uint8_t rx_len //Option: number of bytes to be read from the SPI port
                                        )
{ uint8_t i;
  for(i = 0; i < tx_len; i++)
  {
   SPI1_ReadWriteByte(tx_Data[i]);

  }
  for(i = 0; i < rx_len; i++)
  {
    rx_data[i] = (uint8_t)SPI1_ReadWriteByte(0xff);
  }

}


片选在其他函数里,而且万用表测过有拉低的。
还望大神检查另外有人用过这个芯片吗?可以交流一下

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-21 20:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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