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.

[参考译文] CCS/MSP430G2553:两个MSP430G2553通过SPI接口相互通信

Guru**** 2610895 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/662859/ccs-msp430g2553-two-msp430g2553-talking-to-each-other-via-spi-interface

部件号:MSP430G2553

工具/软件:Code Composer Studio

您好,

我是微处理器的新手,我认为用SPI协议连接两个MSP430G2553是一个很好的练习。 我已经在下面编写了代码,并且具有以下连接,但我尚未设法在主设备和从设备之间传输正确的信息。 大多数情况下,我在两侧只收到0。

我希望您能提供一些帮助或指导。

非常感谢。

Kamil

MSP430_1 <=>MSP430_2

GND <=> GND

WFP 1.5 <=>WFP 1.5

WFP 1.7 <=>WFP 1.6

WFP 1.6 <=>WFP 1.7

#include <MSP4S.h>

#define SSI_SCLK_PIN BIT5.
#define SSI_SOMI_PIN BIT6.
#define SSI_SIMO_PIN BIT7

void ssI_Init(无符号char从属){
UCB0CTL1 |= UCSWRST;//设置软件

如果(从属){
UCB0CTL0 || UCCKPH | UCMSB | UCSYNC;// 3引脚,8位SPI从属设备
}其他{
UCB0CTL0 || UCMST | UCCKPH | UCMSB | UCSYNC;// 3引脚,8位SPI主控制器
UCB0CTL1 |= UCSSEL_2;// SMCLK
UCB0BR0 = 0x01;// 1:1
UCB0BR1 = 0;
}

P1SEL || SSI_SCLK_PIN | SSI_SOMI_PIN | SSI_SIMO_PIN;// WFP 1.5 = SCLK, 1.6 = SOMI, WFP 1.7 = SIMO
P1SEL2 |= SSI_SCLK_PIN | SSI_SOMI_PIN | SSI_SIMO_PIN;

UCB0CTL1 &=~UCSWRST;//透明软件

__DELAY周期(50万);
}

void ssI_Transfer (const unsigned char tx_buf,unsigned char *rx_buf,unsigned char rx_len){
无符号字符I;
对于(i=0;i<rx_len;i++){
while (!(UC0IFG和UCB0TXIFG));
UCB0TXBUF = I? 0xFF:tx_buf;
while (!(UC0IFG和UCB0RXIFG));
Rx_buf[i]= UCB0RXBUF;
}
}

/**
主要c
*/
内部主(无效)

无符号字符A;

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

SSI_Init(1);

而(1){
SSI_Transfer (23,&A,1);
}
}

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

    您好,Kamil,

    使用SPI进行通信是一种很好的学习体验,但可能有点棘手! 若要连接您的PIN,您应该是1.6 连接到WFP 1.6 和1.7 WFP 1.7。 一个设备是设置的主设备,另一个设备是设置的从属设备,因此两个设备上的SIMO线路应连接在一起,对于SOMI也应相同。 可能有点不直观。

    在初始化过程中,您可能还需要删除UCCKPH。 这只是更改通信期间用于捕获和更改线路上数据的时钟边缘,但存在一些与之相关的设备错误。 在可能的情况下,通常更容易避免。

    尝试将UCB0BR0设置为0x02,以确保设备可以先以较慢的速度进行通信,然后再以较快的速度进行通信。

    对于您的从属设备,您需要在SSI_Transfer功能中反转RX和TX的顺序。 从设备将首先从主设备接收数据,然后再将数据传输回。

    您可以在 此处找到用于G2553的SPI的代码示例。 这些示例使用中断发送和接收数据,这些数据可能更高级,但非常高效。

    此致,

    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Ryan:
    非常感谢您的回答。 您的建议非常有帮助。 此外,感谢您指出一个出色的代码资源。 我会在未来的项目中牢记这一点。
    祝你一切顺利,
    Kamil