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/EK-TM4C123GXL:UARTprintf 问题

Guru**** 2445440 points
Other Parts Discussed in Thread: TM4C123GH6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/630433/ccs-ek-tm4c123gxl-uartprintf-issues

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

工具/软件:Code Composer Studio

您好!

我在 CCS 上的电路板 UART (TM4C123GH6PM)有问题。 我正在调用 UARTprintf 在串行监视器上写入一些值。 当我写入短整数时、一切都正常、但当我尝试写入32位整数或长字符串时、代码将在 IntDefaultHandler 中停止。  UART 被缓冲、大小为1024、速度为115200。 我尝试增加 uartstdio.h 中的大小和堆栈大小、但到目前为止没有成功。 如果我尝试使用 UARTTxFlush (false)等刷新函数、代码仍将在 IntDefaultHandler 中停止。 以下是我的代码:

从 uart.c:

SysCtlPeripheralEnable (SYSCTL_Periph_UART);//启用包含将要使用的引脚的 GPIO 端口。
SysCtlDelay (2);//在启用外设后插入几个周期以允许时钟被完全激活

GPIOPinConfigure (GPIO_RX_UART);
GPIOPinConfigure (GPIO_TX_UART);

//配置为用作外设功能(而不是 GPIO)。
GPIOPinTypeUART (GPIO_UART_PIN_BASE、GPIO_RX_PIN_UART | GPIO_TX_PIN_UART);

UARTStdioConfig (GPIO_UART_NR_UART、115200、SysCtlClockGet ());//模式在115200处设置为8N1
UARTEchoSet (false);

while (UARTBusy (GPIO_UART_BASE_UART)){
//等待 UART 就绪

以及我调用 UARTprintf 的部分:

uint32_t 定时器=毫秒();

UARTprintf ("%d\n"、计时器);

您是否知道我如何解决此问题? 谢谢你

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

    您好、Marco、

    您是否通过以下方式将 UARTStdioIntHandler 包含在 startup_ccs.c 文件中:

    1) 1)声明  

    extern void UARTStdioIntHandler (void); 

    2) 2)对于   UART0 Rx 和 Tx、使用 UARTStdioIntHandler 替换 IntDefaultHandler?

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

    Marco、

    这似乎有点误导。 是否确定代码卡在 IntDefaultHandler 中?

    当一个中断发生并且没有分配处理它的 ISR 函数时、会发生这种情况。 您(或任何使用过的库)是否在项目中配置了中断? 我怀疑 UART TX 中断标志、因为它是在您使用较长的字符串输出时发生的、但只有完全了解该项目才能确定。

    大堆栈等与 printf 相关的函数上的字符串更长... 您是否使用默认值? 尝试增加堆栈大小。

    布鲁诺

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

    您好 Bruno、

    UARTStdioConfig API 包括初始化中断、并有一个与之关联的 UARTStdioIntHandler。 如果该处理程序在 startup_ccs.c 中没有关联、则默认情况下会进入 IntDefaultHandler、这与描述的行为匹配。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    拉尔夫很有道理!
    能告诉我们他的问题是否得到解决、以及如何解决、那将会很好。。。
    此致
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我今天将对此进行研究、并将告诉您。 很抱歉、回答很晚、我一直在处理另一项任务。  

    我觉得这个问题与你们说的中断处理程序有关、不过我会告诉你们。

    谢谢你。

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

    我做了你所说的、但我仍然有同样的问题。 调用 UARTprintf ("string\n")后、我将跳转到 IntDefaulHandler。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ralph、

    实际上、我忘记了使用 UART1、因此必须更改 UART0和 UART1的处理程序才能使其正常工作。 非常感谢!!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很棒,Marco!
    虽然我没有权利施加压力、但我只是好奇-显然及时的压力帮助了我!
    谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    压力是我的咖啡因。 谢谢 Bruno。 Ciao buona giornata!