[MCU] 机接收不到

[复制链接]
 楼主| zhaoxqi 发表于 2019-8-4 17:00 | 显示全部楼层 |阅读模式
两个MSP430F149进行SPI通信,主机发送数据正常,为什么从机接收不到?(从机的U0RXBUF一直为0)
通过示波器可以看到主机的SIMO输出的结果是正确的。
jiaxw 发表于 2019-8-4 17:03 | 显示全部楼层
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
 楼主| zhaoxqi 发表于 2019-8-4 17:08 | 显示全部楼层

主机程序:
#include  <msp430x14x.h>
char MST_Data = 0x00;

void main(void)
{
  unsigned int i;
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P3SEL = 0x00E;                            // Setup P3 for SPI mode
  P3OUT = 0x020;                            // Setup P3.4 for Scope trigger and
  P3DIR |= 0x030;                           // P3.5 for slave initialization
  U0CTL = CHAR + SYNC + MM + SWRST;         // 8-bit, SPI, Master
  U0TCTL = CKPL + SSEL1 + STC;              // Polarity, SMCLK, 3-wire
  U0BR0 = 0x002;                            // SPICLK = SMCLK/2
  U0BR1 = 0x000;
  U0MCTL = 0x000;
  ME1 = USPIE0;                             // Module enable
  U0CTL &= ~SWRST;                          // SPI enable
  IE1 |= URXIE0;                            // Recieve interrupt enable
  _EINT();                                  // Enable interrupts
  P3OUT &= ~0x020;                          // Toggle P3.5: slave reset
  P3OUT |= 0x020;
  i = 50000;                                // Delay
  do (i--);
  while (i != 0);
  while (1)
  {
    TXBUF0 = MST_Data;                      // Transmit first character
    LPM0;                                   // CPU off
  }
} // End Main
#pragma vector=USART0RX_VECTOR
__interrupt void SPI0_rx (void)
{
  
  P3OUT ^= 0x010;                           // XOR P3.4 for scope trigger
  while ((IFG1 & UTXIFG0) == 0);            // USART0 TX buffer ready?
  
    TXBUF0 = 0x0F;

}

从机程序:
#include  <msp430x14x.h>
char MST_Data = 0x00, SLV_Data = 0xFF;
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P3SEL |= 0x0E;                             // Setup P3 for SPI mode
  U0CTL &=~MM;
  U0CTL = CHAR + SYNC + SWRST;              // 8-bit, SPI, Slave
  U0TCTL = CKPL + STC;                      // Polarity, UCLK, 3-wire
  ME1 = USPIE0;                             // Module enable
  U0CTL &= ~SWRST;                          // SPI enable
  
  while (1)
  {
    if(IFG1 & URXIFG0)
    {
      while (!(IFG1 & UTXIFG0));
      TXBUF0 = U0RXBUF;                     
      LPM4;
    }
  }
}
刚开始测试的时候发现不能进入中断服务函数,所以我直接改成了现在查询方式输出,这样可以吗?
zhanghqi 发表于 2019-8-4 17:11 | 显示全部楼层
你的从机接受程序怎么写的
jiajs 发表于 2019-8-4 17:16 | 显示全部楼层
收不到?先检查硬件电路是连接正确了的!如果在此基础上还不对的话就是你的驱动的问题了,建议把程序挂上来,你这样说的问题想帮也帮不上啊!
zhanghqi 发表于 2019-8-4 17:18 | 显示全部楼层
如何确定主机发送正常  如果能确定就知道为什么收不到了
zhenykun 发表于 2019-8-4 17:21 | 显示全部楼层

自发自收试试
wyjie 发表于 2019-8-4 17:25 | 显示全部楼层

试试调高波特率。。。。
jlyuan 发表于 2019-8-4 17:42 | 显示全部楼层
中断的方式实时性好,查询方式速度慢
yszong 发表于 2019-8-4 17:45 | 显示全部楼层
先检查硬件电路是连接正确否     如果在此基础上还不对的话就是驱动的问题    降低波特率试一下
zhenykun 发表于 2019-8-4 17:48 | 显示全部楼层
看下两端的波特率是否一致。。
 楼主| zhaoxqi 发表于 2019-8-4 17:52 | 显示全部楼层

嗯,那我按大家的说法挨个排查一下,先结贴啦,谢谢哈
comparison 发表于 2019-8-4 18:28 | 显示全部楼层
主机发送正常,可以检查一下硬件连接是否有问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

808

主题

10636

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部

808

主题

10636

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部