打印

哪位大神用过 MLX90333 ???

[复制链接]
2330|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
曹克强|  楼主 | 2014-6-4 21:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pi, spi, IO, GPIO, gp
MLX90333   郁闷了好几天,数据就是读错(变化太大,无规律),哪位高手用过,给个驱动代码借鉴一下,这是我用stm32f103vet6    的代码:

spi  配置:
void SPI_Configuration(void)
{
        SPI_InitTypeDef         SPI_InitStructure;         //结构体
        GPIO_InitTypeDef           GPIO_InitStructure;        // 管教初始化

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        
        
        /*片选引脚定义*/
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

        SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;          //双向双线全双工
        SPI_InitStructure.SPI_Mode=SPI_Mode_Master;                                                        //        CPU为主模式
        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;                                                                //        内部管理
        SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_8;        // 波特率预分频值为8
        SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;                                         //数据传输从MSB位开始
        SPI_InitStructure.SPI_CRCPolynomial = 7;                                                         //crc校验
        SPI_Init(SPI1,&SPI_InitStructure); //初始化
        SPI_Cmd(SPI1,ENABLE); //使能SPI
}

void SPI_SendByte(u8 byte)          //写字节函数
{         
  u8 i,temp;  
  SPI_MLX90333_L;
  delay_us(10);
  for(i=0; i<8; i++)
  {
    while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);//判断一下发送缓冲区忙不忙
    SPI_I2S_SendData(SPI1,byte);                                                           //发送数据
    //delay_us(45);
    while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);//接收缓冲区非空标志数
    temp = SPI_I2S_ReceiveData(SPI1);       
    Alpha_Beta_Error = temp;   
  }
   delay_us(10);
   SPI_MLX90333_H;
   delay_us(1500);
}
这是读数据的程序。。
每次读出来的都极不稳定。。。。。。
哪位大师会的教教我,万分感谢,纠结了好多天。  邮箱972123558@qq.com

相关帖子

沙发
dirtwillfly| | 2014-6-5 08:18 | 只看该作者
读出的数据变化大,也不一定是程序的问题

使用特权

评论回复
板凳
曹克强|  楼主 | 2014-6-5 16:50 | 只看该作者
读出数据无规律,我怀疑是驱动程序时序可能不对,但是又不知道哪里出了问题,所以高手谁用过的,   借鉴一下。。。。版主大哥,请问用过吗???

使用特权

评论回复
地板
dirtwillfly| | 2014-6-5 20:01 | 只看该作者
曹克强 发表于 2014-6-5 16:50
读出数据无规律,我怀疑是驱动程序时序可能不对,但是又不知道哪里出了问题,所以高手谁用过的,   借鉴一 ...

没用过。时序的话你可以用示波器或者逻辑分析仪观察一下,和datasheet上的时序进行对比

使用特权

评论回复
5
oic| | 2014-6-6 15:35 | 只看该作者
Tab

使用特权

评论回复
6
gxliu08| | 2014-6-6 19:25 | 只看该作者
是不是MSB和LSB搞反了?LSB变化是正常的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

4

帖子

0

粉丝