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.

[参考译文] 无法在 evm430-fr6043上设置高于115200的波特率

Guru**** 2392905 points
Other Parts Discussed in Thread: MSP430FR6043, MSP430FG6626, EVM430-FR6043

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1247790/trouble-setting-higher-baud-rates-than-115200-on-evm430-fr6043

主题中讨论的其他器件:MSP430FG6626MSP430WAREEVM430-FR6043、MSP430FR6043

我有以下代码来设置 EVM-fr6043的时钟和波特率:

//配置 CS 模块
//通过 DCOCLK 使 MCLK = 16MHz
// SMCLK = 8MHz 来自 DCOCLK
// ACLK = LFXTCLK 应具有32.768KHz
//解锁 CS 寄存器
CSCTL0_H = CSKEY >> 8;
//将 DCO 设置为8MHz
CSCTL1 = DCORSEL | DCOFSEL_3;
//配置时钟分频器所有分频器
CSCTL3 =(DIVA__1 | DIVS__1 | DIVM__1);
//设置 SMCLK=MCLK=DCO、ACLK=LFXTCLK
CSCTL2 = SELM__LFXTCLK | SELS__DCOCLK | SELM__DCOCLK;
CSCTL4 |=(LFXTDRIVE_3);
CSCTL4 &=~(LFXTOFF);
CSCTL0_H = 0;

// UART 模式的 GPIO 配置
P1SEL0 |=(BIT2 | BIT3);
P1SEL1 &=~(BIT2 | BIT3);


//针对 UART 模式配置 USCI_A0,8位数据,1个停止位
//将 eUSCI 置于复位状态
UCA1CTLW0 = UCSWRST;
// CLK = SMCLK
UCA1CTLW0 |= UCSSEL__SMCLK;

//对于 BRCLK=SMCLK=8MHz、并且波特率=230400 (参见 UG)
UCA1BRW = 2;
UCA1MCTLW = 0xbb21;

//从复位中释放
UCA1CTLW0 &=~μ H UCSWRST;

//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~μ A LOCKLPM5;

//将字符串打印到 UART 的函数


OUTC (特性)
{
        while (!(UCA1IFG 和 UCTXIFG))
         ;
        UCA1TXBUF =通道;


outs(const char *str)
{
   用于(;* str;str++)
       outc(*str);

我尝试使用高于115200的波特率、在上例中为230400。

 UCA1BRW 和 UCA1MCTLW 值取自数据表 slau367p.pdf (https://www.ti.com/lit/ug/slau367p/slau367p.pdf)。

使用 outs()函数,我可以使用数据表中的值打印115200和以下的字符串,但如果我尝试使用230400或460800,控制台会将打印的字符显示为其他一些字符。

如果需要高于 115200波特率、是否应该设置任何其他设置?

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

    您好!  

     您能在表30-5中尝试更多组合吗?

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

    我尝试将表中的值与

    UCA1BRW = 2;
    UCA1MCTLW =(0xbb<<8 | 2<<4)| 1;

    对于8MHz (230400波特率)、仍然会出现错误。

    我玩过 SMCLK 分频器、试图除以2或4、然后使用表、我仍然得到垃圾字符。

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

    如果除了尝试所有值之外表中的任何值都不起作用、是否有系统方法可以算出这些值?  

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

    在该表中、当您尝试使用较高的速度值时、Tx 误差和 Rx 误差将更大。 那么、您可以尝试使用两个 LaunchPad 进行测试吗?  

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

    我还有另一个板 msp430fg6626、使用数据表 https://www.ti.com/lit/ug/slau208q/slau208q.pdf 提供的表格、我遇到了与此板相同的问题、因为任何超过115200的波特率都会在 TeraTerm / PuTTy 中产生垃圾输出。

    是否有任何自包含并将波特率设置为>115200的适合大家尝试的完整示例代码? 根据此问题在不同电路板上的重现性、我认为我缺少一些设置。 我看了一下 MSP430Ware 提供的示例、所有示例都将其设置为115200或9600。

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

    好的、我将测试电路板并很快给您回复。

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

    我认为您的配置是可以的。 我在 evm430-fr6043上使用示例代码(msp430fr6043_euscia0_uart_01.c)进行了测试 。

    我可以检测到 UART 信号、但数据错误。  Tx 错误和 Rx 错误似乎会导致高速通信中的数据错误。

    您也可以参考许多类似主题、如 MSP-EXP430FR5994:设置 UART 波特率- MSP 低功耗微控制器论坛- MSP 低功耗微控制器- TI E2E 支持论坛

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

    从该线程来看、限制似乎是 EZFET? (这是有道理的、因为我们从 EZFET 器件进行打印)

    那么、为了消除该限制、我们需要通过另一个连接来连接到 UART?

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

    是的、也许你可以尝试将 UART TX 与 RX 连接起来以形成环路。  

    您还可以使用逻辑分析仪捕捉波形以查看其是否正常。