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.

[参考译文] TM4C1290NCPDT:主时钟运行速度似乎慢25%。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1339660/tm4c1290ncpdt-main-clock-seems-to-be-running-25-slow

器件型号:TM4C1290NCPDT
主题中讨论的其他器件:TPS2052

大家好!

TivaWare 2.1.4.178

我有一个20MHz 晶振、想要在20MHz 上运行主系统时钟、但运行速度似乎慢~25%: 要得到一个10ms SysTick、我需要将时钟频率除以100、但我必须将其除以125; 要让 UART 以9600波特运行、我必须将其设置为以12,000波特运行。  我使用以下函数来设置时钟:

   clockspeed = SysCtlClockFreqSet (SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_20MHz、20000000);  // 20MHz

   UARTConfigSetExpClk (UART0_BASE、GetClkSpeed ()、12000、
           (uart_config_WLEN_8 | uart_config_stop_one | uart_config_par_none);

   SysTickPeriodSet (GetClkSpeed ()/125);   //每10ms 中断一次。 (将 NS 转换为 MS)、保持

晶体确实是一个20MHz 单元、 我希望时钟速度的设置有误。

谢谢

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

    尊敬的 Doug:

     首先、ClockSpeed 变量返回什么? 是200000吗?

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

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

    有几个问题:

    -你能测量你的 MOSC? 是真的20Mhz 吗?

    - UARTIBRD 和 UARTFBRD 寄存器显示什么?

    -你的函数  GetClkSpeed()返回什么?

    -为什么您把 GetClkSpeed()传递给 UARTConfigSetExpClk()  ,而不是  您说等于20000000的 ClockSpeed?

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

    是的、振荡器在19.9999MHz 上运行

    IBRD = 104、FBRD = 11

    //---------------
    // 初始化全局 CPU 配置 |
    //---------------------------------------------------------------------------------------------------------------
    // 实际时钟速度和硬件版本
    //
       静态 u32 ClockSpeed;
       静态 u8 硬件版本;
    //
    //---------------------------------------------------------------------------------------------------------------
    // 获取时钟速度和硬件版本

    u32 GetClkSpeed(void) { return(ClockSpeed);}

    U8 GetHwVersion(void){ return(HardwareVersion);}

    //---------------------------------------------------------------------------------------------------------------
    // 我们将在20MHz 处运行时钟,以便闪存中没有等待状态,从而降低功耗。

    void Init_CPU (void){


       //***注意***保持此处设置的时钟速率与 common.h 中的 CPU_CLK_SPEED 同步

       clockspeed = SysCtlClockFreqSet (SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_20MHz、20000000);  // 20MHz

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

    我尝试启用 DIVSCLK 输出来查看时钟速度、但引脚处于高电平。  下面是我的代码:

    GPIOPinTypeDIVSCLK (GPIO_PORTG_BASE、PG_AccSDO_bit);    //*测试*
    SysCtlClockOutConfig (SYSCTL_CLKOUT_EN | SYSCTL_CLKOUT_MOSC、2);

    AccSDO_BIT 是端口 G4。

    为了使它正常工作、我还需要做其他什么吗?

    谢谢、Doug

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

    您好!

    Unknown 说:
    UARTConfigSetExpClk (UART0_BASE、GetClkSpeed ()、12000、
               (uart_CONFIG_WLEN_8 | uart_CONFIG_STOP_ONE | uart_CONFIG_PAR_NONE);[/报价]

     您选择了12000波特率。 这不是我看到的标准 UART 波特率。 下面我展示了通过两个串行终端实用程序支持的典型波特率。 最接近12000的一个是14400或9600。 您可以尝试一下支持的波特率、如115200或其他。 你看到同样的问题吗?  

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

    是的、我知道12000不是标准波特率、但正如我之前所说的、如果我将它设置为9600、那么字符的速度太慢了25%、并且不起作用。  我将其设置为12000、然后实际数据流是9600波特。  我要说的问题是进入 UART 和 SysTick 的时钟速度太慢了25%。

    谢谢、Doug

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

    除此之外、我发现如果 Vdd 是3.1伏、VddA 是3.3伏、SysTick 不工作后、我检查过、目前 Vdd 是3.288伏、VDDA 是3.308伏、因此我怀疑它是否会导致这个问题。

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

    尊敬的 Doug:

     您能尝试一下吗? 它有什么不同?

    g_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_20MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL
    )、20000000);

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

    可以使用!

    谢谢

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

    您是否能够使 DIVSCLK 输出高电平以外的任何值? 如果是、您做了什么? 我一直无法让它正常工作。  谢谢。

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

    不可以、但我有一个错误的3.3伏电源、它拧紧了 CPU 并导致它发生许多怪异的事情、所以我不知道我的故障是软件设置不正确还是电源损坏。

    抱歉。

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

    您是否能够使 DIVSCLK 输出除高之外的任何内容? 如果是、您做了什么? 我从未能够做到这一点。

    您能尝试以下 示例代码吗?  

    MAP_GPIOPinConfigure (GPIO_PQ4_DIVSCLK);
    GPIODIRModeSet (GPIO_PORTQ_BASE、GPIO_PIN_4、GPIO_DIR_MODE_HW);
    GPIOPadConfigSet (GPIO_PORTQ_BASE、GPIO_PIN_4、GPIO_strength_2mA、GPIO_PIN_TYPE_STD);
    SysCtlClockOutConfig (SYSCTL_CLKOUT_EN | SYSCTL_CLKOUT_SYSCLK、10);

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

    请勿打扰。 谢谢。

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

    这不奏效。 我之前在这里看到过这一点:

    e2e.ti.com/.../1971027

    在 ek-tm4c1294exl PQ4上连接到配电开关(tps2052)并在过流时被拉低是否正常? 该引脚意味着如何输出时钟?  

    我缺少什么?

    编辑:好、我现在看到这个:

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/345762/tiva-c-series-tm4c1294-connected-launchpad

    我懂了。