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/MSP430F5529:UART 反向通道 driverlib 问题

Guru**** 2589280 points
Other Parts Discussed in Thread: MSP430F5438A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/873494/ccs-msp430f5529-uart-backchannel-driverlib-problem

器件型号:MSP430F5529
主题中讨论的其他器件:MSP430F5438A

工具/软件:Code Composer Studio

大家好、我对 MSP430微控制器非常陌生。 现在、我发现很难使用 MSP430 driverlib 运行 USCI uartA1反向通道来回显字符。 这是我从示例代码中获取的代码、并对使用 UART 反向通道进行了细微更改。 希望我可以解决这个问题。 我认为我做的一切都正确、请告诉我哪里出错了。

/*-版权所有-、BSD
 *版权所有(c) 2017、德州仪器(TI)公司
 *保留所有权利。
 *
 *以源代码和二进制形式重新分发和使用、有无
 *如果满足以下条件、则允许进行修改
 符合*:
 *
 ** 源代码的重新分发必须保留上述版权
 *   注意、此条件列表和以下免责声明。
 *
 * *二进制形式的再发行必须复制上述版权
 *   请注意、中的此条件列表和以下免责声明
 *   随分发提供的文档和/或其他材料。
 *
 * *德州仪器公司的名称和名称均不相同
 *   其贡献者可用于认可或推广衍生产品
 *   未经特定的事先书面许可。
 *
 *本软件由版权所有者和贡献者"按原样"提供
 *以及任何明示或暗示的保证、包括但不限于:
 *特定适销性和适用性的隐含保证
 *不承认目的。 在任何情况下、版权所有者不得或
 *派遣国应对任何直接、间接、偶然、特殊、
 *典型或必然的损害(包括但不限于
 *采购替代货物或服务;丧失使用、数据或利润;
 *或业务中断)、无论原因是什么以及任何责任理论、
 *无论是合同、严格责任还是侵权行为(包括疏忽或)
 *否则)因使用本软件而以任何方式产生、
 *即使被告知可能会发生此类损坏。
 *--/版权--*/
//
//! 此示例展示了如何将 UART 模块配置为环回
//! 验证接收到的数据是否已发送。
//!
//!               MSP430F5438A
//!             --------
//!       RST -|    P3.4/UCA0TXD|---|
//!            |                |   ||
//!            |                |   ||
//!            |    P3.5/UCA0RXD|---|
//!            |                |
//!
//!
//! 此示例使用以下外设和 I/O 信号。  您必须执行的操作
//! 查看这些内容并根据您自己的董事会的需要进行更改:
//! UART 外设
//! - GPIO 端口外设(用于 UART 引脚)
//! UCA0TXD
//! UCA0RXD
//!
//! 此示例使用以下中断处理程序。  来使用该示例
//! 在您自己的应用程序中、您必须将这些中断处理程序添加到
//! 矢量表。
//! - USCI_A0_Vector。
//
#include "driverlib.h"

//
//
//选择波特率
//
//
#define BAUD_RATE                              9600
//
//
//初始化接收到的数据
//
//
uint8_t receivedData = 0x00;
//
//
//初始化传输数据
//
//
uint8_t transmitData = 0x00;

uint8_t check = 0;

void main (void)

   //停止 WDT
   WDT_A_HOLD (WDT_A_base);

   //P3.4、5 = USCI_A0 TXD/RXD
   GPIO_setPeripheralModuleFunctionInputPin (
       GPIO_PORT_P4、
       GPIO_PIN4 + GPIO_PIN5
       );

   //波特率= 9600、时钟频率= 1.048MHz
   //UCBRx = 109、UCBRFx = 0、UCBRSx = 2、UCOS16 = 0
   USCI_A_UART_initParam param ={0};
   param.selectClockSource = USCI_A_UART_CLOCKSOURCE_SMCLK;
   param.clockPrescalar = 109;
   param.firstModReg = 0;
   param.secondModReg = 2;
   param.parity = USCI_A_uart_no_parity;
   param.msborLsbFirst = USCI_A_UART_LSB_FIRST;
   param.numerofStopBits = USCI_A_UART_One_STOP_BIT;
   param.uartMode = USCI_A_UART_MODE;
   param.oversaming= USCI_A_UART_LOW_FREQUENCY BAUDRATE_generation;

   if (STATUS_FAIL = USCI_A_UART_init (USCI_A1_BASE、&param)){
       返回;
   }

   //启用 UART 模块以进行操作
   USCI_A_UART_ENABLE (USCI_A1_BASE);

   //启用接收中断
     USCI_A_UART_clearInterrupt (USCI_A1_base、
       USCI_A_UART_receive_interrupt);
   USCI_A_UART_enableInterrupt (USCI_A1_BASE、
       USCI_A_UART_receive_interrupt);

   _enable_interrupt ();

   while (1)
   {
       transmitData = transmitData+1;                     //增加 TX 数据
       //将数据加载到缓冲区中
       USCI_A_UART_transmitData (USCI_A1_base、
               传输数据);
       while (check!= 1);
       CHECK = 0;
   }


//
//
//这是 USCI_A0中断矢量处理例程。
//
//
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCI_A1_BASE
_interrupt
#Elif defined (_GNU_)
__attribute__((中断(USCI_A1_base))
#endif
空 USCI_A1_ISR (空)

   开关(_偶数_IN_RANGE (UCA1IV、4)){
       //Vector 2 - RXIFG
       案例2:

           接收数据= USCI_A_UART_receiveData (USCI_A1_BASE);
           if (!(receivedData = transmitData))                  //检查值
           {
             while (1);
           }
           支票=1;
           中断;
       默认值:break;
   }



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

    > #pragma vector=USCI_A1_BASE

    应该是这样

    > #pragma vector=USCI_A1_vector

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

    您如何对此进行测试? 我问、反向通道 UART 通常用于通过 USB 与主机(PC)进行通信、但该示例旨在用于"本地环回"、RXD 和 TXD 引脚("桥接"接头、MCU 侧)相互连接。 如果你在做这个、你就好了。

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

    否、我正在尝试使用反向通道 UART。 请指导我更改此程序的工作方式、如反向通道 UART。 我已将 UART 引脚更改为 P4.4和 P4.5。 是否需要其他更改?

    我需要使用代码通过背面板 UART 将传感器数据发送到 PC。抱歉、我不熟悉 MSP430控制器。

    提前感谢。

    此致

    Vishak A

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

    嗯。 似乎他们忘记在 DriverLib "USCI_A_UART"示例套件中包含"回显"示例。 (这通常是寄存器级别集中的"UART_01.c"。)

    我想您可以通过以下方式将其更改为"回波"程序:

    1) 1)将 main 中的 while (1)循环内容(保留循环本身)替换 为 Just

    > LPM0;  //睡眠(永远、因为 ISR 不会唤醒我们)

    2) 2)将 ISR 中的"if ()"语句(全部)替换为

    > USCI_A_UART_transmitData (USCI_A1_base、  receivedData); //回显字节返回主机 PC

    此时、您应该能够在 PC 上的终端仿真器中键入内容、并看到它回传给您。 一旦您看到它在做什么、您就可以将它重新调整为您真正想要的程序。

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

    非常感谢。 它工作正常。