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.

[参考译文] MSP430F5310:波特率从4800更改为19200 -看到大量错误

Guru**** 2538930 points
Other Parts Discussed in Thread: MSP430F5310

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/714928/msp430f5310-baud-rate-change-from-4800-to-19200---seeing-high-amount-of-errors

器件型号:MSP430F5310

 我将 MSP430f5310器件上的 Modbus 波特率从4800更改为19200、并看到一些高于预期的 TX 误差-当计时器设置的最大 TX 误差预计为4.6%时、大约为9.5%、如下面的表36-5所示。  

这可能是器件的限制吗? 我可以做些什么来克服这种高误差率? 我是否可以通过测量来更准确地诊断我的问题?

辅助信息:我成功 地将器件设置为4800波特、而没有任何发送 或接收错误。 我在相对无噪声的环境中工作。 我正在使用 Code Composer Studio 编译 C 代码。 突出显示 的区域表示我为提高波特率所做的更改。

请提供建议。

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

     您好 Ian、

    从上表中可以看出、设置的总误差将是负侧和正侧的绝对值的相加。 因此、Tx 侧设置的总可能误差在 Rx 侧接近7.8%和9.7%。 这假设时钟源也没有引入误差(不太可能)。  

    如果您仍然想使用相同的 BRCLK 和波特率组合、但希望降低误差、那么我将关闭过采样并将过采样调整为表36-4中的设置、如下所示。 或者、您也可以将 BRCLK 频率调整为较高的值以减少误差。

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

    感谢您的回答。 我希望避免更改 BRCLK 频率、因为还有其他通信协议依赖于 BRCLK 频率。 因此、我尝试关闭过采样并根据表更改其他值。

    从130、000条消息的样本中、我仍然看到消息的错误率为6.7%。 我还能做些什么来降低误差率吗?

    下面是设置的一个片段:

    UCA0BRW = 54;
    UCA0MCTL = UCBRS_5 + UCBRF_0; 


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

    您将什么时钟源用于 USCI 模块? 这是额外误差的最可能来源。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用的是 TA0、设置如下:

    //编程定时器0捕捉0在上升沿和下降沿捕捉
    // SMCLK /8. 高达0xFFFF 定时器清零 TAIFG 中断禁用
    TA0CTL = 0x200 | 0xc0 | 0x20 | 0x4 | 0x0; //0x0E24
    
    // 电容上升+下降+输入 A 同步+电容 启用中断
    TA0CCTL0 = 0xc000 | 0x900 | 0x10; 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    UCB1看起来是一个开放时钟(不会影响芯片上的其它操作)。 它是否能够支持更高的时钟速率?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ian、

    我对如何使用计时器为 USCI 模块计时感到困惑。 唯一可用的 eUSCI 模块时钟是 ACLK、SMALCK 或一个使用 UCAxCLK 引脚馈入 USCI 模块的外部时钟。 您选择的值应反映在 UCAxCTL1寄存器和 UCSSELx 位中。 您要将哪个时钟馈送到 USCI 中? ALCK/SMCLK/外部? 驱动该时钟的源是什么?

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

    很抱歉、我看错了地方。 它基于 SMCLK

    P3SEL |= BIT3 | BIT4; // P3.3、4 = USCI_A0 TXD/RXD
    UCA0CTL1 |= UCSWRST; // A0 CTRL 寄存器被复位**将 UART 状态机置于复位状态**
    UCA0CTL1 |= UCSSEL_SMCLK; // A0 SMCLK (时钟源2) 

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

    SMCLK 的来源是什么? 如果是 DCO、则可能会通过 DCO 引入额外的误差。 您可以使用精密外部 xtal 来消除此误差、但最好更改波特率设置以实现更低的误差。

    另外、如果您在事务之间使用深度 LPM (例如 LPM3)、如果波特率太高、则由于第一个字节可能丢失、您的错误率将上升。