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.

[参考译文] MSP430F5528:USBHAL_initClocks ()未正确配置 ACLK

Guru**** 2484615 points
Other Parts Discussed in Thread: MSP430F5528

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1230138/msp430f5528-usbhal_initclocks-does-not-properly-configure-aclk

器件型号:MSP430F5528

您好!

我们使用 MSP-TS430RGC64USB + MSP430F5528进行开发。 根据下面的源代码进行设置、并且 SMCLK 频率被设定。

---------------- main.C 摘录-------------------------------------------------------
USBHAL_initClocks (8000000);//配置时钟。 MCLK=SMCLK=FLL=8MHz;ACLK=REFO=32kHz
-------------------------------------------------------

尽管 SMCLK 在此处设置为8MHz 和9600bps、但设置结果为19200BPS。
如下所示、当 SMCLK 信号输出到 P2.2并进行测量时、结果变为16MHz、因此 DCO 设置似乎不正确

--------
GPIO_setASDPeripheralModuleFunctionInputPin (GPIO_PORT_P2、GPIO_PIN2);
P2DIR |= BIT2;
--------

在 E2E 上研究之后、我发现了以下主题。
https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/639779/ccs-msp430f5528-usb-and-uart?tisearch=e2e-sitesearch&keymatch=USBHAL_initClocks

问题1: 认为 USBHAL_initClocks()无法正常设置 ACLCK 是正确的吗? 在该函数中设置哪个时钟?

问题2. 要使用 ACLCK 以9600bps 波特率进行通信,应更改哪个设置 ?

谢谢。

Conor

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

    尊敬的 Conor:

    您是否看过 USB 转 UART 桥接器示例

    在 UART 初始化中、您需要设置

    void UartInit(void)
    {
            UCA0CTL1 |= UCSWRST;                      // **Put state machine in reset**
            UCA0CTL1 |= UCSSEL_1;                     // CLK = ACLK
            UCA0BR0 = 0x03;                           // 32kHz/9600=3.41 (see User's Guide)
            UCA0BR1 = 0x00;                           //
            UCA0MCTL = UCBRS_3+UCBRF_0;               // Modulation UCBRSx=3, UCBRFx=0
            UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
            UCA0IE |= UCRXIE;                           // Enable USCI_A1 RX interrupt
            __enable_interrupt();                        // Enable interrupts globally
    }

    提供了 带有 ACLK 和9600的 UART 的示例代码

    此致、

    Luke

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

    您好、 Luke

    我想回答关于在 USBHAL_initClocks ()中设置 DCO 系统时钟的问题。
    时钟设置模块的参数设置为8MHz、但假设实际的 MCLK 和 SMCLK 设置为16MHz 是否正确?

    ACLK 使用32KHz 晶振并用于串行通信(2400bps)、因此没有问题。
    MCLK 和 SMCLK 需要能够正确操作。 使用高速通信(调试模式19200bps、C2Prog 115.2Kbps)。

    我们还考虑使用 SPI 等 driverLIB、但是否会有任何不利影响?

    谢谢。

    Conor

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

    尊敬的 Conor:

    我从 UART 中的24MHz 切换到 USB 桥接器示例中的8MHz、发现时钟频率为16MHz。 如果转到 USBHAL_initClocks 函数、并将第一个选项分频器更改为2、它将获得正确的8MHz。

    下面是我使用的更改。

    void USBHAL_initClocks(uint32_t mclkFreq)
    {
    	UCS_initClockSignal(
    	   UCS_FLLREF,
    	   UCS_DCOCLK_SELECT,
    	   UCS_CLOCK_DIVIDER_2);
    
    	UCS_initClockSignal(
    	   UCS_ACLK,
    	   UCS_REFOCLK_SELECT,
    	   UCS_CLOCK_DIVIDER_1);
    
        UCS_initFLLSettle(
            mclkFreq/1000,
            mclkFreq/32768);
    
    }

    如果您愿意、可以完全规避这些函数、它们只是用于初始化时钟。  MSP430F55xx_UCS_02.c 是初始化时钟的另一种方法

    正确设置 SMCLK 后、您可以根据9600来配置 UART、SPI 也将正常运行。 只要 SPI 和 UART 使用不同的 USCI 端口、就不会与 SPI 产生冲突。

    此致、

    Luke