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/F28M35H52C:UARTStdio n#39;t 似乎在 UART_buffered 模式下工作

Guru**** 2595780 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/671548/ccs-f28m35h52c-uartstdio-doesn-t-appear-to-work-in-uart_buffered-mode

器件型号:F28M35H52C
Thread 中讨论的其他器件:controlSUITE

工具/软件:Code Composer Studio

尊敬的 TI:

我几乎肯定我在做一些愚蠢的事,但我被骗了。

我有一些软件使用 uartstdio 库作为终端 IO。 因为我需要使 UART 实现非阻塞、这要求我处于 UART_buffered 模式(因为 UARTRxBytesAvail ()等函数甚至不存在,除非定义了 UART_buffered),所以我继续将定义设置为1。 当我这么做时、代码会崩溃并产生意外中断。

为了清楚、

//#define UART_buffered 1.

...工作正常

#define UART_buffered 1

...sends ME off to IntDefaultHandler()。

我所做的并不是所有的复杂。 实际上、此时我甚至不想发送字符。 我将该库用作 printf。 它在第一条消息的一半时间内崩溃(我可以在 PuTTy 上看到"LED 任务初始化")、并关闭到 IntDefaultHandler。

我猜还有其他一些需要设置才能使用缓冲模式。 ISR、可能吗? 但我对它的功能有损失。

帮助?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Calvin、
    尝试找出导致这种情况的原因、在代码中设置断点、并查看执行的内容和不执行的内容。 如果您认为它是由中断引起的、则可以尝试禁用全局中断并查看行为是否发生变化。 如果它是由未正确映射的中断引起的、您可以查看外设中断扩展并查看导致中断触发的原因。

    controlSUITE 中提供了一些 UART 示例、可帮助您快速入门。

    尝试前面提到的几个基本调试步骤、我们可以从这里开始。

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

    我一直这么做...嗯,大部分都是这样。 如何查看外设中断扩展?

    我发现 uartstdio.c 中有一个名为 UARTStdioIntHandler 的函数、而 uartstdio.c 中的任何内容都不会调用该函数、也不会在 uartstdio.h 文件中列出以供外部使用。 我猜你们没有完成 UART_buffered 模式下的 uartstdio 验证。

    您碰巧有任何使用 UART_buffered 模式的 uartstdio 库示例吗? 我找不到任何东西。

    感谢您的帮助、

    Calvin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    胜利! 部分胜利--我在 uartstdio.h 中添加了 UARTStdioIntHandler,并在 UARTStdioInit(0)之后调用它。 它可能应为_IN_ UARTStdioInit、但也可能是如此。

    负责处理传输侧。 它不再挂起。 我仍然看不到数据返回到接收端。 以下是我的代码:

    if (UARTRxBytesAvail ()){
    uint8_t char_in=UARTgetc();
    UARTprintf ("%c\n"中的字符、char_in);


    没什么特别的 我的意思是、真的不花哨。

    我认为我看到 RX 中断已启用、所以其他的事情可能正在发生。 我现在要对它进行研究。

    正如我在上一篇文章中所提到的、如果您确实有一个实际使用此模式的示例、这可能会有所帮助...至少建议有人修复一些错误。 :p

    之后!

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

    Calvin、

    我希望它被保留在 stdio init 函数之外有一个很好的原因。 此外、我没有关于如何使用"缓冲"模式的好示例。

    如果调用 UARDRxBytesAvail()等函数,会发生什么情况? 这将告诉您字节是否存储在缓冲区中。

    • 是否确定已正确配置 GPIO 多路复用器?
    • 是否已将传入的 UART 信号连接到正确的引脚/GPIO?

    此致、
    Cody  

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

    我解决了这个问题。 集线站和 controlCARD 均使用 UART0引脚 PE4和 PE5。 这两种方式都将信号传输到 FTDI 芯片中、并关闭到 USB 端口。 这些端口在我的设备管理器中显示为串行端口。 但是、虽然两个串行端口都连接了 TX 线、但连接两条 RX 线可能会导致争用。 因此、在扩展坞上跳接 RX 从机信号。 这就是我能够看到发送端而不是接收端的原因。 当我打开一个终端到另一个串行端口时、我可以向系统发送流量。

    sum--uartstdio.h 有一个错误:它需要:  

       extern void UARTStdioIntHandler();

    ...已添加。 这应该会得到修复。 其次、你们应该有一个 uartstdio 示例、该示例展示了如何使用库设置 UART (如果您希望我为此向您发送一些代码、我很高兴)。 最后一个部分(RX 部分)也可以在示例中提及...或者、除了我之外、其他人都可以很明显地看到它。 :p

    不管怎样、我很高兴去!

    谢谢、

    Calvin