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.

[参考译文] EK-TM4C1294XL:设置 UART 时失败

Guru**** 2473270 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/683612/ek-tm4c1294xl-failing-at-setting-up-uart

器件型号:EK-TM4C1294XL

大家好、我在设置 UART 通信时遇到了问题。 我只想使用 UARTprintf。 如果我删除 configureUART(),我的 PWM 信号工作正常;如果我注释掉 UARTStdioConfig (0、115200、g_ui32SysClock),则整个操作正常;我使用 timer.c 示例尝试设置此设置。

我不断得到#10010 null 错误和#10234-D null 错误。

请提供任何帮助

#include 
#include 
#include 















包含"inc/hw_ints.h"#include "inc/hw_memmap.h"#include "inc/hw_types.h"#include "inc/hw_gpio.h"#include "inc/hw_pwm.h"#include "driverlib/debug.h"#include "driverlib/driverlib"#driverlib/driver.h"#include "driverlib/driver.h"#driverlib_dive.trat/driveript/driverlib#include"#driver/hpin/driverlib/#driver/hpio.driverlib#include "#driverlib.driverlib#include "#driver.h







//
//本节包含 UART 通信相关性-用于检查所写入的代码,但大多数//
////将从最终代码中注释掉-它将保留为注释,不会被删除以允许程序编辑器访问//
//使用 UART 来检查值和函数 //
//********* //

void
configureUART (void)
{
//
//启用 GPIO 和 UART 0
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);

//
//为 UART 模式配置 UART 引脚
//
ROM_GPIOPinConfigure (GPIO_PA0_U0RX);
ROM_GPIOPinConfigure (GPIO_PA1_U0TX);
ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);


//UARTClockSourceSet (UART0_BASE、UART_CLOCK_SYSTEM);


//
//初始化控制台 I/O 的 UART
//
UARTStdioConfig (0、115200、g_ui32SysClock);
}

//********* //
//此部分包含创建 PWM 函数所需的 PWM 函数 //
//注意:对 SysCtlPWMClockSet (SYSCTL_PWMDIV_1)的任何更改;将需要在上面的数学部分进行更改!!!!!!!!!!! //
//********* //
void
configurePWM (void)
{

uint32_t 节拍;
节拍数= NUMBER_TICKS_Freq();
//
//启用 PWM 使用的 GPIO 外设(PF0、最终为 PF1)
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);

//
//启用 PWM0
//
SysCtlPeripheralEnable (SYSCTL_Periph_PWM0);

//
//将时钟分频以供 PWM 使用-现在将使用一个
//
SysCtlPWMClockSet (SYSCTL_PWMDIV_1);

//
//解锁引脚
//
HWREG (GPIO_PORTF_BASE + GPIO_LO_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTF_BASE + GPIO_O_CR)= 0x01;

//
//为 PWM 配置 GPIO 引脚
//
GPIOPinConfigure (GPIO_PF0_M0PWM0);
GPIOPinConfigure (GPIO_PF1_M0PWM1);

GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_1);

//
//配置 PWM
//
PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);

//
//设置 PWM 周期
//
PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、ceil (tick));

//
//设置占空比
//
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、ceil (tICKs/2));
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_1、ceil (tICKs/2));

//
//启用 PWM
//
PWMGenEnable (PWM0_BASE、PWM_GEN_0);
PWMOutputInvert (PWM0_BASE、PWM_OUT_1_BIT、TRUE);
PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT | PWM_OUT_1_BIT、TRUE);

}

int
main (void)
{
G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);


configurePWM();
configureUART();

