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/LAUNCHXL-CC1350:如何打印两个小数点

Guru**** 2540720 points
Other Parts Discussed in Thread: CC1350, TMP116

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/801779/ccs-launchxl-cc1350-how-to-print-two-decimal-points

器件型号:LAUNCHXL-CC1350
主题中讨论的其他器件:CC1350TMP116

工具/软件:Code Composer Studio

尊敬的专家:

我使用的是 cc1350 Launch Pad 和 i2c 示例、我声明了浮动变量、我只希望打印2个小数点、但这打印4个小数点我无法限制小数点、因此可以帮助我找到解决我问题的解决方案。

Display_printf (display、0、0、"Temp:%.2fC"、temperature);  

谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Surya、
    您是否了解了以下主题? e2e.ti.com/.../626415
    此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您可以在缓冲区中将浮点值 sprintf、然后在 UART 上将缓冲区输出为字符串。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否添加了字段宽度? "%8.2f"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Clement、

    感谢您的回复、但我尝试使用 sprintf 方法、但我得到的结果相同、只打印一次、但我在 while 函数中写入代码

    我的标题中添加了 stdio.h  

    #include
    #include
    #include
    #include
    //#include
    //#include
    /*驱动程序头文件*/
    #include
    #include
    #include

    然后是我的代码  

    while (1)

    /*指向芯片温度寄存器并读取它的2个字节*/
    TxBuffer[0]= TMP116_DIE_TEMP;
    i2cTransaction.slaveAddress = Si7021_ADDR;
    i2cTransaction.writeBuf = txBuffer;
    i2cTransaction.writeCount = 1;
    i2cTransaction.readBuf = rxBuffer;
    i2cTransaction.ReadCount = 2;

    IF (I2C_transfer (i2c、&i2cTransaction))

    char buf[64];
    TEMPER =(rxBuffer[0]<< 8)|(rxBuffer[1]);
    温度=(175.72*温度)/65536;
    温度-= 46.85;
    sprintf (buf、"缓冲区:%3.2fC\n"、温度);
    Display_printf (display、1、0、"Temp:%3.2fC\n"temperature);
    display_printf (display、1、0、"%s"、buf);


    我尝试使用 sprintf 方法并添加字段宽度、但如果使用 sprintf 方法、我会得到相同的结果和一个结果、而 CC1350不会向 UART 打印任何内容。  

    我的当前结果是  

    HUMI:72.32.7271%
    温度:27.8181C

    但我只需要两个小数点即可打印 UART

    谢谢你

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

    您好!

    我可以告诉您、以下代码使用 SDK v3.10打印"Temp:12.35C"。

    静态 Display_Handle 显示;
    Display_init ();
    display = Display_open (Display_Type_UART、NULL);
    char buffer[10];
    浮点温度= 12.3456789;
    sprintf (buffer、"%.2f"、temperature);
    Display_printf (display、 1、0、"温度:%SC\n"、缓冲区); 

    您能告诉我您使用的是哪个 SDK 版本吗?

    此致、

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

    e2e.ti.com/.../i2ctmp116.chiClement、

    我使用的 SDK 版本与 v3.10相同

    但我无法在代码中获得两个小数点

    我随附了完整的代码供您参考、请帮助查找代码中的错误。

    我在代码中禁用了该行。

    谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    %3.2f 不以 DDD.DD 格式打印,它应该打印 DDD,因为3是字段宽度(包括小数点和任何+/-符号!),而不是小数点左侧的位置数。 您需要像%8.2这样的东西

    我不知道您的程序是如何打印的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Keith、
    这是我的代码
    // char buf[64];
    TEMPER =(rxBuffer[0]<< 8)|(rxBuffer[1]);
    温度=(175.72*温度)/65536;
    温度-= 46.85;
    //sprintf (buf、"缓冲器:%.2fC\n"、温度);
    Display_printf (display、1、0、"Temp:%.2fC\n"temperature);
    //Display_printf (display、1、0、"%s"、buf);

    我禁用了一些线路、如果启用这些线路、我的 cc1350将仅按一次方式打印温度数据
    温度:27.6358C
    然后、这会被结构化或停止工作、或者我不知道、但我的 cc1350不会将任何内容打印到 UART。

    如果我上传上述禁用行的代码、我的 cc1350正常工作、它将持续打印数据。 我不知道代码中的错误是什么。
    您能帮我找到问题的解决方案吗?

    现在我在主线程中使用 while ()来连续执行函数,您能告诉我如何定期执行函数,周期间隔是用户定义的
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用计时器。 使用 TI-RTOS 非常容易。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能给我展示一个相关示例吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    BIOS 用户指南的第8.3节:

    Timer_handle timerHandle;
    int main (void)
    {
    Error_Block EB;
    Timer_Params timerParams;
    Task_Handle;
    Error_init (&EB);
    Timer_Params_init (&timerParams);
    timerParams.period = 2000;//
    timerHandle = Timer_create (Timer_any、tickFxn、&timerParams、&EB);
    if (timerHandle =
    
    
    
    
    
    
    
    arg1){System_abort ("计时器创建失败");}&Handle = Task_create (masterTask、NULL、EB){"System_abort ("taskarg 失败)
    
    "(task_arge"}(task_abort);任务 Uarge"(任务失败)(任务失败)
    //检测到需要更改计时器周期
    Timer_stop (timerHandle)的条件;
    Timer_setPeriodMicroSecs (4000);//将2ms 更改为4ms */
    Timer_start (timerHandle);
    ...
    }
    void tickFxn (UArg0)
    {
    System_printf ("当前周期=%d\n"、
    Timer_getPeriod (timerHandle);
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Keith、
    非常感谢您的帮助、但我仍然无法在 UART 中打印2个十进制点值、我做了所有的事情、但我无法获得结果、我找不到什么是错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否尝试使用 Clement 的片段运行测试程序?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哦、我不能相信这还没有出现。 通常,可以通过增加堆栈大小来解决任何 printf()版本问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Keith、  

    我已经尝试过、但无法连续获得结果、这是我的代码

    while (1)

    /*指向芯片温度寄存器并读取它的2个字节*/
    TxBuffer[0]= 0xE3;
    i2cTransaction.slaveAddress = Si7021_ADDR;
    i2cTransaction.writeBuf = txBuffer;
    i2cTransaction.writeCount = 1;
    i2cTransaction.readBuf = rxBuffer;
    i2cTransaction.ReadCount = 2;

    IF (I2C_transfer (i2c、&i2cTransaction))

    // char buf[64];
    char buffer[10];
    浮点型= 12.3456789;
    sprintf (buffer、"%.2f"、tem);
    display_printf (display、1、0、"Test:%sc\n"buffer);

    TEMPER =(rxBuffer[0]<< 8)|(rxBuffer[1]);
    温度=(175.72*温度)/65536;
    温度-= 46.85;
    //sprintf (buf、"缓冲器:%.2fC\n"、温度);
    Display_printf (display、1、0、"Temp:%.2fC\n"temperature);
    //Display_printf (display、1、0、"%s"、buf);

    我使用 while ()连续运行和打印数据,但我的 cc1350 Launchpad 只打印一次数据,而不重复。  

    输出:

    启动 i2ctmp116示例

    I2C 已初始化!

    测试:12.35C

    然后、我的 launchpad 不做任何类似的事情会被击中或悬挂、或者我不知道的事情。