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.

[参考译文] MSP430FR2355:MSP430FR2355 SPI 从模式接收错误

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1083941/msp430fr2355-msp430fr2355-spi-slave-mode-receive-error

部件号:MSP430FR2355

大家好~

我不住在一个讲英语的国家。

因此,即使语法不正确,也请理解:)

首先, 我很难开发 SPI 从属模式通信代码。

我的硬件信息如下所示。

大师                    从属

(SPC5748G B/D)           (MSP430FR2355 B/D)  

-----           -----

    西莫      | ----- >>|  SIMO (P1.2)

    SCK       | ----- >>|  SCK  (P1.1)

    接地        | ----- >|   接地

    VCC       | ----- >>|  VCC

-----           -----

主 SPI 的设置信息为波特率200kHz, 主频极性为活动高,主频相位为第一边缘,msbFirst。

从主从通过两条线进行单向通信。

但是,从主中继器发送的数据在从中继器处无法正确接收  

主中继器发送的数据为“0x04”,但从中继器接收的数据完全不同,如“0x0D”............

就在这种情况下,我连接了 Master (SPC5748G B/D)和 Arduino Uno (SPI 从属模式)并对其进行了测试,Master 确认他们正确发送数据

我会在下面留下我的代码供您检查。

-----

#include "driverlib.h"

UINT8_t 传输数据= 0x01
UINT8_t 接收数据[100]={0};

主无效(无效)

//停止监视计时器
WDT_A_HOLD (WDT_A_BASE);

GPIO 设置外围模块功能输入引脚(
GPIO 端口 P1,
GPIO 引脚1 + GPIO 引脚2 + GPIO 引脚3,
GPIO 主模块功能
);

PMM_unlockLPM5();

//Initialize Slave to MSB first,inactive high clock polity 和3线 SPI
EUSCI_B_SPI_initSlaveParam ={0};
Param.msb 第一个= EUSCI_B_SPI_MSB_FIRST;
Param.clockPhase = EUSCI_B_SPI_PHASE 数据已更改_ONFIRST_captured_ON_NEXT;
Param.clockPolarity = EUSCI_B_SPI_CLOCKPOLARITY_INNOTE_HIGH;
Param.spiMode = EUSCI_B_SPI_3pin;
EUSCI_B_SPI_initSlave (EUSCI_B0_BASE,&param);

//启用 SPI 模块
EUSCI_B_SPI_ENABLE (EUSCI_B0_BASE);

EUSCI_B_SPI_ClearInterrupt (EUSCI_B0_BASE,
EUSCI_B_SPI_receive_interrupt
);
//启用接收中断
EUSCI_B_SPI_enableInterrupt (EUSCI_B0_BASE,
EUSCI_B_SPI_receive_interrupt
);

__bis_SR_register (GIE);//启用中断

While (1)(同时)


}
}

//**********************************************
//
//这是 USCI_B0中断向量服务例程。
//
//**********************************************
#IF 定义(__TI_Compiler_version__)||定义(__IAR_SYSTEMS _ICC__)
#pragma vector=USCI_B0_vector
中断
#Elif Defined (__GNUC _)
__attribute__(中断(USCI_B0_Vector))
#endif
USCI_B0_ISR 无效(无效)

receiveData[index]= EUSCI_B_SPI_receiveData (EUSCI_B0_BASE);

index++;

IF (索引>= 100)

索引=0;
}
}

-----

如果你能帮我,我会很高兴。

谢谢。

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

    您所显示的配置是(CPHA=1,CPOL=1)。 这些位(SPI_CTAR:CPHA 和 SPI_CTAR:CPOL)是如何在主控中设置的?

    如果您无法访问主中继器,则只需尝试其它 MSP430端 CPHA 设置(EUSCI_B_SPI_PHASE _DATA_Captured_ONFIRST_Changed_ON_NEXT),并查看症状是否发生变化。

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

    非常感谢!