while (1)
{
UARTprintf ("UART 成功\n");
}
}

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

    适合我。 我将硬编码节拍数设置为50、因为我看不到 NUMBER_TICKS_Freq ()

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我要补充的是、您应该将其更改为一个数字、它从代码的另一段中获取该值、这段时间很长。 但我不知道为什么它不能为我服务。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我明白了
    >>编译失败
    Makefile:142:目标'PWMTEST.OUT'的配方失败
    UARTStdioConfig ./PWMTEST2-4-20-2018.obj
    UARTprintf /PWMTEST2-4-20-2018.obj

    错误#10234-D:未解析的符号仍然存在
    错误#10010:链接期间遇到错误;未生成"PWMTEST.OUT"
    gmake:***[PWMTEST.OUT]错误1
    gmake:目标"全部"不会由于错误而重新生成。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Hisham、您好!

    似乎仍然存在一些链接器错误。 您是重复使用 TivaWare 工程、还是在 CCS 中创建了空白工程并在 TivaWare 库中手动链接?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在重复使用 TivaWare 工程-我觉得这样做会更容易获得所有包含项
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    一切看起来都在正确的位置、因此我不确定会发生什么
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    哦、哇。 我通过将 uartstdio.c 复制到项目目录以使其进行编译而感到高兴。 我使用此快捷方式查找您的"零错误"。

    我的 TIvAware 路径指向 utils/uartstdio.h 所在的根文件夹。 我们有相同的问题、我不明白为什么。

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

    Hisham 和 Peter、您好!

    这是因为 uartstdio.c 文件也需要以某种方式包含在项目中。 对于利用它的 TivaWare 示例、这是在与某些 TivaWare 工程(如 UDMA_DEMO)链接的 utils 文件夹中完成的。 utils 文件夹中包含 uartstdio.c 等文件、然后带有 utils/uartstdio.h 链接的工程可以看到 API 并正确调用它们。

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

    它位于项目的"Includes"文件夹中。 还是应包含在您显示的单独文件夹中?

    我不知道为什么它适用于计时器示例、但不知道这种情况。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ^μ A
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为什么 utils/中的文件显式单独链接、但 driverlib/中的文件通过在路径中找到?

    为什么没有在没有 driverlib.lib 的情况下构建 C 代码? .c 源文件就在.h 文件旁边。

    我对这两个问题有一个很好的关联...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Hisham、

    是的、这与使用 utils 文件夹进行本地项目链接的方式不同、如图所示。 我无法完全解释为什么 CCS 以这种方式运行、 但粗略的解释是、由于 uartstdio.c 不是 driverlib 的一部分、因此需要在本地添加它、因为其他 API 来自应用文件或 driverlib.lib 库(也依赖于.h include、因此需要它们)。

    我想、如果添加一个到 TivaWare utils 文件夹的明确 CCS 编译器链接、那么它会查看所有这些.c 文件以匹配 API、这可能也会起作用、 (编辑: struct 语句是错误的、也不起作用)、但这并不是我们在任何示例中处理它的方式、因为这样、文件在应用程序范围内就更好地定义了。

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

    好的、我按照您的说明添加了它、它符合标准、没有错误、但是它不起作用、当我暂停程序时、调试它要求我查看反汇编、但正如您看到的、我没有收到任何通信(PuTTy)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    PuTTY 可与计时器示例配合使用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嘿、我想知道您是如何为自己打印的?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    拔下并插入 USB 已修复-谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Peter 和 Hisham、您好!

    询问 CCS 专家(我对 CCS 的了解不够、因此很危险...) 现在可以提供更好的解释。

    "存在在作为--include_path 参数传递给编译器的目录中的.c 文件不会被确认。 此编译器选项仅适用于.h 文件。"

    因此、我以前可能链接 utils 文件夹的想法不会按计划工作、因为我的想法是使用该功能(就像我说的... 我只知道足够危险:)

    include 的 driverlib 路径用于.h 文件、因此可以正确评估 driverlib.lib API。 如果没有 driverlib 文件夹中的.h 文件、编译器将无法访问包含.lib 文件的内容。 其他包含文件(如各种 hw_xxx.h 文件)没有配套的.c 文件。

    这就是为什么 uartstdio.c 在链接它所需的方式上脱颖而出、而不仅仅是添加#include "utils/uartstdio.h"

    这是否有助于更好地解释 CCS 的魔法?

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

    [引用 USER="Ralph Jacobi"]这是否有助于更好地解释 CCS 魔法?

    实际上、Ralph 确实在做这个工作-然而(不知怎么)-现在 、我的 UART 出现了可怕的" 模拟隔离/漏电!"   (被告知: "没有治愈方法!")