TI-RTOS例程UART串口问题,无法打印出来,求指教
你好,这是我写的一段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试试