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.

[参考译文] CCS/TM4C123GH6PM:UART 时钟出现问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/588905/ccs-tm4c123gh6pm-issue-with-the-uart-clock

器件型号:TM4C123GH6PM
主题中讨论的其他器件:TM4C123EK-TM4C123GXL

工具/软件:Code Composer Studio

您好!

  再次感谢所有的人。在我的上一篇文章中,我对 UART 中的数据包发送有疑问,现在很清楚,但我面临另一个问题。假设如果我增加系统时钟,数据包不能通过 UART 正确传输。  

SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);   //现在时钟为16MHz

UARTConfigSetExpClk (UART0_BASE、SysCtlClockGet ()、115200、(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));  // UART 也具有16MHz

在这些 UART 中工作正常,数据包也正常发送,但是

SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_25MHz);     //现在时钟为25MHz

UARTConfigSetExpClk (UART0_BASE、SysCtlClockGet ()、115200、 (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));  

在这种情况下、我遇到了一个问题、我的数据正在丢失、在输出端没有得到正确的数据包。有人能帮助我解决这些问题。只有在16MHz 时、如果增加时钟不起作用、它才正常工作。

SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_25MHz);     //现在时钟为25MHz

UARTConfigSetExpClk (UART0_BASE、16000000、115200、 (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); //如果我以这些方式使其正常工作。

帮助我解决这些问题。

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

    对 SysCtlClockSet()的调用显示   了在试图更改时钟频率时使用的 SYSCTL_XTAL_16MHz 或 SYSCTL_XTAL_25MHz。 这是不正确的。  SYSCTL_XTAL_*选项需要指定连接到 TM4C123振荡器的实际晶体频率。 对于 EK-TM4C123GXL 、应将其固定为 SYSCTL_XTAL_16MHz。

    如果 使用了 SYSCTL_XTAL_25MHz 选项、但实际晶振频率为16MHz、则实际时钟频率将与 SysCtlClockGet ()返回的时钟频率不同、这意味着以下形式的行将设置不正确的波特率:

    UARTConfigSetExpClk (UART0_BASE、SysCtlClockGet ()、115200、(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); 

     SYSCTL_SYSDIV_*选项可用于根据 TM4C123GH6PM 数据表中显示的有效组合来更改时钟频率。

    例如、80MHz 是可使用的最高时钟频率:

    //
    //将时钟设置为源自 PLL 和外部振荡器的40MHz
    //
    SysCtlClockSet (SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);
    
    //
    //将 PLL 和外部振荡器的时钟设置为66.67MHz
    //
    SysCtlClockSet (SYSCTL_SYSDIV_3 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);
    
    //
    //将时钟设置为源自 PLL 和外部振荡器的80MHz
    //
    SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);