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.

[参考译文] MSP430F5659:UART 支持的波特率

Guru**** 2511985 points
Other Parts Discussed in Thread: MSP430F5659

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1076281/msp430f5659-uart-supported-baud-rates

部件号:MSP430F5659

我目前正在将 Code Composer 与嵌入式 MSP430F5659一起用于固件开发。 我的应用程序需要通过 UART (USCI A2)接口以115200波特率与主机可靠通信。

在这种波特率下,UART 会丢弃字符,且不会与主机保持同步。 我需要知道建议用于 USCI A2 UART 的可靠波特率是什么,以及在8个数据位,无奇偶校验,1个停止位为该波特率设置参数和相关控制寄存器是什么。

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

    您的时钟频率是多少?

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

    感谢您的快速响应。 时钟频率为  1.048 MHz。

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

    使用计算器计算参数。 全速(MCLK 24 MHz) UART 的 F5xx 可高达6 Mbps。 115200应该是1 MHz MCLK 的问题。

    e2e.ti.com/.../1122.MSP430UartCalc.zip

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

    您还必须确定是 UART 漏掉字符还是软件。在1 MHz 时,您没有太多时间对字符作出响应。

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

    有可能。 因此,我想对 UART 进行编程,以获得较慢的波特率,但我不确定应该设置哪些参数和寄存器,以获得9600和9200波特率的值。  

    以下代码对11520,5760,38400波特率起作用,为 UCA2BRW 设置了正确的值。 但是,它不适用于9600和19200波特率:

    作废 SerialUART::SetupUART (作废)

    InfoAvail = 0;
    txoverflow =0;
    _DINT();
    UCA2CTL1 |= UCSWRST;//将 USCI_A2置于重置状态
    //注:对于 msp430f5x 系列,CTL 寄存器应以两个字节的形式访问。
    UCA2CTL0 = 0;// UART 模式(8,n,1,lsb)
    UCA2CTL1 = UCSSEL__SMCLK + UCRXEIE + UCBRKIE + UCSWRST;
    UCA2BRW = 9;//波特率= 115200 //对于1.048 MHz
    //UCA2BRW = 18;//波特率= 57600 //对于1.048 MHz
    //UCA2BRW =27;//波特率=38400 // 1.048 MHz
    //UCA2BRW = 3;//波特率= 19200 // 1.048 MHz
    //UCA2BRW = 6;//波特率= 9600 //对于1.048 MHz

    UCA2MCTL = 0x0002;//这适用于115200,57600,38400

    UCA2CTL1 &=~(UCSWRST);//将 USCI_A2置于运行状态
    UCA2IE |= UCTXIE + UCRXIE;//启用 TX-& RX-中断
    _EINT();
    }

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

    用户指南中有一个很长的章节,介绍如何设置波特率,包括建议的设置。 (表39-5)您似乎已将代码遗漏以设置调制器阶段,并对 UCOS16位的使用感到困惑。

    此外,TXIFG 在设备重置期间设置,因此您将在_EINT()处获得即时传输中断。

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

    感谢你的回复。 遗憾的是,表39-5中显示的寄存器与 Code Composer 提供的 msp430f5659.h 中的定义不匹配。

    以下寄存器可从报头文件中获得,我需要知道其中哪一个寄存器应设置为支持9600和19200波特率的值:

    /******************************
    * USCI A2
    《国家安全与发展报告》 /
    #define __MSP4_SHA_USCI_A2__/*定义,显示模块可用*/
    #define __MSP4A_BASEADDRESS_USCI_A2__ 0x0640
    #define USCI_A2_BASE __MSP4P_BASEADDRESS_USI_A2

    SFR_16BIT (UCA2CTLW0);/* USCI A2控制字寄存器0 */
    SFR_8位(UCA2CTLW0_L);/* USCI A2控制字寄存器0 */
    SFR_8位(UCA2CTLW0_H);/* USCI A2控制字寄存器0 */
    #define UCA2A@CTL1 UCA2CTLW0_L /* USCI A2控制寄存器1 */
    #define UCA2CTL0 UCA2CTLW0_H /* USCI A2控制寄存器0 */
    SFR_16BIT (UCA2BRW);/* USCI A2波特率0 */
    SFR_8位(UCA2BRW_L);/* USCI A2波特率0 */
    SFR_8位(UCA2BRW_H);/* USCI A2波特率0 */
    #define UCA2BR0 UCA2BRW_L/* USCI A2波特率0 */
    #define UCA2BR1 UCA2BRW_H /* USCI A2波特率1 */
    SFR_8位(UCA2MCTL);/* USCI A2调制控制*/
    SFR_8位(UCA2STAT);/* USCI A2状态寄存器*/
    SFR_8位(UCA2RXBUF);/* USCI A2接收缓冲区*/
    SFR_8位(UCA2TXBUF);/* USCI A2传输缓冲区*/
    SFR_8位(UCA2ABCTL);/* USCI A2 LIN 控制*/
    SFR_16BIT (UCA2IRCTL);/* USCI A2 IrDA 传输控制*/
    SFR_8位(UCA2IRCTL_L);/* USCI A2 IrDA 传输控制*/
    SFR_8位(UCA2IRCTL_H);/* USCI A2 IrDA 传输控制*/
    #define UCA2IRTCTL UCA2IRCTL_L /* USCI A2 IrDA 传输控制*/
    #define UCA2IRRCTL UCA2IRCTL_H /* USCI A2 IrDA 接收控制*/
    SFR_16BIT (UCA2ICTL);/* USCI A2中断启用寄存器*/
    SFR_8位(UCA2ICTL_L);/* USCI A2中断启用寄存器*/
    SFR_8位(UCA2ICTL_H);/* USCI A2中断启用寄存器*/
    #define UCA2IE UCA2ICTL_L /* USCI A2中断启用寄存器*/
    #define UCA2IFG UCA2ICTL_H /* USCI A2中断标志寄存器*/
    SFR_16BIT (UCA2IV);/* USCI A2中断向量寄存器*/

    在115200,57600和38400上工作前显示的代码样本 I 提供了与  UCA2BRW 一起使用的正确值。 但是,它在19200和9600中不起作用。  

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

    表39-5中的字段不是寄存器,而是寄存器中的字段。 查看用户指南中的寄存器定义。 向下扫描标题,使其定义 MCTL 字段的值。

    当然,这不奏效。 您没有设置调制值,而是对需要设置 UCOS16的较低速率使用了 BRW 值。 因为这是在 lsb 中,所以在该寄存器中写入2不会剪切它。

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

    我现在看到了,我也可以看到,表36.4中显示了频率1.048 MHz 的正确值。 非常感谢你的帮助。

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

    感谢您的确认。 使用您的 UART 计算器非常有效,我可以使用计算器生成的代码,以 更低的波特率为我提供支持。 再次感谢你的帮助。