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.

TMS320F28069: tms320f28069的CCS程序进行printf重定向

Part Number: TMS320F28069
Other Parts Discussed in Thread: C2000WARE

如何将printf函数重定向到串口打印,在程序中调用printf向串口发送数据

  • 你好,发送数据的话,没必要这么麻烦,28069有SCI通信外设,你直接使用它们就可以了,

    C2000Ware中有相关例程:C:\ti\c2000\C2000Ware_4_02_00_00\device_support\f2806x\examples\c28\sci_echoback

  • 谢谢,是使用的SCI,只是数据是十六进制的,串口打印(ASCII)不能直观使用串口助手打印查看,需要使用printf重定向实现数据转换,比如在实现了printf的情况下,代码:

    Uint8 a=0XC8;

    printf("\n\r 0X9F= %x\n\r",a);

    串口助手显示的结果是:0x9F=C8

    方法2   如果使用的是普通串口,那么情况如下:

    SCIA_TX('\n');

    SCIA_TX('\r');

    SCIA_TX(0XC8);

    串口助手在普通显示模式下只有不断的换行,没有其他任何其他信息;

    串口助手使用HEX模式显示,打印的是:0A 0D 63 38     对应的是'\n' '\r'  'C' '8'  的ASCII码十六进制数值

    我重新实现了  int fputc(int _c, register FILE *_fp)希望来达到上面第一种效果。

    但是我使用printf("\n\r 0X9F= %x\n\r",a);   只会显示0X9F=,后面的C8没有显示。

    您好,请问printf重定向遇到这种情况是什么原因,如何解决,能跟我说说吗?谢谢

  • 代码如下:

    /*
    printf() 重定义相关
    */
    /*
    int fputc(int _c, register FILE *_fp)
    {
    Uint8 tx=_c;
    while (SciaRegs.SCICTL2.bit.TXEMPTY == 0) {} //等待输出完成
    SciaRegs.SCITXBUF=(Uint16)tx; //必须右对齐
    while (SciaRegs.SCICTL2.bit.TXEMPTY == 0) {} //等待输出完成
    return 1;
    }
    */

  • 我咨询资深工程师后回复您。

  • 非常感谢

  • 你好,应该是堆栈值的问题,你设置了正确的堆栈值吗?请参考下这篇帖子:

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/420808/sprintf-with-f28069 

x 出现错误。请重试或与管理员联系。