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.

[参考译文] TMS320F28335:使用 SCi 串行端口打印的数据不完整

Guru**** 2587365 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1296446/tms320f28335-the-data-printed-using-the-sci-serial-port-is-incomplete

器件型号:TMS320F28335
主题中讨论的其他器件:C2000WARE

使用 sci 串行端口打印的数据不完整。

我在一些论坛上看到它与 printf 的重定向有关、我可以在哪里设置重定向? 有教程吗?

我使用"Console"窗口可以正常打印所有内容、但切换回串行端口打印数据未完成。

--

谢谢、此致

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

    您好!

    我假设这里使用了一个使用 SCI 的自定义 printf 解决方案、如下文中"使用 printf ()输出到用户定义的器件"一节所述:

    https://dev.ti.com/tirex/explore/node?node=A__AIwt8bIK1yTVvzbnfYL0gg__ccs_devtools__FUz-xrs__LATEST

    我将提请 C2000专家注意该主题、以获取进一步的帮助。

    谢谢

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

    你好,耶鲁,

    感谢您的提问。 您在运行时是否碰巧使用了调试器模式? 当调试器处于活动状态时、它会停止中间数据流的传输、从而导致不完整的数据。 您可以尝试在不进行调试的情况下运行、看看问题是否仍然存在?

    此致、

    文斯

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

    我不理解调试器模式、我仅在调试后使用 ccs10.0软件是否可以刻录到 dsp28335?

    如果我错了、请告诉我如何关闭调试模式。

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

    你好,耶鲁,

    典型流程是

    1.将代码加载到器件中(闪存或 RAM、但闪存是永久的并在下电上电周期之间保持)。

    2.在 CCS 中找到顶部的"disconnect"按钮、将器件与调试器断开

    3。代码现在可以在没有连接调试器的情况下自由运行。 您可以观察 COM 端口终端、看看它看起来是否正确。

    此致、

    文斯

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

    您好、托莱多!

    我是这个问题的作者、非常感谢您的回答。

    我按照你的要求将代码烧录到了闪存中、并单击了 ccs10.1.0中的"断开"按钮、但从串行端口打印出来的数据仍然不完整、因此我对其进行了多次测试、以确保无法正常工作。

    我的代码没有做任何更改、在之前的使用中、通常可以输出所有字符、但在使用"console"窗口后、使用"sci"串行端口再次打印输出时出现了问题。

    下图显示了使用 CCS 串行助手打印的结果。

    您可以看到数据不完整、并且存在奇怪的换行符。

    如果需要、我愿意提供我的"sci.c"和"sci.h"文件、以及支持 sci 的"main.c"文件。

    顺便说一下、这个问题与"printf"重定向有什么关系吗?

    我们会尽快回复您的。

    此致、

    安迪

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

    Andy、您好!

    我想我看到了错误的通信:您是否期望有更多的小数位? 如果是这种情况、您使用的格式不正确。

    您已选择"0.2f"。 这意味着浮点数只打印两个小数位。 这就是你没有得到更多小数位的原因。

    基本上、您在 printf 中选择的格式不正确。

    对于奇怪的换行符(文本前有空格)、这是由于回车(\r)未正确执行而引起的。 您是否可以尝试重新排列顺序来"\n\n"而不是"\r\n"? 我认为发生的情况是 printf 数据有时会使缓冲区溢出。 因此、您可能需要 printf 语句之间存在延迟(或使它们成为一个更大的 printf 语句)。

    此致、

    文斯

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

    您好,托莱多,

    感谢您的回答。

    认为我看到了错误的通信:您是否期望有更多的小数位? 如果是这种情况、您使用的格式不正确。

    您已选择"0.2f"。 这意味着浮点数只打印两个小数位。 这就是你没有得到更多小数位的原因。

    [/报价]

    我不想得到任何更多的小数,上图是为了显示数据不是完全打印,你会发现"0.2f°"后的"°"没有打印,事实上,无论把什么字符放在"0.2f"后都不能打印。

    对于因回车错误(\r)导致的奇怪换行符(文本前有空格)。 您是否可以尝试重新排列顺序来"\n\n"而不是"\r\n"? 我认为发生的情况是 printf 数据有时会使缓冲区溢出。 因此,您可能需要 printf 语句之间的延迟(或使它们成为一个更大的 printf 语句)。

    我尝试用"\n\n"替换"\r\n"、但它不起作用

    我试图把主控从28335改为28035、但问题仍未解决。 我将完整的代码复制到了另一台计算机上,但我可以使用"sci"端口输出数据,这证明在我的计算机上 ccs10.1.0的配置可能存在问题!

    因此我想卸载 ccs10.1.0并将其替换为 ccs12.5。 您认为这可能起作用吗?

    您能否提供 TI 的官方"sci"使用代码? 您能否提供有关 printf 重定向的信息?

    另请点击此链接:CCS6中printf () TMS320F28335工程printf——的使用()的使用_ccs printf-n CSDN博客

    作为 DSP 学员、我不知道在哪里放置 NT fputc (int _c、register file *_ fp)函数。

    我真的想要你的帮助。  

    sci.c 文件

    /*
     * sci.c
     *
     *  Created on: 2022年11月3日
     *      Author: 13739
     */
    #include "sci.h"
    #include "head.h"
    #include <stdio.h>
    #include <file.h>
    #include "DSP2803x_Project.h"
    
    
    Uart_Msg SCI_Msg={0, {0},0,0};
    
    //#define SYSCLK 60000000L
    
    //#################################################
    //串口接收缓存处理函数
    //-----------------------------------------------
    void handleRxFIFO()
    {
    	if(SCI_Msg.Mark_Para.Status_Bits.rFifoDataflag == 1 )
    	{
    		SCI_Msg.Mark_Para.Status_Bits.rFifoDataflag =0;
    		while(SCI_Msg.rxReadIndex != SCI_Msg.rxWriteIndex)
    		{
    			SCI_Msg.rxReadIndex=(++SCI_Msg.rxReadIndex)%(UartRxLEN);
    		}
    	}
    }
    
    
    //#################################################
    //串口接收中断函数
    //采用FIFO机制(缓存)
    //SCI_FIFO_LEN 定义为 1,最大为4
    //-----------------------------------------------
    interrupt void uartRx_isr(void)
    {
        SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;      // Clear Interrupt flag
    	PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
    
    	if(SciaRegs.SCIFFRX.bit.RXFFOVF == 0)//接收FIFO未溢出
    	{
    		SCI_Msg.Mark_Para.Status_Bits.rFifoDataflag = 1;
    
    		//接收数据
    		while(SciaRegs.SCIFFRX.bit.RXFFST)
    		{
    			SCI_Msg.rxData[SCI_Msg.rxWriteIndex] = SciaRegs.SCIRXBUF.all;  //接受低八位数据
    			SCI_Msg.rxWriteIndex=(++SCI_Msg.rxWriteIndex)%(UartRxLEN);
    		}
    
    	}
    	else
    	{
    		//用户这里做串口硬件溢出的处理,可以完全读取出FIFO里的数据或者清空FIFO
    		//这里清空FIFO操作
    		SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;     // Clear HW Overflow flag
    		SciaRegs.SCIFFRX.bit.RXFIFORESET = 0;  //Write 0 to reset the FIFO pointer to zero, and hold in reset.
    		SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;  //Re-enable receive FIFO operation
    	}
    }
    
    
    //#################################################
    //-----------------------------------------------
    //串口初始化:
    //115200  8N1
    // P21 框图介绍中断
    //-----------------------------------------------
    void SCI_Init(Uint32 baud)
    {
    //设置串口波特率
    	unsigned char scihbaud=0;
    	unsigned char scilbaud=0;
    	Uint16 scibaud=0;
    
    	scibaud=37500000/(8*baud)-1;
    	scihbaud=scibaud>>8;
    	scilbaud=scibaud&0xff;
    
    
    	EALLOW;
    	SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;   // SCI-A
    	EDIS;
    
    	InitSciaGpio();
    //SCI工作模式的设置
    	SciaRegs.SCICTL1.bit.SWRESET = 0;//sci 复位操作
     	SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                       // No parity,8 char bits,
                                       // async mode, idle-line protocol
     									//1个停止位,无回环,无奇偶校验,8个字符位,异步模式,空闲线路协议
    // baud = LSPCLK/8/((BRR+1)
    // baud @LSPCLK = 15MHz (60 MHz SYSCLK)
    //	SciaRegs.SCIHBAUD    =0x0000;
    //  SciaRegs.SCILBAUD    =15;      //0xC2-->9600; 15-->115200(117187); 14-->128000(125000);3-->500000(468750)
        SciaRegs.SCIHBAUD    =scihbaud;
    
    
        //此处有些不同
     	SciaRegs.SCILBAUD    =scilbaud;
    
        SciaRegs.SCICTL1.bit.SWRESET = 1;     // Relinquish SCI from Reset
    
        SciaRegs.SCIFFTX.bit.SCIRST=1;
    	SciaRegs.SCIFFRX.bit.RXFFIL  = SCI_FIFO_LEN;  //设置FIFO深度=1
    	SciaRegs.SCICTL1.bit.TXENA = 1;       //使能发送
    	SciaRegs.SCICTL1.bit.RXENA = 1;       //使能接收
    
    //	SciaRegs.SCICTL2.bit.TXINTENA =1;
    //	SciaRegs.SCICTL2.bit.RXBKINTENA =1;
    //  SciaRegs.SCIFFTX.bit.TXFFIENA = 0; //禁止发送中断使能
    
    	//中断配置步骤-----1
    	SciaRegs.SCIFFTX.bit.SCIFFENA = 1; //使能FIFO中断
    	SciaRegs.SCIFFRX.bit.RXFFIENA=1;
    
    	//中断配置步骤-----2
    	EALLOW;
    	PieVectTable.SCIRXINTA = &uartRx_isr;
    	EDIS;
    
    	//中断配置步骤-----3
    	PieCtrlRegs.PIEIER9.bit.INTx1 = 1;
    
    	//中断配置步骤-----4
    	IER |= M_INT9;
    
    	SciaRegs.SCIFFCT.all=0x00;
    
    	SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
    	SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
    	printf("\r\nSCI口 init...OK");//2023.7.13  zs  加
    }
    
    //#################################################
    //-----------------------------------------------
    //发送一个字节
    //-----------------------------------------------
    void scia_xmit(int a)
    {
    	Uint32 WaitTimer = 0;
    
    	//while (SciaRegs.SCIFFTX.bit.TXFFST != 0)
    	while(SciaRegs.SCICTL2.bit.TXEMPTY != 1) //发送缓存寄存寄如果不为空,则等待执行
    											//waitTimer 时间
    	{
    		WaitTimer++;
    		if(WaitTimer > TIMEROUTSCI)break;
    	}
    	if(WaitTimer <= TIMEROUTSCI)
    		SciaRegs.SCITXBUF=a;
    }
    
    //#################################################
    //-----------------------------------------------
    //发送字符串(待理解)
    //Enter,带回车换行次数
    //-----------------------------------------------
    void sciPutString(char Enter1,char *s, char Enter2)
    {
    	char i;
    
    	for(i=0;i<Enter1;i++)
    	{
    		scia_xmit(0x0D);
    		scia_xmit(0x0A);
    	}
    
    	while(*s!=0)
    	{
    		scia_xmit(*(s++));
    	}
    
    	for(i=0;i<Enter2;i++)
    	{
    		scia_xmit(0x0D);
    		scia_xmit(0x0A);
    	}
    }
    
    
    //-------------------------------以下都为 标准 printf函数连接--------------------------------------------------------------
    //#################################################
    //-----------------------------------------------
    //Printf 函数连接
    //-----------------------------------------------
    void open_uart_debug (void)
    {
    	int status=0;
    	status = add_device("uart", _MSA, my_open, my_close, my_read, my_write, my_lseek, my_unlink, my_rename);
    	if (status == 0) {
    		freopen("uart:", "w", stdout);		// open uart and redirect stdout to UART
    		setvbuf(stdout, NULL, _IONBF, 0); 	// disable buffering for stdout
    	}
    }
    
    int my_open(const char *path, unsigned flags, int fno)
    {
    	//scia_fifo_init();
    	//scia_echoback_init();
    	path = path;
    	flags = flags;
    	fno = fno;
    	return 0;
    }
    
    int my_close(int fno)
    {
    	fno =fno;
    	return 0;
    }
    
    int my_read(int fno, char *buffer, unsigned count)
    {
    	fno = fno;
    	buffer = buffer;
    	count = count;
    	return 0;
    }
    
    int my_write(int fno, const char *buffer, unsigned count)
    {
    	int i=0;
    	fno = fno;
    
    	while(count-- > 0) {
    		scia_xmit(buffer[i++]);
    	}
    	return count;
    }
    
    off_t my_lseek(int fno, off_t offset, int origin)
    {
    	fno = fno; offset = offset; origin = origin;
    	return 0;
    }
    
    int my_unlink(const char *path)
    {
    	path = path;
    	return 0;
    }
    
    int my_rename(const char *old_name, const char *new_name)
    {
    	old_name = old_name;
    	new_name = new_name;
    	return 0;
    }
    
    //****************************
    // No More
    //****************************
    
    

    sci.h 文件

    /*
     * sci.h
    
     */
    
    #ifndef APP_SCI_SCI_H_
    #define APP_SCI_SCI_H_
    
    #include "DSP2803x_Device.h"     // DSP2833x 头文件
    #include "DSP2803x_Examples.h"   // DSP2833x 例子相关头文件
    #include <stdio.h>
    #include <file.h>
    
    
    #define SCIBaudRate   115200L
    #define TIMEROUTSCI (Uint32)10*(SYSCLK/SCIBaudRate) //估算的等待超时时间,请根据实际修改
    
    
    #define SCI_FIFO_LEN  1 //定义DSP串口FIFO深度
    
    #define UartRxLEN 8  //接收缓存长度
    #define UartTxLEN 1  //发送缓存长度
    
    typedef struct Uart_Type{
    	union
    	  {
    	    Uint16 All;
    	    struct{
    	            Uint16  UartRevFlag        :1;  //接收到数据标志
    	            Uint16  rFifoDataflag      :1;  //接收内存非空
    	    		}Status_Bits;
    	  	}Mark_Para;
    	  	Uint16 rxData[UartRxLEN];				//接收缓存
    	Uint16 rxReadIndex;                         //接收FIFO写入索引:写入数据的长度?
    	Uint16 rxWriteIndex;                        //接收FIFO读出索引:读出数据的长度?
    }
    Uart_Msg;
    
    extern Uart_Msg SCI_Msg;
    
    //函数声明
    void handleRxFIFO(void);
    void SCI_Init(Uint32 baud);
    void usart1_send_byte(int a);
    void usart1_send_char(unsigned char * msg);
    void open_uart_debug (void);
    int printf(const char* str, ...);
    
    
    //标准 printf函数连接
    int my_open(const char *path, unsigned flags, int fno);
    int my_close(int fno);
    int my_read(int fno, char *buffer, unsigned count);
    int my_write(int fno, const char *buffer, unsigned count);
    off_t my_lseek(int fno, off_t offset, int origin);
    int my_unlink(const char *path);
    int my_rename(const char *old_name, const char *new_name);
    
    
    
    #endif /* APP_SCI_SCI_H_ */
    

    main.c 文件:"sci"代码仅出现在 main.c 中。

    /*
     * main.c
     *
     *
     */
    
    
    #include "DSP2803x_Device.h"     // DSP2833x Headerfile Include File
    #include "DSP2803x_Examples.h"   // DSP2833x Examples Include File
    #include "DSP2803x_Project.h"
    #include "math.h"
    #include "IQmathLib.h"
    #include "head.h"
    #include "stdio.h"
    #include "bmp280.h"
    #include "leds.h"
    
    
    extern Uint16 RamfuncsLoadSize;
    
    float pitch,roll,yaw; 		//欧拉角
    
    short aacx,aacy,aacz;		//加速度传感器原始数据
    short gyrox,gyroy,gyroz;	//陀螺仪原始数据
    short magx,magy,magz;		//磁力计原始数据
    short temp;				    //温度
    
    
    
    
    void main()
    {
    	//long BMP_Pressure;
    //	double	BMP_Pressure,BMP_Temperature;//压力和温度
        //double  BMP_Pressure;
    	InitSysCtrl();//系统时钟初始化,默认已开启F28335所有外设时钟
    
    	InitGpio();
    
    	DINT;
    
    	InitPieCtrl();
    
    	IER = 0x0000;
    	IFR = 0x0000;
    
    	InitPieVectTable();
    
    	//复制对时间敏感代码和FLASH配置代码到RAM中
    	// 包括FLASH初始化函数 InitFlash();
    	// 链接后将产生 RamfuncsLoadStart, RamfuncsLoadEnd, 和RamfuncsRunStart
    	// 参数. 请参考 F28335.cmd 文件
    	memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (Uint32)&RamfuncsLoadSize);
    	// 调用FLASH初始化函数来设置flash等待状态
    	// 这个函数必须在RAM中运行
    	InitFlash();
    
    
    	////////////////////////////////////////////
    	//   SCI口初始化
    	////////////////////////////////////////////
    	SCI_Init(115200);//波特率115200(117187)
    	open_uart_debug();//串口硬件连接到printf标准函数
    	printf("\r\n\r\n\r\nDSP is Ready");
    	printf("\r\nSCI口 init...OK");
    
    	///////////////////////////////////////////////
    	// GPIO口(LED)初始化
    	///////////////////////////////////////////////
    	LED_Init();
    	printf("\r\nLEDGPIO口...OK");
    
    	///////////////////////////////////////////
    	// I2C口初始化(MPU6050模块初始化)
    	///////////////////////////////////////////
    //	MPU_Init();			  //初始化MPU9250!
    //	printf("\r\nMPU_Init init...OK");
    
    	//中断配置步骤-----5
    	PieCtrlRegs.PIECTRL.bit.ENPIE = 1;    // Enable the PIE block
    	EINT;                                 // Enable Global interrupt INTM
    	ERTM;//请参看 使用须知 文件夹下的   分享--ERTM、DRTM 在DSP编程中的作用.pdf
    
    
    	//mpu_dmp检测函数
    	//注意:杜邦线接短点,MPU6050放平
    		    while(1)  //初始化成功,则返回0,不运行下面的代码
    		    //while(mpu_dmp_init())  //初始化成功,则返回0,不运行下面的代码
    		 	{
    		    	//error = mpu_dmp_init();
    		    			printf("ERROR:%d\r\n",mpu_dmp_init());
    		    			switch (mpu_dmp_init())
    		    			{
    		    				case 0:printf("DMP库初始化正常\r\n");break;
    		    				case 1:printf("设置传感器库失败\r\n");break;
    		    				case 2:printf("设置FIFO库失败\r\n");break;
    		    				case 3:printf("设置采样率失败\r\n");break;
    		    				case 4:printf("加载DMP固件失败\r\n");break;
    		    				case 5:printf("设置陀螺仪方向失败\r\n");break;
    		    				case 6:printf("设置DMP功能失败\r\n");break;
    		    				case 7:printf("设置DMP输出速率失败\r\n");break;
    		    				case 8:printf("自检失败\r\n");break;
    		    				case 9:printf("使能DMP失败\r\n");break;
    		    				case 10:printf("初始化MPU9250失败\r\n");break;
    		    				default:printf("未知错误\r\n");break;
    		    			}
    		    			if(mpu_dmp_init() == 0)break;
    	            printf("\r\nmpu_dmp检测不正常!");
    				DELAY_US(500*1000);
    				//LED2_TOGGLE;      //LED灯D3闪烁,mpu_dmp检测不正常!
    			}
    			printf("\r\n实现功能:");
    			printf("\r\n发送加速度传感器数据aaci");
    			printf("\r\n发送陀螺仪值gyroi");
    			printf("\r\n发送欧拉角roll、pitch、yaw");
    
    	//陀螺仪采样率:            4~1000(Hz);目前是50Hz
    	//roll:横滚角.单位0.01度。  (-90.0°, +90.0°)
    	//pitch:俯仰角.单位 0.01度。(-180.0°, +180.0°)
    	//yaw:航向角.单位为0.1度    (-180.0°, +180.0°)
    	//温度值:扩大了100倍
    	//aaci加速度传感器原始数据:±2g
    	//gyroi陀螺仪原始数据:      ±2000dps
    
    			while(1)
    			{
    				//MPU_Read();
    				//DATA_Report();
    
    				if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)      //获取欧拉角
    				{
    					temp=MPU_Get_Temperature();	                //获取温度值
    					MPU_Get_Accelerometer(&aacx,&aacy,&aacz);	//获取加速度传感器数据
    					MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);	//获取陀螺仪数据
    					MPU_Get_Magnetometer(&magx,&magy,&magz);	//获取磁力计数据
    
    					printf("\n\r Pitch:%0.2f°;Roll:%0.2f°;Yaw:%0.2f°",pitch,roll,yaw);    //显示欧拉角
    					printf("\n\r temp:%0.4d℃",temp);                                             //显示温度
    					//printf("\r\n aacx :%0.4d  ;aacy : %0.4d  ;aacz :%0.4d  ",aacx,aacy,aacz);    //显示加速度传感器原始数据
    					//printf("\r\n gyrox:%0.4d  ;gyroy: %0.4d  ;gyroz:%0.4d  ",gyrox,gyroy,gyroz); //显示陀螺仪原始数据
    					//printf("\r\n magx :%0.4d  ;magy: %0.4d   ;magz :%0.4d  ",magx,magy,magz); //显示陀螺仪原始数据
    					printf("\n\r");
    					DELAY_US(200*1000);
    
    				}
    
    				DELAY_US(200*1000);
    
    			} //end while(1)
    
    
    
    }
    
    

    此致、

    安迪

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

    Andy、您好!

    您是否可以尝试将分号";"替换为"-"破折号? 我想有时分号可以被终端解释为行尾字符、我想知道这里是否发生了这种情况。

    所以我想卸载 ccs10.1.0并替换为 ccs12.5。 您认为这可能起作用吗?

    不错、另一个系统可能可以正常工作、因为旧版 CCS 中的 COMM 终端在看到分号时截断了文本。 我一定会首先尝试升级到 CCS12.5、看看这是否能解决问题。 另外、在 CCS10.1.0安装中也存在已知错误、升级可以帮助修复这些错误。

    您能否提供 TI 官方的"sci"使用代码? 您能否提供有关 printf 重定向的信息?

    对于上述问题、我们实际上在最新的 C2000Ware 中有一个示例、该示例准确地执行了您所需的操作、但对于另一个器件(f2838x 和更新的器件)则是如此。 示例名为"sci_ex4_stdout_redirect.c"

    这应该会对您想要实现的目标有很大帮助。

    此致、

    文斯