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.

MSP430F6638 SPI

    利用官方例程的msp430f66xx_uscia0_spi_09和msp430f66xx_uscia0_spi_10对两个6638的SPI进行联调,一个作主机来发送,一个作从机来接收,为什么从机接收到的数据和主机发送的数据完全不一样,不知道是我的调试方法有问题还是什么原因,希望得到指导,谢谢大家帮助。

  • 官方例程都有问题??有用示波器抓过波形吗?

  •     我抓过波形,但是不太看得明白,我想应该是我调试的方法有问题,所以在论坛上求助一下,例程应该没问题的

  • mengxiao,

       能具体描述一下,数据是怎么不一样的,该例程里面发送的数据是累加的,从0x01开始,slave端只是将接收的再发回来。

    你首先确定你的硬件连线没有错误,SPI首先是通的。SOMI和SIMO没有接错,

    其次需要看看在slave端的接收中断里面设置断点试试,看看UCA0RXBUF的数据是否正确。



    谢谢

  •   我首先将SIMO与SOMI相连接, 用主机发送程序,相当于做个自发自收,是可以接收到数据的,然后我是这么连的,将两个6638的P2.0,P2.1,P2.2相连,因为接收程序中对P1.4采取了中断,就将两个板子的P1.4也连起来了,然后在发送端发送中断程序中设置断点,按程序中的提示位置设置的

    while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?

    if (UCA0RXBUF==SLV_Data) // Test for correct character RX'd

    P1OUT |= 0x01; // If correct, light LED
    else
    P1OUT &= ~0x01; // If incorrect, clear LED

    MST_Data++; // Increment data
    SLV_Data++;
    UCA0TXBUF = MST_Data; // SET BREAKPOINT HERE! 断点设置位置
    __delay_cycles(500);

    从机的断点位置为接收中断程序内的第二句话

    while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
    UCA0TXBUF = UCA0RXBUF;//断点设置位置
    break;

    首先运行从机接收程序,然后运行主机发送程序,主机运行到断点位置,然后从机可以进入中断,可以看到UCA0RXBUF内接收到数据,然后从机再次运行,然后再运行主机,从机再次进入中断,是这么进行测试的,但是测试结果不对,从机中的UCA0RXBUF和主机中的UCA0RXBUF的数据都是混乱的