TI中文支持网
TI专业的中文技术问题搜集分享网站

msp430f5529lp与ADXL345通信不成功

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


}
灰小子:

你好,观察过通讯的时序吗?和数据手册要求的是否一致?

赞(0)
未经允许不得转载:TI中文支持网 » msp430f5529lp与ADXL345通信不成功
分享到: 更多 (0)