工具/软件:Code Composer Studio
我不知道如何在 msp432 ..plz 中进行 SPI 编程如果可能、请提供示例建议。我使用 msp432作为 MSP430 (主器件) plz 帮助的从器件
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.
工具/软件: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。 为了使它们协同工作并为您提供一个输出、您可能需要进行一些操作、以便您可以轻松地将其解释为正确或不正确(如果您不使用逻辑分析仪)。
请将此作为起点、并毫不犹豫地向我询问有关这些示例的问题。
[引用 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;
}