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.

[参考译文] MSP432P401R:MSP-EXP432P401R:eUSCI_A0和 eUSCI_A2之间的 UART 回波

Guru**** 2538950 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/815608/msp432p401r-msp-exp432p401r-uart-echo-back-between-eusci_a0-and-eusci_a2

器件型号:MSP432P401R
尊敬的所有人:
通过 Putty、我向"Application/User UART" COM 端口(eUSCI_A0)发送一些字符串。
然后将这个字符串发送到 eUSCI_A2并传回 eUSCI_A0。
但是 、"Application/User UART" COM 端口没有输出。
请告诉我代码中的错误。
PS:  
当然、如果我更改
    MAP_UART_transmitData (EUSCI_A2_base、MAP_UART_receiveData (EUSCI_A0_BASE);
 更改为
       MAP_UART_transmitData (EUSCI_A0_BASE、MAP_UART_receiveData (EUSCI_A0_BASE));
然后  
  此代码正常工作、但我想通过 eUSCI_A2 UART 模块回显。
=== 我的代码===
/* DriverLib 包括*/
#include
/*标准包括*/
#include
#include
//***** 全局变量
uint32_t myDCO    = 0;
uint32_t myACLK   = 0;
uint32_t myBCLK   = 0;
uint32_t myHSMCLK = 0;
uint32_t myMCLK   = 0;
uint32_t mySMCLK  = 0;
//![简单 UART 配置]
/* UART 配置参数。 这些是的配置参数
 *使 eUSCI 成为 UART 模块以9600波特率运行。 这些
 *值是使用 TI 提供的在线计算器计算得出的:
 * software-dl.ti.com/.../index.html
 * //波特率计算
 * // 12000000/(16*9600)= 78.125
 * //分数部分= 0.125
 * //用户指南表21-4:UCBRSx = 0x10
 * // UCBRFx = int (78.125-78)*16)= 2.
 *
const eUSCI_UART_Config uartConfig =

       EUSCI_A_UART_CLOCKSOURCE_SMCLK、         // SMCLK 时钟源
       78、                                    // BRDIV = 78
       2、                                      // UCxBRF = 2
       0、                                      // UCxBRS = 0
       EUSCI_A_UART_NO_奇 偶校验、                 //无奇偶校验
       EUSCI_A_UART_LSB_FIRST、                 // LSB 优先
       EUSCI_A_UART_One_stop_bit、              //一个停止位
       EUSCI_A_UART_MODE、                      // UART 模式
       EUSCI_A_UART_oversampling_BAUDRATE_generation //过采样
};
//![简单 UART 配置]
int main (空)

   /*停止 WDT */
   MAP_WDT_A_HOLDTimer();
   /*在 UART (eUSCA0)模式下选择 P1.2和 P1.3 - GPIO 初始化*/
   MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P1、
           GPIO_PIN2 | GPIO_PIN3、GPIO_PRIMARY_MODULE_FUNCTION);
   /*在 UART (eUSCA2)模式下选择 P3.2和 P3.3 - GPIO 初始化*/
   MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P3、
           GPIO_PIN2 | GPIO_PIN3、GPIO_PRIMARY_MODULE_FUNCTION);
   /*红色 LED 熄灭 */
   GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0);
   GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN0);
   GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN1);
   GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN1);
   /*将 DCO 设置为12MHz */
   CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 12);
   myDCO   = MAP_CS_getDCOFrequency ();
   myACLK  = MAP_CS_getACLK ();
   myBCLK  = MAP_CS_getBCLK ();
   myMCLK  = MAP_CS_getMCLK ();
   myHSMCLK = MAP_CS_getHSMCLK ();
   mySMCLK = MAP_CS_getSMCLK ();
   //![简单 UART 示例]
   /*配置 UART 模块*/
   MAP_UART_initModule (EUSCI_A0_BASE、uartConfig);
   MAP_UART_initModule (EUSCI_A2_base、uartConfig);
   /*启用 UART 模块*/
   MAP_UART_enableModule (EUSCI_A0_BASE);
   MAP_UART_enableModule (EUSCI_A2_base);
   /*启用中断*/
   MAP_UART_enableInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_receive_interrupt);
   MAP_Interrupt_enableInterrupt (INT_EUSCIA0);
   MAP_UART_enableInterrupt (EUSCI_A2_base、EUSCI_A_UART_receive_interrupt);
   MAP_Interrupt_enableInterrupt (INT_EUSCIA2);
   MAP_Interrupt_enableSlepOnIsrExit();
   MAP_Interrupt_enableMaster();
   //![简单 UART 示例]
   while (1)
   {
       MAP_PCM_gotoLPM0InterruptSafe ();
   }
/* EUSCI A0 UART ISR -将数据回传到 PC 主机*/
空 EUSCIA0_IRQHandler (空)

   uint32_t status = MAP_UART_getEnabledInterruptStatus (EUSCI_A0_BASE);
   MAP_UART_clearInterruptFlag (EUSCI_A0_BASE、STATUS);
   IF (STATUS 和 EUSCI_A_UART_receive_interrupt_FLAG)
   {
       MAP_UART_transmitData (EUSCI_A2_base、MAP_UART_receiveData (EUSCI_A0_BASE);
       GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN0);
   }
/* EUSCI A2 UART ISR -将数据回传到 PC 主机*/
空 EUSCIA2_IRQHandler (空)

   uint32_t status = MAP_UART_getEnabledInterruptStatus (EUSCI_A2_base);
   MAP_UART_clearInterruptFlag (EUSCI_A2_base、status);
   IF (STATUS 和 EUSCI_A_UART_receive_interrupt_FLAG)
   {
       MAP_UART_transmitData (EUSCI_A0_BASE、MAP_UART_receiveData (EUSCI_A2_BASE));
       GPIO_toggleOutputOnPin (GPIO_PORT_P2、GPIO_PIN1);
   }
===我的代码结束===
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您如何循环返回 UCA2? 您是否将 P3.2和 P3.3连接在一起?

    LED 会告诉您什么? 如果您在调试器中暂停、程序在哪里执行?

    ----------------------------

    >   MAP_UART_clearInterruptFlag (EUSCI_A2_base、status);

     我建议您不要这样做。 receiveData 将为您清除 RXIFG (原子)、clearInterruptFlag 会引入一个可导致 Tx 端停止的争用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我将 P3.2和 P3.3连接在一起以实现环回。

    它解决了我的问题。

    非常感谢。