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.

[参考译文] MSP430F2370:UART 通信问题

Guru**** 2386620 points
Other Parts Discussed in Thread: TRF7970A, MSP430F2370
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/816654/msp430f2370-uart-communication-problem

器件型号:MSP430F2370
主题中讨论的其他器件:TRF7970A

您好!

我有一个基于 MSP430F2370和 TRF7970A 的定制板。 TRF7970A 有一个13.56MHz 晶振并且 TRF7970A 的 SYS_CLK 被连接至 MSP430F2370的 XIN。

TRF7970A SYS_CLK 输出被配置为6.78MHz。

我正在尝试在 MSP430F2370和外部控制器之间设置 UART、但它无法正常工作。 下面是我的 MSP430F2370振荡器设置和 UART 设置代码。

void MCU_OscSel(){

BCSCTL1 |= XTS + XT2OFF;// ACLK = LFXT1 HF XTAL
BCSCTL3 |= LFXT1S1;// 3–16MHz 晶振或谐振器
// TRF796x sys_clk 引脚用作振荡器
//在 Trf797xInitialSettings()中将其设置为6.78MHz (=13.56MHz/2)
//打开外部振荡器
操作

IFG1 &=~OFIFG;//清除 OSCFault 标志
对于(II1 = 0xFF;II1 > 0;II1--)//设置标志的延时时间


} while ((IFG1 & OFIFG)=OFIFG);// OSCFault 标志仍然置1?

BCSCTL2 |= SELM1 + SELM0 + SELS;// MCLK = SMCLK = HF LFXT1 (安全)

void UART_setup (void)//使用 USCI_A0

P3SEL |= BIT4 + BIT5;// P3.4、P3.5 - UART 模式

P3DIR |= BIT4;// P3.4 -输出方向

UCA0CTL1 |= UCSWRST;//禁用 UART

UCA0CTL0 = 0x00;

UCA0CTL1 |= UCSSEL_2 + UCSWRST;//来自 SMCLK 的源,保持软件复位

UCA0BR0 = 0x3A;//波特率= 115200
UCA0BR1 = 0x00;

UCA0MCTL = 0;//UCBRS_2 + UCBRS0;//调制 UCBRSx = 2

UCA0CTL1 &=~UCSWRST;//初始化 USCI 状态机

IE2 |= UCA0RXIE;//启用 USCI_A0 RX 中断

此致、

Madhudhan

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

    大家好、Madhusudhan、

    在深入了解代码之前、请先了解 MSP430 MCU 上常见 eUSCI 和 USCI 串行通信问题解决方案第5页上的故障排除步骤

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

    "在评估通信问题时、应特别注意调试 UART 时遇到的以下最常见问题:

    ❏验证两个器件是否同意存在奇偶校验位和停止位的数量

    ❏实现所需波特率的工具:

    •请参阅目标器件系列用户指南中的常见波特率和设置表。

    •在线工具:波特率计算器❏当基于 UART 开发 IrDA 通信时、请参阅《使用 MSP430实现 IrDA》。

    ❏检查所有外设初始化、包括:

    •物理引脚选择(RX 和 TX 引脚)

    •通信寄存器设置

    •启用中断(本地和全局)

    ❏确保将一个器件的 RX 引脚连接到另一个器件的 TX 引脚、反向连接。

    ❏使用可用的工具(例如、IDE 调试器、 逻辑分析仪和示波器)来证明两端都符合 UART 软件协议。"

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

    您好、 Christopher、

    我已经完成了这一过程、看起来我已经完成了所有工作、但 UART 仍然无法正常工作。

    问题是、在数据传输中、我将获取垃圾数据、而不是原始数据。

    请检查上面的代码、并告诉我发生了什么错误。

    此致、

    Madhudhan

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

    大家好、Madhusudhan、

    很抱歉耽误你的答复。

    请尝试 此处提供的其中一个库存示例代码来实现 UART 、以便我们可以确定这是否是硬件/软件问题。

    Chris

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

    你好 ,Madhudhan

    您是否尝试过 Chris 建议您使用的示例代码? 有关您的问题的任何更新?

    此致

    Gary

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

    您好、Gary、

    我将 UART 用于 LIN 通信(TLIN1029)。 当我在 iso14443a.c 中检测到卡后尝试在 UART 中发送数据时、我在接收端收到垃圾数据。 但是、当我在调用 NFC_findTag()函数后尝试在 main.c 中发送 UART 数据时、如果我为我在 UART 中发送的每个字节提供至少1毫秒的延迟、那么数据也会正常运行。  

    对于(i=0;i<20;i++)

    UART_putChar (uartTxBuf[i]);
    MCU_delayMillisecond (1);

    此致、

    Madhudhan

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

    你好 ,Madhudhan

    此处提供一些意见:

    1.使用配置"BCSCTL3 |= LFXT1S_3;"

    2.在 P1.4上输出 SMCLK、检查频率是否为6.78MHz

    3. 为   UCA0BR0将一些值改变为0x3A 左右

    此致

    Gary