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.

MSP430F449: MSP430F449 SIMO空闲状态为什么一直为高电平的原因?

Part Number: MSP430F449

您 好!

     对msp430F449 采用SPI通信与时间芯片,初始化设置后空闲状态SIMO始终为高电平,强制低电平也不行,用逻辑分析仪监视初始化U0TCTL发送控制寄存器的“STC”设置为1选择3线模式,就为高电平了,不知道什么原因?请高位工程师帮忙分析一下!

  • 发现是由于P3.1-P3.3端口设置与 SPI通信设置冲突导致:


    P3SEL |= BIT1 + BIT2 + BIT3; //SPI引脚启用,作为片内外设的对外接口
    P3DIR |= BIT1 + BIT3; //MO,CLK设为输出
    P3DIR &= ~BIT2; //MI为输入
    P3DIR |= BIT0; 

    SPI通信主机设置:

    //UxCTL控制寄存器
    U0CTL |= SWRST; // 复位SPI功能
    U0CTL |= MM; // 主模式
    U0CTL |=SYNC; // 同步 SPI模式
    U0CTL |=CHAR; // 8位数据模式
    //UxCTL发送控制寄存器
    U0TCTL |=STC;
    //U0TCTL &= ~SSEL0;
    U0TCTL |= SSEL0; // SSEL1 时钟源选择ACLK
    U0CTL &= ~CKPL; // 时钟空闲状态下为低电平
    U0CTL &= ~CKPH; //时钟相位选择=0
    //UxBR0、UXBR1波特率选择寄存器0和1
    U0BR0 = 0x03; // 03使用32768Hz晶体波特率32768/9600=3.413
    U0BR1 = 0x00; //00
    U0MCTL = 0x4A; // 小数波特率调整因子
    //模块功能使能寄存器
    ME1|=USPIE0; // 
    U0CTL &= ~SWRST; // 使能SPI功能,从复位模式下运行
    //中断使能
    //IE1|= URXIE0; //UTXIE0; // 
    //IE1|= UTXIE0;

    //中断标志寄存器
    IFG1 &=~URXIFG0; // 清除接收和发送中断标志
    //IFG1 &=~UTXIFG0; //接收中断标志位默认为零

    不知道怎么解决?

  • 您好,您把这两行注释掉试一下:

    P3DIR |= BIT1 + BIT3; //MO,CLK设为输出
    P3DIR &= ~BIT2; //MI为输入
  • 您好!按照您说的建议试验了,还是不行,空闲时一直高电平有效!

    //P3DIR |= BIT1 + BIT3; //MO,CLK设为输出
    //P3DIR &= ~BIT2; //MI为输入

  • 您好,我下周回来之后再帮您看一下

  • 发现是由于P3.1-P3.3端口设置与 SPI通信设置冲突导致

    您是如何做出这样的判断的?

  • 可以正常通信吗?通信的时候还会保持高电平吗?

  • 空闲状态一直是高电平有效,相当于把SPI的设置模式改变了,跟时间芯片不能正常通讯!

  • 设置的时钟极性为0而实际为1

  • 如果单独设置SPI的参数 不设置 P3.1-P3.3 正常 ,一旦设置了模块功能,时钟极性瞬间就变为高电平

  • 您的意思就是,在配置SPI时,如果不配置P3.1-P3.3,就不会出现您说的问题吗?

  • 从实际测量的波形上看,是这样的!单独设置SPI的极性及相位,可以,配置模块功能就不行了!不知道什么原因?

  • 您是需要将这3个管脚复用吗?

    例程中在配置SPI时只配置了P3SEL这个寄存器,这就是我刚开始为什么让您将另外两行代码注释掉的原因。

    例程的参考价值同样很重要。

  • 这三个管脚必须复用啊,如果不设置无法实现SPI通讯功能!

  • 我的意思是您还需要将它当GPIO用吗?

    配置成SPI,只需要设置P3SEL就可以了,不需要设置方向寄存器。

    您也说了,不配置方向寄存器就能正常工作。

  • 配置SPI +
    P3SEL |= BIT1 + BIT2 + BIT3; //SPI引脚启用,作为片内外设的对外接口
    P3DIR |= BIT1 + BIT3; //MO,CLK设为输出
    P3DIR &= ~BIT2; //MI为输入

    必须配置才能通讯!

  • 这样通讯SPI模式不正确,造成无法与时间芯片通讯!

  • 我似乎找到问题所在了:

  • 你的意思保证或门必须为低电平,STC必须设置为0?那样发送缓存标志位正常,而接收缓存寄存器标志位始终无法收到置位信号,一直等待状态程序处于死循环!

  • 这款芯片时间比较早了,各种手册的写法和现在的也不太一样;我手里暂时也没有这块板卡。

    我加您好友了,您把您的代码发过来,我找人帮您看一下。

  • 您的工程名中包含非ASCII字符,我们这边无法导入,您能修改一下工程名称吗?

  • 您好,之前有一个地方回复错您了。

    这个框图表示的是相关IO口的方向控制。

    可以看到其实不需要配置IO口的方向寄存器就能控制相关IO口在SPI模式下的方向。

    例程中也确实没有配置方向寄存器。

    还有例程中是先配置USART模块,最后才进行与IO相关的配置的。

  • 如果不设置I/O读不到接收的缓存数据!

  • 您好,请提供合适的CCS工程,以方便我们帮您检查。

x 出现错误。请重试或与管理员联系。