Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

msp430f5529lp与ADXL345通信不成功

$
0
0

我想用msp430f5529lp读取ADXL345加速度传感器,我用的是SPI方式通信,目前连ADXL345的器件ID都读取失败了,请大神看看我代码有什么问题吗?

ADXL345的驱动是别人已经测试过能用的,自己写的函数就是初始化spi,读寄存器和写寄存器函数。谢谢大神!

/*初始化spi*/

void SpiUsciSet(void) { UCB0CTL1 |= UCSWRST; UCB0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC; / UCB0CTL0 &= ~UCCKPH; UCB0CTL1 |= UCSSEL_2; UCB0BR0 = 0x04; UCB0BR1 = 0; P3SEL |= BIT0 + BIT1 + BIT2; P3DIR |= BIT3; // P3.3 - Slave Select P3OUT |= BIT3; // Slave Select - inactive ( high) UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** }
/*获取寄存器数值*/
unsigned char ADXL345_GetRegisterValue(unsigned char RegisterAddress)
{
    unsigned int read_data;
    unsigned short Address;
    unsigned int a;
    Address=(unsigned short)RegisterAddress;
    Address |= 0x80;

    P3OUT &= ~BIT3;             // 片选STE0置低

      while (!(UCB0IFG & UCTXIFG));  // USART0 TX buffer ready?

      UCB0TXBUF = Address;

      while (!(UCB0IFG & UCRXIFG));  // 等待发送结束       ------->程序停留在此语句,无法继续运行

      

      while (!(UCB0IFG & UCTXIFG));  // USART0 TX buffer ready?

      UCB0TXBUF = 0xFF;

      while (!(UCB0IFG & UCRXIFG));  // 等待发送结束

      read_data = UCB0RXBUF;

      P3OUT |= BIT3;              // 片选STE0置高

    return read_data;
}
/*设置寄存器数值*/
void ADXL345_SetRegisterValue(INT08U RegisterAddress,INT08U RegisterValue)
{
    unsigned int b;
    RegisterAddress &= 0x7f;
    P3OUT &= ~BIT3;             // 片选STE0置低
    while (!(UCB0IFG & UCTXIFG));  // USART0 TX buffer ready?

    UCB0TXBUF = RegisterAddress;

    while (!(UCB0IFG & UCRXIFG));  // 等待发送结束       

              

    while (!(UCB0IFG & UCTXIFG));  // USART0 TX buffer ready?

    UCB0TXBUF = RegisterValue;

    while (!(UCB0IFG & UCRXIFG));  // 等待发送结束

  

    P3OUT |= BIT3;              // 片选STE0置高


}

Viewing all articles
Browse latest Browse all 3634

Trending Articles