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/TM4C123GH6PM:将可变内容传输到 Tiva 模块的 UART。

Guru**** 2041660 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/719469/ccs-tm4c123gh6pm-transmitting-variable-content-to-uart-of-tiva-module

器件型号:TM4C123GH6PM

工具/软件:Code Composer Studio

您好!

我是 Balaji、我不知道如何将存储在变量中的数据(如更新的传感器值)传输到 TM4C123GH6PM 的 UART 模块。

我正在使用 UARTCharPUT() API 发送一个 charecter,但应该使用什么将变量的内容发送到 UART。

unsigned char a=34;

UARTCharPut (UART0_BASE、A);

如果我这么做、  串行监视器上只有4个。

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

    这正是我对您使用的 API 所期望的。 这只是将输入值直接输出到终端、该终端将该值表示为 ASCII 字符。 0x34的 ASCII 字符为4。 因此、您的打印输出是"4"、而不是34。

    您需要做的是使用 UARTprintf。 尝试该操作、看看结果是否符合您的要求。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Ralph、

    如果我使用 UARTprintf、我必须包含所有库。  

    正如您告诉 UARTCharPUT()将打印 ASCII 字符,但如果我发送78而不是34,它将打印8个 ASCII 字符,而不是78的 ASCII 字符。 请告诉我原因是什么。

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

    您好、Balaji

    您需要在项目中包含 uartstdio 文件。

    如果您已正确链接 TivaWare (如果使用 TivaWare 示例、肯定会是这种情况)、那么您只需使用以下代码行:

    #include "utils/uartstdio.h" 

    至于78打印为8,我不确定。 UARTCharPut API 仅按原样传输字符、因此会通过该行发送0x78。 您是否检查了终端的波特率是否与 MCU 波特率设置一致?

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

    您好 Ralph、

    感觉还不错——我想——“你一样!”   (不是这种情况)-提供了很大的舒适度。)    尽管必须注意-  0x34 (而不是34) 是与 '4'等效的 ASCII。

    标准  UARTCharPut ()-正如其"源代码"显示的那样- 仅限于一个字符-并且(第一个'4'(从34个)和以后的'8'(从78个))是 在 UART 的 FIFO 中放置的最后一个字符-因此 '这些' 字符('单独'被发送) 似乎"违反"  先入先出 "(FIFO)操作-不是?   (清楚地说、"先入"(3)、然后(7)-看起来 不是 "先出!"   ***(除非他们被“改写”,但终端的“捕捉”似乎消除了这种可能性。)

    您是否可以(尝试)详细说明(甚至解释)这种(明显) FIFO 矛盾?   (LIFO (最后一个输入-第一个输出) 似乎是 (赦免) 更"可行"-在这里...)

    [编辑]: 对这一点的思考更多-它看起来(最有可能) 、所呈现变量的'FIFO'处理、处理和/或接受'必须证明'关键'。   进一步复杂化- 这里存在一种"可能性"-是否不存在?   对于变量'A=34'- FIFO (可能)会将其视为、'2个唯一字符'-或 变量的(实际)值!   (只要该值为255或更小。)   从 这张海报的(初步)报告中可以看出、这种"多位"变量在 FIFO 中(被视为)为"最低有效位"-首先进入 FIFO -因此"首先退出"。   (可能)  进一步的实验-我之前(另一个线程)请求(一些) FIFO 详细信息(没有得到任何响应)、这使我们产生了(一些)混乱...

    如果存在一些方法-输出 FIFO 的内容-(无需添加字符参数-在'UARTCharPut()'内 - 那么(该)可以-显示(缺少)'3'... 或 “7”... 在我们的海报 用例中!    而'API giveth'... 它(有时) 会被带走!

    作为公认的"粗制" (然而、对于 Gov't 工作来说很好)(可能)解决方案-并且有人希望 通过 UART 传输"9876"-下面(未经测试):

    UARTCharPut (UART0_BASE、"9");
    UARTCharPut (UART0_BASE、"8");
    UARTCharPut (UART0_BASE、"7");
    UARTCharPut (UART0_BASE、'6'); // 假设没有嵌入'CR/LF'-字符从左到右填充屏幕...

    我花了很多时间/精力(更早)用'uartstdio' ( UARTvprintf())检查'key function'的代码 - 这是一场噩梦!   即使是函数的作者也会道歉-注意(多个) "去做"、其中...

    我建议我们的海报采用"基本数学"-从 "多位数变量"中提取每个(基10)"位置值"-并将这些(现在合适)单个数字字符 呈现给 速度更快、效率更高的'UARTCharPut()'函数。   提示 正确使用 "divide by ten (十进制幂)"-后跟"%"运算符-可实现"单数字提取-从多位字段"-快速轻松!  

    这种"基本数学的使用" 证明了(近乎) 通用于 :价值、使用和应用 -也是如此。   (哪一个'uartstdio'不是!)   考虑随附的'LCD'的情况-(也)需要接收"单个字符"、而不是'multi-digit'变量。   "更广泛的数学解决方案"-显然是赢家-因为它的" ACH 和价值"要大得多!   当然、也证明 了"供应商不可知!"