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:MSP432P401R SPI 示例

Guru**** 2577385 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/605250/ccs-msp432p401r-spi-examples

主题中讨论的其他器件:MSP430G2553

工具/软件:Code Composer Studio

我不知道如何在 msp432 ..plz 中进行 SPI 编程如果可能、请提供示例建议。我使用 msp432作为 MSP430 (主器件) plz 帮助的从器件

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

    Resource Explorer 是有关此内容的代码示例的绝佳来源!

    您使用的是 CCS 吗? 您可以转到 View->Resource Explorer、选择所需的项目、然后将其直接下载到 CCS 中。  在您的器件上导入和测试代码示例的非常简单的方法。  您可能还会查找 CCS 云(在我发送的链接中的项目窗口右上角有一个云图标、您可以点击该图标)、这使得导入这些示例变得非常简单/快速。

    好的、一个好的开始位置是 msp432p401x_euscib0_SPI_10 和 msp430g2xx3_uscia0_SPI_09。 为了使它们协同工作并为您提供一个输出、您可能需要进行一些操作、以便您可以轻松地将其解释为正确或不正确(如果您不使用逻辑分析仪)。

    请将此作为起点、并毫不犹豫地向我询问有关这些示例的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我最初有几个问题、
    1)-输入从微控制器 msp432
    EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_ssel_ACLK;// ACLK
    EUSCI_B0->BRW = 0x01; ///2、fBitClock = fBRCLK/(UCBRx+1)。
    EUSCI_B0->CTLW0 &=~EUSCI_B_CTLW0_SWRST;//初始化 USCI 状态机
    EUSCI_B0->IE |= EUSCI_B_IE_RXIE; //启用 USCI_B0 RX 中断
    BRW 的用途是什么?
    2)-如果我只想将数据(0x01)从 MSP430发送到 MSP 432 (考虑到任何端口引脚)、我将根据此示例(msp432p401x_euscib0_spi_10)在从器件侧进行哪些更改?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="ssachin bankoti">我最初有几个问题、
    1)-输入从微控制器 msp432

    我将对此进行一些解释 、但我的建议是阅读 《技术参考手册  》以了解有关该手册的更多信息并查看更详细的说明。  这是了解 MSP 器件 和 数据表的最佳工具之一;可在器 件主页上找到这两个器件的链接。
    EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_ssel_ACLK;// ACLK   
    EUSCI_B0->BRW = 0x01;///2、fBitClock = fBRCLK/(UCBRx+1)。     
    EUSCI_B0->CTLW0 &=~EUSCI_B_CTLW0_SWRST;//初始化 USCI 状态机   
    EUSCI_B0->IE |= EUSCI_B_IE_RXIE;//启用 USCI_B0 RX 中断
    BRW 的用途是什么?   输入 时钟的分频量。 (位时钟预分频器)。  在本例中、位时钟为 ACLK、不需要预分频、因此它被一分频(1)。
    2)-如果我只想将数据(0x01)从 MSP430发送到 MSP 432 (考虑到任何端口引脚)、我将根据此示例(msp432p401x_euscib0_spi_10)在从器件侧进行哪些更改?    我认为你的问题太模糊了。  根据您的应用需求、您可以选择在从器件侧接收到的值执行许多操作。  不过、更具体地说、您可以创建一个变量、在其中将 EUSCI_B0->RXBUF 存储到中、而不是像示例那样将其传递回 TXBUF (第126行)。  也许可以在主程序末尾创建一个 while 循环并删除第101行、这样器件就不会在 ISR 退出时进入睡眠状态。  然后对 while 环路内的变量进行一些处理、以打开或关闭某些 LED 或类似的简单操作、然后让您的想象力从这里开始。

    [/报价]

    我的答案在上面添加为红色。  希望这对您有所帮助。  祝您好运!

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

    您好、先生、

    我已经完成了编程、并且能够成功地将数据从主器件(MSP430)传输到从器件 MSP (432)

    但我只希望传递一位数据、而不是连续数据(因为我要针对特定应用执行该操作)

    我的计划包括

    1)-如果该值(0x01)从主机发送到从机,并在从机终端中接收到,则表示我使用了 IF 条件,如果从机中接收到的数据为(0x01),则在 MSP 432中 LED 将闪烁(p2.0)

    2)-一切正常、但我只是希望 LED 只闪烁一次、而不是连续数据传输.. 先生,普尔斯让我感到很失望。

    我的主程序是:-

    /*------------------
    主 MSP 430G2553
    MSP430g2553主器件 MSP432P401x 从器件
    //------------ --------
    ///|\|/|\||
    //||||| |
    //-|RST |-|RST |
    //||||
    //||数据输入(UCB0SIMO)|
    //| P1.0|--- |P1.6 |
    //||||
    //|数据输出(UCB0SOMI)|
    //| P1.2|--------------- |P1.7 |
    //||||
    //| S 时钟(UCB0CLK)|
    //| P1.4|--- |P1.5 |
    //||||
    -------------------------------------------------- *
    #include
    volatile char received_ch = 0;
    int main (空)

    //// P1OUT |= BIT5;
    // P1DIR |= BIT5;
    P1SEL = BIT1 | BIT2 | BIT4;
    P1SEL2 = BIT1 | BIT2 | BIT4;

    UCA0CTL1 = UCSWRST;
    UCA0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC;// 3引脚、8位 SPI 主器件
    UCA0CTL1 |= UCSSEL_2;// SMCLK
    UCA0BR0 |= 0x02;///2
    UCA0BR1 = 0;//
    UCA0MCTL = 0;//无调制
    UCA0CTL1 &=~UCSWRST;//**初始化 USCI 状态机**

    // P1OUT &=(~BIT5);//选择器件

    while (!(IFG2 & UCA0TXIFG));// USCI_A0 TX 缓冲器准备就绪?
    UCA0TXBUF = 0x01;//通过 SPI 向从器件发送0xAA
    // P1OUT |=(BIT5);//取消选择器件

    //--------------------------------------------------------------

    我的从程序是:-

    //--------------------------------------------------------------

    /*********
    * MSP 432从设备
    * IDS 系统
    *引脚连接
    * MSP430g2553主器件 MSP432P401x 从器件
    //------------ --------
    ///|\|/|\||
    //||||| |
    //-|RST |-|RST |
    //||||
    //||数据输入(UCB0SIMO)|
    //| P1.0|--- |P1.6 |
    //||||
    //|数据输出(UCB0SOMI)|
    //| P1.2|--------------- |P1.7 |
    //||||
    //| S 时钟(UCB0CLK)|
    //| P1.4|--- |P1.5 |
    //||||
    //
    秘书长的报告 /
    #include "msp.h"
    volatile unsigned int RXData、w;
    void loop_1 ();
    int main (空)

    WDT_A->CTL = WDT_A_CTL_PW |//停止看门狗计时器
    WDT_A_CTL_HOLD;
    P2->DIR |= BIT0;// P1.0设置为输出

    P1->SEL0 |= BIT5 | BIT6 | BIT7;//将 P1.5、P1.6和 P1.7设置为
    // SPI 引脚功能

    EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_SWRST;//将状态机置于复位状态
    EUSCI_B0->CTLW0 = EUSCI_B_CTLW0_SWRST |//保持状态机处于复位状态
    EUSCI_B_CTLW0_SYNC |//设置为同步模式
    EUSCI_A_CTLW0_CKPL |//将时钟极性设置为高电平
    EUSCI_B_CTLW0_MSB;// MSB 优先和从

    EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_ssel_ACLK;// ACLK
    EUSCI_B0->BRW = 0x01;///2、fBitClock = fBRCLK/(UCBRx+1)。
    EUSCI_B0->CTLW0 &=~EUSCI_B_CTLW0_SWRST;//初始化 USCI 状态机
    EUSCI_B0->IE |= EUSCI_B_IE_RXIE;//启用 USCI_B0 RX 中断

    //在退出 ISR 时保持在 LPM 中
    // SCB->SCR |= SCB_SCR_SLEEPONEXIT_MSK;

    //确保 SLEEPONEXIT 立即生效
    //__DSB();

    //启用全局中断
    __ENABLE_IRQ();

    //在 NVIC 模块中启用 eUSCI_B0中断
    NVIC->ISER[0]= 1 <<((EUSCIB0_IRQn)& 31);

    //输入 LPM0
    //__sleep();
    //__no_operation();

    ///--------------------------------------------
    // SPI 中断服务例程
    空 EUSCIB0_IRQHandler (空)

    //等待字符被接收
    while (!(EUSCI_B0->IFG 和 EUSCI_B_IFG_RXIFG));
    RXData = EUSCI_B0->RXBUF;
    if (RXData=0x01)

    P2->OUT μ^ BIT0;// XOR P2.0
    NVIC->ISER[0]=~(1 <<((EUSCIB0_IRQn)& 31));

    //表示(w = 200000;w > 0;w-);//延迟
    LOOP_1 ();

    ///----------------------------------------------
    void loop_1 ()

    EUSCI_B0->IFG &=~EUSCI_B_IFG_RXIFG;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    主代码是否有您在此处省略的 eUSCI ISR? 还是这是完整的主代码?
    此设置的结果(输出)是什么? LED 是否持续闪烁?

    我认为您在432 ISR 内部更改 NVIC 的位置不正确:1. 您使用的“=~”是指“~”。 参考 TRM 中的第2.4.3.1节、我认为您不能向该寄存器写入零。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、LED 持续闪烁...仍然闪烁
    我正在考虑使用中断..ca、您建议使用任何替代方法