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.

[参考译文] MSP430FR5739:TXData 在具有 DriverLib 的 RealTerm 中显示"<"而不是"A&quot

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/943593/msp430fr5739-txdata-shows-a-instead-an-a-in-realterm-with-driverlib

器件型号:MSP430FR5739
主题中讨论的其他器件:MSP-EXP430FR5739

大家好! 我想实现一个在 RealTerm 上显示"A"的简单代码、我使用的代码为:  

#include "driverlib.h"

uint16_t i;
uint8_t RXData = 0、TXData = 0;
uint8_t check = 0;

void main (void)
{
//停止看门狗
WDT_A_HOLD (WDT_A_base);

// LFXT 设置
//将 PJ.4和 PJ.5设置为主模块功能输入。
/*

*选择端口 J
*将引脚4、5设置为输入主模块功能 LFXT。
*
GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_PJ、
GPIO_PIN4 + GPIO_PIN5、
GPIO_PRIMARY_MODULE_FUNCTION
);

//将 DCO 频率设置为1MHz
CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_0);
//set ACLK = VLO、分频器为1
CS_initClockSignal (CS_ACLK、CS_VLOCLK_select、CS_clock_divider);
//set SMCLK = DCO、分频器为1
CS_initClockSignal (CS_SMCLK、CS_DCOCLK_select、CS_Clock_divider);
//set MCLK = DCO、分频器为1
CS_initClockSignal (CS_MCLK、CS_DCOCLK_select、CS_Clock_divider);

//配置 UART 引脚 
//将 P2.0和 P2.1设置为辅助模块功能输入。 /* *选择端口2D *将引脚0、1设置为输入次级模块功能(UCA0TXD/UCA0SIMO、UCA0RXD/UCA0SOMI)。 * GPIO_setPeripheralModuleFunctionInputPin ( GPIO_PORT_P2、 GPIO_PIN0 + GPIO_PIN1、 GPIO_secondary 模块功能 ); //配置 UART EUSCI_A_UART_initParam param ={0}; param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_ACLK; param.clockPrescalar = 3; param.firstModReg = 0; param.secondModReg = 92; param.parity = EUSCI_A_UART_NO_parity; param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST; param.numerofStopBits = EUSCI_A_UART_Oe_STOP_BIT; param.uartMode = EUSCI_A_UART_MODE; param.oversaming= EUSCI_A_UART_LOW_FREQUENCY BAUDRATE_generation; if (STATUS_FAIL = EUSCI_A_UART_init (EUSCI_A0_BASE、&param)){ 返回; } EUSCI_A_UART_ENABLE (EUSCI_A0_BASE); EUSCI_A_UART_clearInterrupt (EUSCI_A0_BASE、 EUSCI_A_UART_receive_interrupt); //启用 USCI_A0 RX 中断 EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE、 EUSCI_A_UART_receive_interrupt); //启用中断 _enable_interrupt (); while (1) { TXData = 65; // TX 数据="a" //将数据加载到缓冲区中 EUSCI_A_UART_transmitData (EUSCI_A0_BASE、 TXData); // while (check!= 1); Check = 0; } } //******** // ////这是 USCI_A0中断矢量处理例程。 /////******** #if defined (TI_Compiler_version)|| Defined (IAR_systems_ICC) #pragma vector=USCI_A0_Vector __interrupt #Elif Defined (GNUC) attribute ((interrupt (USCI_A0_Vector))) #endif void EUSCI_A0_ISR (void) { switch (__even_in_range (USCI_UCA_UCI_UCI_Vector) }{UCA0USCI_UCTUSCI_UCI_UART)} USCI_NONE 案例:中断; USCI_UART_UCRXIFG 案例: RXData = EUSCI_A_UART_receiveData (EUSCI_A0_BASE); if (!(RXData = TXData)) //检查值 { while (1); } 支票=1; 中断; 案例 USCI_UART_UCTXIFG:中断; 案例 USCI_UART_UCSTTIFG:中断; 案例 USCI_UART_UCTXCPTIFG:break; } }

在 RealTerm 上、我看到了这一点... ("<"符号表示数字60为 ASCII)、如果您可以看到、我分配了 TXDATA=65。

我认为这是时钟配置上的错误、位我无法确定...  你怎么看?

如 Aalwayss... 谢谢!

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

    您有范围吗? 您的实际波特率是多少?

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

    是的、我有一个范围。 我的实际波特率为9600

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

    如果使用 VLOCLK/3获得9600 bps、这意味着 VLOCLK 以28.8kHz 的频率运行、我认为这超出了规格[参考数据表(SLAS639L)第5.15节]

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

    RealTerm 上的波特率似乎设置为57600。 尝试将其设置为9600

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

    是的、我尝试将波特率设置为9600、1200、2400、115200、并且没有发生任何情况、 只能看到<

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

    但我将端口 COM7配置为1200bps (在设备管理器和 Realterm 中)、情况也是如此。

    你推荐什么??

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

    是否需要使用 VLOCLK? 如果是这样、您将不得不测量它、因为没有人能够告诉您它的运行频率。

    1) 1)您可以尝试使用示波器测量 UART 信号。 如果您可以发布示波器跟踪、可能有人会看到一些内容。 我建议将0x55或0xAA 作为测试模式。 这将告诉您 VLOCLK 现在的运行速度。

    2) 2)您可以在代码中测量 VLOCLK (TB0.CCI2B 上的定时器捕捉)。 由于 VLOCLK 是如此可变、这将使您的距离超过(1)。  有一个应用手册(SLAA340)介绍了这一点、尽管它是为 F2系列设计的、代码需要一些 fidling。

    https://www.ti.com/lit/an/slaa340a/slaa340a.pdf

    3) 3) Launchpad 具有安装32kHz 晶体(LFXT)的站点、可为您提供非常可靠的低功耗 ACLK。

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

    Bruce!VLOCLK 不是一项要求、我没有安装晶体 LFXT、我使用 VLOCLK 是因为它是互联网上的某人使用的代码、我尝试使用示波器测量 UART 信号、我看到的就是这一点:

    我应该怎么做?

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

    UART 存在 VLOCLK 问题。 我建议您使用 SMCLK。 由于您已设置 DCOFSEL=0和 DCORSEL=0、它以5.33 MHz 运行、因此要获得9600bps、请使用5330000/9600 = 555、类似于。  

    param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
    param.clockPrescalar = 5330000UL/9600UL;// 5.33MHz 时为9600bps
    

    [参考用户指南(SLAU272D)表3-4]

    [编辑:删除了我读取图像上数字的尝试。 对我来说太多了。]

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

    我在我的代码上尝试了这行代码、这就是我获得的结果。  

    现在我在 RealTerm 上看到了"0"、在示波器上看到了一个方形信号(对我而言似乎可以、不可以吗?) 值为0x55。

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

    "A"是十进制的65。 我会期望这样的结果:(为了便于在起始位上触发、我输入了1ms 的延迟)

    我收到了以下消息:

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

    当我将您发布的代码放在 Launchpad (MSP-EXP430FR5739)上并进行两次更改(时钟和 TXChar 设置)时、我会在 PuTTY 上看到一串'U's、我的示波器显示为"9.62kHz"。

    您能更详细地描述一下您的连接吗?

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

    耶斯! 我决心了,谢谢!!