OpenEdv-开源电子网

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

SPI读MPU6000读不到,急急急

[复制链接]

19

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2015-3-5
在线时间
44 小时
发表于 2016-1-15 20:17:58 | 显示全部楼层 |阅读模式
10金钱
[img]file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\286647259\QQ\WinTemp\RichOle\O8J2YAFA1]V{`$C[@_OOE%0.png[/img]原理图见附件。
首先是SPI初始化,代码如下:
void initSpi1(void)
{
    // Specific to the STM32F405
    // SPI1 Driver
    // PA4    14    SPI1_NSS
    // PA5    15    SPI1_SCK
    // PA6    16    SPI1_MISO
    // PA7    17    SPI1_MOSI

    SPI_InitTypeDef spi;
        GPIO_InitTypeDef GPIO_InitStructure;

    // Enable SPI1 clock
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//ê1ÄüGPIOAê±Öó
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
                        
        GPIO_PinAFConfig(SPI1_GPIO,SPI1_SCK_PIN,GPIO_AF_SPI1);
        GPIO_PinAFConfig(SPI1_GPIO,SPI1_MISO_PIN,GPIO_AF_SPI1);
        GPIO_PinAFConfig(SPI1_GPIO,SPI1_MOSI_PIN,GPIO_AF_SPI1);
//        GPIO_PinAFConfig(SPI1_GPIO,SPI1_NSS_PIN,GPIO_AF_SPI1);
       
    // Init pins
    GPIO_InitStructure.GPIO_Pin = SPI1_SCK_PIN | SPI1_MISO_PIN | SPI1_MOSI_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                               
    GPIO_Init(SPI1_GPIO, &GPIO_InitStructure);       


#ifdef SPI1_NSS_PIN
    GPIO_InitStructure.GPIO_Pin = SPI1_NSS_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

    GPIO_Init(SPI1_GPIO, &GPIO_InitStructure);
        GPIO_SetBits(SPI1_GPIO,SPI1_NSS_PIN);
#endif

    // Init SPI hardware
    SPI_I2S_DeInit(SPI1);

    spi.SPI_Mode = SPI_Mode_Master;
    spi.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    spi.SPI_DataSize = SPI_DataSize_8b;
    spi.SPI_NSS = SPI_NSS_Soft;
    spi.SPI_FirstBit = SPI_FirstBit_MSB;
    spi.SPI_CRCPolynomial = 7;
    spi.SPI_CPOL = SPI_CPOL_High;
    spi.SPI_CPHA = SPI_CPHA_2Edge;
    spi.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;

    SPI_Init(SPI1, &spi);
    SPI_Cmd(SPI1, ENABLE);
}


初始化完成之后可以看到SPI1的时钟已一打开,寄存器的值也没问题。

然后是MPU6000的初始化:
void mpu6000_Init(void)
{
       
        if (mpuSpi6000InitDone) return;
       
        initSpi1();    // 3õê¼»ˉSPI1      
delay_ms(150);                                              
        spiSetDivisor(MPU6000_SPI_INSTANCE,SPI_656_KHZ_CLOCK_DIVIDER);   //MPU6000Ô¤·ÖÆμ
       
        delay_ms(150);
       
        // MPU6000 Reset
    mpu6000WriteRegister(MPU_RA_PWR_MGMT_1, BIT_H_RESET);
        delay_ms(150);
       
        mpu6000WriteRegister(MPU_RA_SIGNAL_PATH_RESET, BIT_GYRO | BIT_ACC | BIT_TEMP);
    delay_ms(150);

}
最后是MPU6000写寄存器的代码
bool mpu6000WriteRegister(uint8_t reg, uint8_t data)
{

        ENABLE_MPU6000;
    spiTransferByte(MPU6000_SPI_INSTANCE, reg);
    spiTransferByte(MPU6000_SPI_INSTANCE, data);
    DISABLE_MPU6000;

    return true;
}



STM32F405读MPU6000

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

使用道具 举报

19

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2015-3-5
在线时间
44 小时
 楼主| 发表于 2016-1-15 20:20:15 | 显示全部楼层
写寄存器的时候可以写,但是收不到任何数据,而且写数据的时候DR寄存器一直为零。
最要命的时,SCK的时钟线根本没有动。。。没有时钟啊啊啊啊 ,哪位大神可以帮忙呀,谢谢了!!!
回复

使用道具 举报

19

主题

217

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
金钱
427
注册时间
2015-4-1
在线时间
34 小时
发表于 2016-1-16 14:17:10 | 显示全部楼层
MPU6050是通过I2C传送数据的
一直在路上,一直在成长。
回复

使用道具 举报

19

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2015-3-5
在线时间
44 小时
 楼主| 发表于 2016-1-16 22:43:11 | 显示全部楼层
我是MPU6000
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 23:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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