This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR2311:具有 MSP430FR2311 uC 的 ADXL345传感器接口

Guru**** 2387830 points
Other Parts Discussed in Thread: MSP430FR2311
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/601112/msp430fr2311-adxl345-sensor-interface-with-msp430fr2311-uc

器件型号:MSP430FR2311

借助 I2C 协议、我有一个与 MSP430FR2311连接的 ADXL345接口。 以下代码正常工作、没有错误。 但是、我从传感器接收的数据是原始数据。 当我倾斜该传感器时、来自该传感器的数据保持不变。  

每次接收 RX 缓冲区中的数据时:

RX_Data[0]= 0x22;

RX_Data[1]= 0x22;

RX_Data[2]= 0x00;

RX_Data[3]= 0x00;

RX_Data[4]= 0x00;

RX_Data[5]= 0x00;

在下一个周期中:

RX_Data[0]= 0x00;

RX_Data[1]= 0xFE;

RX_Data[2]= 0x00;

RX_Data[3]= 0xFE;

RX_Data[4]= 0x00;

RX_Data[5]= 0x00;

上述序列连续重复。  

请检查我的代码是否正确 、或者是否需要进行任何修改才能正常工作。

====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

#include


volatile unsigned char TxData[3];
volatile unsigned char RX_Data[6];
volatile int Tx_Counter;
int RX_Counter;
volatile unsigned int Tx_Int_Counter;
volatile unsigned int Rx_Int_Counter;
volatile unsigned char transmit [10];
volatile int Reg_Add1;
void TX_Data_for_Data_Demand (unsigned char Rer_Add);
void TX_Data_Format_bit (unsigned char Rer_Add、unsigned char Rer_Data);

unsigned int UCB0CTVALUE;

int main (空)

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

//为 I2C 配置引脚
P1SEL0 |= BIT2 | BIT3;// I2C 引脚

//禁用 GPIO 上电默认高阻抗模式
//激活先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;

//将 USCI_B0配置为 I2C 模式
UCB0CTLW0 |= UCSWRST;//将 eUSCI_B 置于复位状态
UCB0CTLW0 |= UCMODE_3 | UCMST | UCSYNC;// I2C 主控模式、SMCLK
UCB0BRW = 0x8;//波特率= SMCLK / 8
UCB0CTLW0 &=~ UCSWRST;//清除复位寄存器
UCB0I2CSA |= 0x0053;


_bis_SR_register (GIE);



//TX_Data_Format_Bit (0x2C、0x0A);//电源控制
// while (UCB0CTLW0 & UCTXSTP);//确保发送了 STOP 条件

TX_Data_Format_bit (0x2D、0x00);//电源控制
while (UCB0CTLW0 & UCTXSTP);//确保发送了 STOP 条件

TX_Data_Format_bit (0x2D、0x08);//电源控制
while (UCB0CTLW0 & UCTXSTP);//确保发送了 STOP 条件

TX_Data_Format_bit (0x31、0x00);//数据格式
while (UCB0CTLW0 & UCTXSTP);//确保发送了 STOP 条件



while (1)


while (UCB0CTLW0 & UCTXSTP);//确保发送了 STOP 条件

TX_Data_for_Data_Demand (0x32);
while (UCB0CTLW0 & UCTXSTP);//确保发送了 STOP 条件



#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = USCI_B0_vector
_interrupt void USCIB0_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(USCI_B0_vector)) USCIB0_ISR (void)
其他
错误编译器不受支持!
#endif

开关(__evo_in_range (UCB0IV、USCI_I2C_UCBIT9IFG))

