主题中讨论的其他器件:MSP432E411Y-BGAEVM
工具/软件:Code Composer Studio
您好!
我们需要 MSP432的 UART 操作、因此我在添加 main 函数之前编写了 check 函数代码。
函数是、当 MSP432从 UART 接收数据时、它将发送接收到的数据。
当 MSP432接收到数据时、它无法完全传输数据。
但是、如果我在调试模式下传输的代码上添加一个断点、它可以完全完成操作。
检查以下代码、我将断点设置为"void RX_Data_Operation (void)"的"eUSCI_A0->TXBUF = UART_Data[UART_State_+];"。
同样的操作也可以在 MSP430和 MSP432E411Y-BGAEVM (MCLK=120MHz)中运行。
这些是项目的设置、
MCLK=48MHz、BR=9600、无奇偶校验、一个停止位。
这些是我的设置代码、
空 UART_SET (空)
{
P1SEL0 |=(RXD + TXD);
EUSCI_A0->CTLW0 |= EUSCI_A_CTLW0_SWRST;//将 eUSCI 置于复位状态
EUSCI_A0->CTLW0 = EUSCI_A_CTLW0_SWRST |//在复位时保持 eUSCI
EUSCI_B_CTLW0_ssel_SMCLK;//为 SMCLK 配置 eUSCI 时钟源
EUSCI_A0->BRW = 312;
EUSCI_A0->MCTLW =(8 << EUSCI_A_MCTLW_BRF_OFS)| EUSCI_A_MCTLW_OS16;
EUSCI_A0->CTLW0 &=~EUSCI_A_CTLW0_SWRST;//初始化 eUSCI
EUSCI_A0->IFG &=~EUSCI_A_IFG_RXIFG;//清除 eUSCI RX 中断标志
EUSCI_A0->IE |= EUSCI_A_IE_RXIE;//启用 USCI_A0 RX 中断
//启用全局中断
__ENABLE_IRQ();
//在 NVIC 模块中启用 eUSCIA0中断
NVIC->ISER[0]= 1 <<((EUSCIA0_IRQn)& 31);
}
这些是接收功能、
空 EUSCIA0_IRQHandler (空)
{
UART_Data[(UART_STATE 和 UART_State_Count)]= EUSCI_A0->RXBUF;
UART_State_+;
if ((UART_State & UART_State_Count)>= UART_Data[0])
UART_STATE = UART_State_Finish;
}
这些是发送功能、
void RX_Data_Operation (void)
{
if (((UART_State & UART_State_Finish)=UART_State_Finish)
{
UART_State_0;
//*********
//* TX 操作*
//*********
while (<UART_Data[0])
EUSCI_A0->TXBUF = UART_Data[UART_State_+];
UART_State_0;
}
}
下图显示了 UART 设置的终端。
绿色字是 PC 到 MSP432的数据、蓝色字是 MSP432的数据。
第一个蓝色字(06 00)的状态为 MSP432自由运行。(数据缺失)
第二个蓝色字(06 05 04 03 02 00)的状态是 MSP432在具有断点的 CCS 中以调试模式运行。
如何解决问题?
BR、
于传陈
