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/MSP430F5342:UART 接收不能#39;不再工作

Guru**** 2551110 points
Other Parts Discussed in Thread: MSP430F5342, MSP430I2021, MSP430I2040

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/719284/ccs-msp430f5342-uart-receive-doesn-t-work-anymore

器件型号:MSP430F5342
主题中讨论的其他器件: MSP430I2021MSP430I2040

工具/软件:Code Composer Studio

我在一组电路板上使用 MSP430F5342芯片、并且之前编写了包含 UART 通信的代码。 电路板将通过 UART 从我的计算机接收命令、这将指示电路板开始将传感器数据发送回计算机。 我已经测试了代码、它运行得很好。 然后、我重新排列了一些代码、并以不同的名称保存了项目。 我一个月左右没有触摸板。

当我最近下载代码时、我注意到 UART 通信不再触发。 修改代码以跳过 UART 接收检查并直接跳转到发送中后、我注意到电路板的发送工作正常。 然后、我将代码恢复为以前确认工作正常的版本、接收仍然无法正常工作。 然后、我尝试了简单 UART 回显的示例代码(发布在下面)、但仍然无法正常工作。

我已经使用两个不同的 FET 编程器和 FTDI 线缆在4个不同的电路板上测试了这些代码版本。 我还检查了电缆的导通性、因此我很确定这不是硬件问题。 我想知道什么可能会阻止 UART 接收功能的正常运行。 我已经尝试调试代码和设置断点、并单步执行代码/监控寄存器、但 RX 缓冲区和标志永远不会注册任何数据。

我在 MSP430i2021电路板未正常工作之前遇到了问题、结果我需要包含 low_level_init.c 来执行_system_pre_init 函数。 但是、在 F5342的示例代码中、我没有看到任何类似这样的其他文件。 我想知道是否有任何代码可用于复位阻止 UART 正常工作的任何代码。 非常感谢您的任何建议!

谢谢、

John

#include 

int main (void)
{
WDTCTL = WDTPW + WDTHOLD; //停止 WDT

P3SEL |= BIT3+BIT4; // P3.3、4 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; //**将状态机复位**
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 9; // 1MHz 115200 (请参阅用户指南)
UCA0BR1 = 0; // 1MHz 115200
UCA0MCTL |= UCBRS_1 + UCBRF_0; //调制 UCBRSx=1、UCBRFx=0
UCA0CTL1 &=~Ω UCSWRST; //**初始化 USCI 状态机**
UCA0IE |= UCRXIE; //启用 USCI_A0 RX 中断

__bis_SR_register (LPM0_bits + GIE); //输入 LPM0,启用中断
_no_operation (); //对于调试
器}

//回显 RXed 字符,确认 TX 缓冲区已准备就绪#if
defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCI_A0_vector
__interrupt void USCI_A0_ISR (void)
#Elif defined (__GNC_ISR_)(
void

)#USCI_A0 (void)(void USCI_0_A0)(void)(void)(void)#USCI_ISR (void)
#endif
{
switch (__even_in_range (UCA0IV、4))
{
case 0:break; //向量0 -无中断
情况2: //向量2 - RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX 缓冲器就绪?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed 字符
中断;
案例4:中断; //向量4 - TXIFG
默认值:break;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从该引脚读取 GPIO 是否仍然有效?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否、将 RX 引脚用作 GPIO 输入或输出不起作用。 TX 引脚的工作方式与预期的相同。

    有什么想法吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这听起来就好像引脚已被炸(ESD 或过载)一样。 我想您必须更换此芯片。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    John、

    您能否为此器件加载典型的 Blinky 示例(它会切换 P1.0)并将其更改为相关引脚、然后查看其是否正确切换? 如果没有、那么我同意 Clemen 的说法、即您的引脚可能会受到 ESD 损坏。 如果可以、我将向您推荐以下用于调试 UART 通信的应用手册。

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

    我可以尝试您提到的切换代码、但我已经尝试了一个非常简单的脚本、将引脚设置为输入或输出(高电平和低电平)、但它不起作用。 我唯一怀疑该引脚已损坏的原因是该板的其他几个副本上发生了同样的活动。 这些电路板已经在具有不同 FTDI 线缆和 FET 编程器的不同计算机上进行了测试、而不是我在这里提到的电路板上测试的电路板。

    感谢您向我介绍这些 UART 说明、我将详细介绍这些说明。 但是、正如我之前提到过的、恢复到正常运行的代码并不能解决问题、所以我想知道是否存在一些 PRE_INIT 基础问题或需要运行以复位电路板的问题。

    谢谢

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

    标准代码示例将处理可能存在的任何 pre_init 问题、因为它们是独立项目。 通常情况下、pre_init 不会出现问题、因为它不会出现问题。 模块运行通常与 PRE_INIT 无关、因为它与时钟设置和模块寄存器初始化有关。

    另一个需要注意的问题是对原理图、芯片引脚排列和与电路板的物理连接进行交叉检查。 它是一个很好的完整性检查来确保所有东西都正确连接。 还请记住、UART 连接跨越器件。 MSP430 UART TX ->外部器件 UART RX 和 MSP430 UART RX <-外部器件 UART TX。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    MSP430F534x 代码示例似乎只是隔离的 c 文件。 除非我错误地访问它们、否则看起来没有与它们关联的工程、因此我只是创建了针对此芯片的新工程、并将 main.c 替换为示例的关联 c 文件内容。 我是否应该访问实际的整个项目? 此外、这些示例没有我之前在 MSP430i2021中看到的_low_level_init。 不过、您提到的 PRE_INIT 是合理的、因为我之前在 MPS430i2021中看到的问题涉及 DCO 计时不正确。

    感谢您的指示、但引脚分配是键控 JST 连接器、只能以一种方式插入、我确保了连接已交叉(RX->TX 等)。 我知道这个引脚听起来可能是油炸的、但我发现很难相信这种情况突然发生在两组分离的电路板上、唯一的链接是经过测试的代码。 UART 之前工作正常、没有接线变化。 这些引脚也只连接到 JST 连接器-电路板上没有其他任何器件、因此、代码可能会打开其他器件、从而使该引脚或其他器件发生故障。 似乎破坏一切的修改后的代码本质上是旧的工作代码、其中一些项目刚刚移动、项目保存在不同的名称下。

    谢谢

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

    您所谈论的 low_level_init 对于 MSP430i2040系列器件而言是一个特殊的选项。

    对于代码示例、在 CCS 中导入这些示例将使用代码示例创建一个新项目。 否则、您将需要创建一个空白项目并使用代码示例替换 main。 如果这些代码示例不能正常工作、则很可能出现硬件问题。