微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > TI-RTOS例程UART串口问题,无法打印出来,求指教

TI-RTOS例程UART串口问题,无法打印出来,求指教

时间:12-23 整理:3721RD 点击:

你好,这是我写的一段UART的代码,

/*串口声明*/
char input;
UART_Handle uart;
UART_Params uartParams;

static PIN_State ledPinState;
const char echoPrompt[]="\fEchoing characters:\r\n";

PIN_Config ledPinTable[] = {
Board_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
Board_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
PIN_TERMINATE
};
void echoFxn(UArg a0,UArg a1)
{

while(1)
{
UART_read(uart, &input, 1);
UART_write(uart, &input, 1);
}
}
int main(void)
{


/**************************GPIO灯********************************************/
PIN_Handle ledPinHandle;
Board_initGeneral();
ledPinHandle = PIN_open(&ledPinState, ledPinTable);
PIN_setOutputValue(ledPinHandle, Board_LED1, 1);

/*************************串口***********************************************/

UART_init(); //USart ini
UART_Params_init(&uartParams); //串口配置
uartParams.writeDataMode = UART_DATA_BINARY; //写数据模式
uartParams.readDataMode = UART_DATA_BINARY; //读数据模式
uartParams.readReturnMode = UART_RETURN_FULL; //返回模式
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudRate = 9600; //波特率
uartParams.stopBits=UART_STOP_ONE;
uartParams.parityType=UART_PAR_NONE;
uart = UART_open(Board_UART0, &uartParams); //打开串口

UART_write(uart, echoPrompt, sizeof(echoPrompt));
// UART_read(uart, &input, 1);
// UART_write(uart, &input, 1);
// System_flush();

// /* This example has logging and many other debug capabilities enabled */
// System_printf("This example does not attempt to minimize code or data "
// "footprint\n");
// System_flush();
//
// System_printf("Starting the UART Echo example\nSystem provider is set to "
// "SysMin. Halt the target to view any SysMin contents in "
// "ROV.\n");
// /* SysMin will only print to the console when you call flush or exit */
// System_flush();

/* Start BIOS */
BIOS_start();

return (0);
}

在TI-RTOS例程基础上改了一点,请问有什么问题啊,无法打印出来,求指教!

Board_initUART();

/* Construct BIOS objects */
Task_Params_init(&taskParams);
taskParams.stackSize = TASKSTACKSIZE;
taskParams.stack = &task0Stack;
Task_construct(&task0Struct, (Task_FuncPtr)echoFxn, &taskParams, NULL)

Task初始化咋没有了,你这改动不是一点。应该是无法启动任务执行。

你好,刚才把任务初始化了,还是无法进行串口打印,在进行仿真中,发现主要问题是单步调试可以执行 UART_write(uart, echoPrompt, sizeof(echoPrompt));,却无法执行UART_write(uart, &input, 1);,请问是什么问题呢,input声明过了,程序没有报错。想再请教一下您,谢谢啦

这个问题我卡了好久了,求解答呀,不胜感激!

求指教啊,谢谢啦

我在调试uart例程的时候也发现修改后可以打印字符串,但是不能打印input,但input那句是例程里写的应该没有问题,但因为不需要直接把他删了,也没有细想,当时猜测可能是input未赋值的原因

我现在也没有用input那句了只用了UART_write(uart, echoPrompt, sizeof(echoPrompt)); ,单步调试时可以进入UART_write(uart, echoPrompt, sizeof(echoPrompt)); ,但是无法通过串口助手讲字符打印出来,是怎么回事啊,没有配置成功吗?请教

意思是说你可以运行通过这句代码,但串口助手没有打印是吗?

对呀,运行通过这句代码,但是串口助手没有显示

uart初始化部分如果你是照搬例程的应该没有问题,你尝试下在bios启动后,也就是任务的回调函数中使用uartwrite,如果不行的话就应该是串口连接的问题了,不知道你用的什么连接方式

按您的方法试了一下,发现我的程序执行不到BIOS_start();,请问是什么问题啊

单步调试看看卡在哪一句

恩 就是单步调试,前面程序都可以顺利进入,UART_write(uart, echoPrompt, sizeof(echoPrompt));  也可以顺利进入,  进行到BIOS_start();时就不知道执行到哪去了

 ,请教啊

BIOSstart是永不返回的,通过初始化t的ask来执行命令,你在回调函数中设置断点,若能够运行到那说明你的task基本没问题。

我的任务建立时这样的

*任务声明*/
Task_Params taskParams;
char task0Stack[512];
Task_Struct task0Struct;

const char echoPrompt[4]={0x31,0x30,0x32,0x34};//"1024"

Task_Params_init(&taskParams);
taskParams.stackSize=sizeof(task0Stack);
taskParams.stack=&task0Stack;
Task_construct(&task0Struct,(Task_FuncPtr)echoFxn,&taskParams,NULL);

void echoFxn(UArg a0,UArg a1)
{

while(1)
{
UART_write(uart, echoPrompt, sizeof(echoPrompt));
CPUdelay(1000);
}
}

编译没有报错,但是好像无法进入任务,请教一下,有什么问题吗?

ask_Params taskParams;
char task0Stack[512];
Task_Struct task0Struct;

有设为全局的吗?

嗯嗯 是的 全局变量

  例程里有一句taskParams.priority = 2;你加上试试

我加了这句代码 taskParams.priority = 2;,还是无法运行,是不是串口没有配置成功?或者忘记调用什么了?

串口配置不成功也不会影响task

串口配置不成功,就算task创建成功,也没法打印出来啊,单步调试时,程序是可以运行到task里面的,只是打印不出来,串口助手无法显示。

串口的连接正确吗?你是用什么连接方式

正确啊 我检查过了 我用的是USB转串口

你用的ti的板子?

嗯呢,TI的CC1310,M3内核的

你用的launchpad?你可以直接接TXD,RXD引脚,不行的话直接用片上的usb试试

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top