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.

[参考译文] TM4C1294NCPDT:UART 速度和波特率

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/565946/tm4c1294ncpdt-uart-speed-and-baud-rates

器件型号:TM4C1294NCPDT
Thread 中讨论的其他器件:EK-TM4C1294XLTM4C123

您好!

我尝试使用 LFIO 和 RTCOSC 作为 UART0的备用时钟源、但当我打开终端时、它不显示任何内容。 这是 UART 限制、或者我做了些什么错误?

此外、如果我为 UART 使用系统时钟、我可以实现的最小时钟为5MHz、低于该 UART 似乎不再工作。

我使用 PuTTY 和 CCS V7终端、通常为9600波特率、但有时我尝试使用其他选项。 此外、UART 处于缓冲模式。

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTCOSC (实时时钟)振荡器的使用(通常在32KHz 左右的频率下运行)并不因与 UART 一起使用而闻名。 您是如何做出这一决定的?

    采用供应商提供的简单代码示例之一(可在 API 中找到)是否有意义? 即使不完全符合您的目标-这将证明是"开始"-并使您能够在 PC 中确认 UART 设置。

    用户很少描述他们对 UART 的特定选择(MCU 有很多)、而"只有一个"是通过供应商的 ICDI 实现的 USB 兼容(UART_0)-假设您使用的是工厂提供的包含第二个 MCU 的电路板。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    以节省能源。 我正在尝试使用我可以获得的最小时钟在 Tiva EK-TM4C1294XL 上实现命令行。 现在、我不需要任何特定的东西、只需让时钟工作即可。 并了解为什么 UART 在某些时钟速度或波特率上似乎不起作用。

    更新了:我还发现 UART 仅在启用了 PLL 或将 PIOSC 用作备用源的情况下工作。 由于 PLL、我实现了最低5MHz、但遗憾的是、使用 PLL 时钟不会进一步下降。。。

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

    [报价用户="Helder Sales"]只是为了节省能源。[/quot]

    之前的海报指出了他(不寻常)希望将 RTC 时钟源用作 UART 的时钟。  我们(现在)被告知原因。  (考虑在未来"预先"提供此类详细信息。)

    供应商的 MCU 手册应详细介绍 UART 架构以及系统和(其他)时钟的路由。  我相信、这个供应商和其他供应商不会在全频谱时钟和 UART 波特率上提供支持。  (正如您的经验所揭示的那样)

    该怎么办?  您无法"位 bang "以这种方式实现 UART 功能并绕过限制供应商限制?  我记得9600波特的单独位时间为~104µS μ s、2400波特的位时间乘以4 -您的系统时钟速度较慢应该能够适应这种情况。  (通过 MCU 的计时器-由相同的系统时钟计时)

    我确实认为 MCU 手册的规格部分中显示了可接受的系统时钟范围。  (背面-应显示系统时钟的最小频率。)

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

    [报价用户="Helder Sales"]我正在尝试 使用我可以获得的最小时钟在 Tiva EK-TM4C1294XL 上实现命令行。

    最小时钟可以指 MCU 循环"尽可能慢"或"尽可能少的时钟数量"。 似乎没有一个合理的点、就是 MCU 的时钟速度比设计运行速度慢... 目标应该是"尽快完成您必须做的事情、然后回到睡眠状态"。 您使用的是32位120MHz MCU、请勿尝试发现它是否可用作1980器件。

    我的建议:回到思考过程的几个步骤! 将 TM4C 配置为以"正常"120MHz 运行。 设置一个中断、以便在接收到新字符时为 UART 传输提供服务。 运行命令行解析器、执行命令所需的任何操作、然后返回到睡眠状态。

    提醒一下、您可以使用 TI 在 Tivaware 的 utils 包中提供的命令行解释器 API。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    PS:我怀疑您将以更慢的速度运行 CPU、从而节省能源... 有几个系统在 CPU 运行时持续打开、除此之外、处理的功耗取决于每个保存位的内部"神奇事物"上的电平变化。
    换言之、以60MHz 运行的 CPU 在120MHz 下不会消耗类似 CPU 的一半电流、而是需要两倍的时间来处理相同的指令、因此最终消耗的能量实际上更高。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Helder

    [报价用户="Helder Sales"]使用 PLL 时,我实现了至少5MHz[/报价]

    我不同意这一说法。 TM4C129x 示例上的 UART 以115.2Kbps 工作、以120MHz 作为系统时钟。

    那么、如何将 UART 配置为9600bps、从而使 PLL 无法工作。

    为了将 RTCOSC 或 LFIOSC 用作 UART 的时钟、是否配置了 ALTCLKCFG 寄存器? 然而、这里的一个注意事项是、当使用 ALTCLKCFG 来改变时钟时、使用替代时钟的其他外设也将受到影响。

    LFIOSC 不是一个好选择、因为它具有广泛的变化范围、这会对波特率产生重大影响。

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

    [引用用户="Amit Ashara"]

    为了将 RTCOSC 或 LFIOSC 用作 UART 的时钟、是否配置了 ALTCLKCFG 寄存器? 然而、这里的一个注意事项是、当使用 ALTCLKCFG 来改变时钟时、使用替代时钟的其他外设也将受到影响。

    [/报价]您好、

    是的,我确实使用 SysCtlAltClkConfig()配置了 ALTCLKCFG 寄存器,并且看到了对我使用的计时器模块的影响。 是否有方法可以计算出 UART 的最佳波特率? 我怀疑问题是波特率、我不确定如何确定哪个波特率对于给定的时钟速度更好。

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

    [报价用户="Helder Sales"]是否有方法可以计算出 UART 的最佳波特率? i[/报价]

    Helder、

    再说一次:不要走那条路... 您不"选择"波特率、而是将您的系统配置为与已以特定速率工作的现有器件进行通信。 如果您负责确定两端器件的速度、那么我想您应该选择硬件可以处理的最快的"标准"速率(包括收发器速度、电缆长度和其他详细信息)。 经验法则:在115200时、您通常可以安全地与 PC 通信(大多数适配器和 UART 驱动程序都是这样)、如果您在自己的两个板之间进行通信、则可能会达到921600。

    所有这些都只需通过使用 TivaWare API 的一个配置行即可实现。 无需影响系统中其他所有内容的疯狂计算和奇怪的时钟设置!

    UARTConfigSetExpClk (serial_base、system_clock、115200、(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |UART_CONFIG_PAR_NONE));

    不过、如果您坚持使用较慢的时钟、则可靠速度的范围将会较小(此处解释这是浪费时间、但如果您想了解分频参数的影响、请参阅较慢的 MSP430时钟和波特率设置)。 正如 Amit 所说的、LFIOSC 波动很大、因此无法基于它执行任何异步通信。

    此致、

    布鲁诺

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

    我现在明白了。 不确定是不是 WISE、我可以使用921600与 PC 通信、而不会出现任何问题。

    事实是、我唯一的经验是 Arduino、这在许多方面是完全不同的。 现在、我必须处理 Tiva、我看到的第一件事是很难了解所有内容。 我不知道去哪里看、即使我知道有些难以理解...唯一能帮助我的指南是工作手册、但仅限于基础知识。

    现在、我可以做一些基本的事情、例如使用 ADC、PWM、计时器、UART ...幸运的是、我找到了一个来自 Brazillian 人的示例、介绍了如何使用 UARTstdio 创建命令行程序。

    我在这里了解到、即使在数据表(或其他来源)中有某种选项时、也不一定采用该选项(例如使用 RTCOSC 或 LFIOSC 为 UART 计时)。

    此外,使用 UARTConfigSetExpClk()会导致系统故障。 但是,使用 UARTStdioConfig()代码运行正常。 可能是 UART stdio 中断处理程序?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Helder

    系统时钟和波特率之间没有真正的共模关系。 可以确定系统时钟的最高和最低波特率。 然后确定应用所需的波特率。 一旦确定了这个值、就可以确定应用的时钟速率;当然、CPU 需要执行的其他系统活动也需要考虑在内。 对于120MHz 的系统时钟、16位整数分频器的最低可能值为~114bps、最高可能值为1/8、因此值为15Mbps。 然而、在较高的波特率下、系统时钟本身必须非常稳定(MOSC+PLL)以避免位错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Helder、

    在921600与 PC 通信时没有问题。 只有当电缆过长时才会出现问题、如果您稍后使用质量较差的 PC UART 适配器、但理论上这种速度是可以的。 115200是否足以满足您的应用需求? 那么您可能需要将油门降低到该水平...

    我与大家分享您对 Tivas 学习曲线的痛苦。 直到我被正确定向至 Tiva 开发最重要的文档:Tivaware 安装的 docs 文件夹内的4.6Gb SW-TM4C-DRL-UG 需要一段时间。 一旦您习惯了那里的文档结构、您将快速实现 Tiva 可以执行的"任何操作"。 老实说、TI 的目标是让您通过使用 Tivaware 来执行 TM4C 能够执行的"任何操作..." 因此生活变得更加轻松。

    (然而、TI 批准的合作伙伴已经对我进行了一些正式的 MSP430培训、那么对于那些试图独自全面学习的人、可以说些什么呢?)

    然后我又花了一些时间才意识到可以使用其他实用程序。 示例? 一个用于命令行实现的 API、记录在同一文件夹的 utils 文件中。 此类命令行用作 TM4C123 Launchpad 板的简单 RGB LED 控制器的参考(如果我正确调用)。

    总之:Tiva/ARM 完全不比 uinos 困难。 我只是想 TI 还没有创建明确的学习路径-通常会因为文档过多而不是缺少而感到 SINING。

    至于导致故障的 UARTConfigSetExpClk(),它不应该-您在代码上缺少某些内容,可能在启用 UART 外设之前调用它,或者类似的简单方法-请仔细检查它。 UARTStdioConfig()是一个“辅助函数”,并不是 Tivaware driverlib 的真正部分,您可能会忘记使用前一个函数做些什么... 只需查看源代码或文档即可。 我不对 UART 使用任何 stdio、因为我们的项目"需要控制"我们在这些端口上发送和接收的所有字节...

    和那些巴西人一起三倍照顾…… 其中一些比其他一些更令人困惑... 我自己是一个在该国近10年来一直是"TM4C 社会"的一员、了解其中的大部分... )

    谢谢!

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

    我也是巴西人! 我开始学习 Tiva 是因为我大学的扩展项目、UFPR Baja SAE。 我在 UFPR 学习电气工程。 我已经学会了照顾巴西的朋友们,哈哈。

    至于 UARTConfigSetExpClk(),我尝试了一些不同的方法来初始化 UART,但没有成功。 鉴于它可以与 UARTStdioConfig()一起使用,我不确定是否值得尝试使它以“正常”方式运行,至少在当前程序中是如此。

    这是 对 solysion.com.br/.../的修改
    为了让它与 CCS 一起工作并学会使用 Eclipse、我将切换 Code::Blocks 与 Eclipse 进行 C++学习。 

    也感谢 Amit、他向我介绍了 UART 速度。

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

    [报价用户="Helder Sales"]我也是巴西人[/quot]

    我有点了解...

    [报价用户="Helder Sales"]我尝试了一些不同的方法来初始化 UART,但没有成功

    不确定是什么让你感到困惑、但它不会比这容易太多... 下面是一个"免费代码片段":

    // Congigurações da PORta 串行 UART0
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);// Pinos UART0 TX e RX
    MAP_GPIOPinConfigure (GPIO_PA0_U0RX);
    MAP_GPIOPinConfigure (GPIO_PA1_U0TX);
    MAP_GPIOPINT_UART0 (
    GPIO_system0);GPIO_TRIP_INTRIP_INTRU0_INTRIP_INTRIP_200;GPIO0_INTRIP_TRIP_INTRIP_INTRIP_TRIP_INTRIP_INTRIP_TRIP_TRIP_TRIP_
    

    在马斯莫拉 Cervejaria、Alto da XV 享受一杯优质的酒、祝您学习愉快。

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

    [引用 USER="Helder Sales"]、也许我会使用 Eclipse 切换代码::块以进行 C++学习。 [/报价]

    正如一条注释、Code::blocks 与 Eclipse 无关、也不使用 Eclipse。 它是使用另一个独立于平台的 GUI 工具包"wxwidget"构建的。 将其视为 QT 的"竞争对手"。

    我对基于 PC 的项目使用 CodeBlocks (以及默认安装的 GCC 编译器)、并首先在 PC 上验证某些 MCU 例程/算法。 此外、它在 M$-Windows 和 Linux 上可用(我正在使用后者)。

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

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

    [引用用户="Amit Ashara"] UARTInt_InitUART 不是 TivaWare API ...

    哎呀... 它应该!

    很抱歉、我已被用于我自己的快捷方式库、因此我将其视为理所当然。

    FWiw、这里是其中的相关部分、该部分调用:

    MAP_SysCtlPeripheralDisable (UART0_BASE);
    MAP_SysCtlPeripheralReset (UART0_BASE);
    MAP_SysCtlPeripheralEnable (UART0_BASE);
    while (!SysCtlPeripheralReady (UART0_BASE));
    
    MAP_UARTConfigSetExpClk (UART0_BASE、 sysclock、波特率(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |UART_CONFIG_PAR_NONE));
    
    MAP_UARTFIFOLevelSet (UART0_BASE、UART_FIFO_TX6_8、UART_FIFO_RX2_8);//配置 FIFO 电平* MAP_UART_UART_RX_INT_INT_INT_TRS;
    启用 UART0和 UART_TXT_INT_INT_INT_INT_INT_INT_INT_INT_INT_INT_INT_INT_INT_INT_TRUT/中断
    

    UART 基址硬编码为0、便于理解...