我想用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置高
}