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