案例 USCI_NONE:break;//向量0:无中断中断;
USCI_I2C_UCALIFG 案例:中断;
USCI_I2C_UCNACKIFG 案例:
UCB0CTL1 |= UCTXSTT;//如果 NACK,则重新发送开始
中断;//向量4:NACKIFG 中断;
case USCI_I2C_UCSTTIFG:break;//向量6:STTIFG break;
案例 USCI_I2C_UCSTPIFG:中断;//矢量8:STPIFG 中断;
案例 USCI_I2C_UCRXIFG3:中断;//向量10:RXIFG3中断;
案例 USCI_I2C_UCTXIFG3:中断;//向量14:TXIFG3中断;
案例 USCI_I2C_UCRXIFG2:中断;//向量16:RXIFG2中断;
案例 USCI_I2C_UCTXIFG2:中断;//向量18:TXIFG2中断;
案例 USCI_I2C_UCRXIFG1:中断;//向量20:RXIFG1中断;
案例 USCI_I2C_UCTXIFG1:中断;//向量22:TXIFG1中断;
USCI_I2C_UCRXIFG0案例:
RX_Data[RX_Counter]= UCB0RXBUF;
RX_Counter++;
RX_INT_Counter++;
中断;//向量24:RXIFG0中断;
案例 USCI_I2C_UCTXIFG0://检查 TX 字节计数器
// ReG_Add1 = TxData[Tx_Counter];
UCB0TXBUF = TxData[Tx_Counter];
TX_Counter --;
TX_INT_Counter++;
中断;//向量26:TXIFG0中断;
案例 USCI_I2C_UCBCNTIFG:break;//向量28:BCNTIFG
案例 USCI_I2C_UCCLTOIFG:中断;//矢量30:时钟低电平超时
案例 USCI_I2C_UCBIT9IFG:中断;//向量32:第9位
默认值:break;


void TX_Data_Format_bit (无符号字符 ReG_Add、无符号字符 ReG_Data)

TX_Counter = 2;
UCB0IE |= UCTXIE0| UCNACKIE;//发送和 NACK 中断使能
TxData[2]= ReG_Add;
TxData[1]= ReG_Data;
while (UCB0CTLW0 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTLW0 |= UCTR | UCTXSTT;// I2C TX,启动条件

while (Tx_Counter!= 0)

__no_operation();


UCB0CTLW0 |= UCTXSTP;
UCB0IE &=~UCTXIE;//清除 USCI_B0 TX int 标志

void TX_Data_for_Data_Demand (无符号字符 Rer_Add)

TX_Counter = 1;
TxData[1]= Reg_Add;
RX_Counter=0;
while (UCB0CTLW0 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTLW0 |= UCTR | UCTXSTT;// I2C TX,启动条件
UCB0IE |= UCTXIE0;//发送和 NACK 中断使能

while (Tx_Counter!= 0)

__no_operation();

UCB0IE &=~UCTXIE;//清除 USCI_B0 TX int 标志

UCB0CTLW0 |= UCTXSTP;
UCB0CTVALUE = UCB0CTLW0;

while (UCB0CTLW0 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTLW0 &=~UCTR;
UCB0CTLW0 |= UCTXSTT;// I2C TX、启动条件

UCB0IE |= UCRXIE0;//发送和 NACK 中断使能
while (RX_Counter<6)

__no_operation();

UCB0CTLW0 |= UCTXNACK | UCTXSTP;

UCB0IE &=~UCRXIE;//清除 USCI_B0 TX 内部标志
__no_operation();

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、开尔文、

    E2E 论坛最好能有更直接的问题。 我很乐意为您提供帮助、但我不能简单地按照您提供的小方向查看您的代码。 从您的帖子中可以看到、I2C 正常工作、并且您没有从传感器获取正确的值。 我建议使用逻辑分析仪来查看线路并确保您的 RX/TXing 数据正确无误。 如果这些问题更具体地涉及 ADXL345的功能、我可能没有什么帮助、因为我只拥有 MSP430系列器件的专业知识。

    此致、
    Caleb Overbay
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Caleb、

    感谢您的建议。  

    我要发送到传感器的数据是正确的、已在逻辑分析仪上观察到。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、开尔文、

    如果您确定从 MSP430发送的数据正确、则最有可能是 ADXL345端存在问题。 您正在从 MSP430发送不正确的命令、或者 ADXL345未正常运行、您是否已经在这方面取得了进展?

    此致、
    Caleb Overbay