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.

[参考译文] MSP430G2553:使用 MPU6050从器件的 msp430g2553上的 SPI

Guru**** 2538955 points
Other Parts Discussed in Thread: MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/704283/msp430g2553-spi-on-msp430g2553-using-mpu6050-slave

器件型号:MSP430G2553

#include
#include
#include

unsigned char MST_Data;
unsigned char SLV_Data;
/**
* main.c
*
int main (空)

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
P1OUT |= BIT5;
P1DIR |= BIT5;
P1SEL = BIT1 | BIT2 | BIT4;
P1SEL2 = BIT1 | BIT2 | BIT4;
UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC;// 3引脚、8位 SPI 主器件
UCA0CTL1 |= UCSSEL_2;// SMCLK
UCA0BR0 |= 0x02;///2
UCA0BR1 = 0;//
UCA0MCTL = 0;//无调制
UCA0CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
IE2 |= UCA0RXIE;//启用 USCI0 RX 中断
P1OUT &=~BIT4;//现在 SPI 信号已初始化、
P1OUT |= BIT5;//复位从器件
_DELAY_CYCLES (75);//等待从器件初始化

MST_Data = 0x01;//初始化数据值
SLV_Data = 0x00;
UCA0TXBUF = MST_Data;//发送第一个字符

_bis_SR_register (LPM0_bits + GIE);// CPU 关闭、启用中断

//测试有效的 RX 和 TX 字符
#pragma vector=USCIAB0RX_vector
_interrupt void USCIA0RX_ISR (void)

volatile unsigned int i;

while (!(IFG2 & UCA0TXIFG));// USCI_A0 TX 缓冲器准备就绪?

if (UCA0RXBUF == SLV_Data)//测试正确的字符 RXd
P1OUT |= BIT0;//如果正确,亮起 LED
其他
P1OUT &=~BIT0;//如果不正确,清除 LED

MST_Data++;//递增主值
SLV_Data++;//递增预期从器件值
UCA0TXBUF = MST_Data;//发送下一个值

__DELAY_CYCLES (50);//将传输之间的时间添加到
}//确保从设备可以保持正常运行

因此、我将此 MPU6050加速计作为 MSP430g2553微控制器的 SPI 从器件进行测试、并尝试使用上述代码来测试 SPI 连接。 运行代码时、TX 注册表数据会递增、直至达到某个十六进制限制、但 Rx 注册表不会从0xff 更改。 在这个网站上的论坛帖子中、我发现上面的大多数代码都有一个答案、其中提到从器件返回一个0xff 值作为空闲值、但没有说明发生这种情况时该怎么办。 请提供任何帮助  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Paul:
    我快速浏览了 MPU6050文档、它说6050仅支持 I2C。 所以我不确定你的连接 MISO 是什么

    如果这是一个拼写错误、并且您使用的是 MPU6000、那么您不会设置读取位。 我还注意到您未初始化器件以使用 SPI、它似乎默认为 i2c。 最后、您会不断发送地址、而不会为读取发送虚拟字节。 我不确定这会怎么做、除非这是 SPI 上的突发读取所代表的含义。

    我建议查看 Github 上的这个项目、以了解如何与 MPU 进行通信: github.com/.../MPU6000-Datalogger

    如果您使用的是 MPU6050、我用谷歌搜索了 MPU6050 MSP430、然后出现了多个项目。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    啊、您完全正确、 我之前发现过数据表、但 PI 坚持将该传感器用于 SPI、因此我出于某种原因假设它可以工作、或者可能是 mpu6000、但在从多个角度获得放大镜并对其进行平方之后、我看到我已经有了 传感器错误。 感谢您的回答。