微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > cc1310 uart问题

cc1310 uart问题

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

下载了cc1310 uartecho例程,为什么功能函数中while(1)中的语句不执行?请各位大哥指导一下,感谢!

Void echoFxn(UArg arg0, UArg arg1)
{
char input;
UART_Handle uart;
UART_Params uartParams;
const char echoPrompt[] = "\fEchoing characters:\r\n";

/* Create a UART with data processing off. */
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;
uart = UART_open(Board_UART0, &uartParams);

if (uart == NULL) {
System_abort("Error opening the UART");
}

UART_write(uart, echoPrompt, sizeof(echoPrompt));

/* Loop forever echoing */
while (1) {
UART_read(uart, &input, 1);
UART_write(uart, &input, 1);
PIN_setOutputValue(ledPinHandle, Board_LED2,!PIN_getOutputValue(Board_LED2));
}
}

你对示例代码做了什么修改吗?

你是通过什么判断while(1)中定的语句不执行的?

并无修改,我只是加了一个LED用于指示,用示波器发现LED两端并未发生波形变化,LED状态未变

看看uart的收发功能是不是正常,这个是阻断式的接收,只有接收到串口数据才会继续执行一次

这个示例代码是把串口接收到的数据再通过串口打出来

你如果没有通过串口输入数据,是不会有串口输出的,也不会触发LED反转

Felix ZF,你好!

我已经向串口发送数据,但是没收到回复。但是while(1)循环外的uart_write发送的数组可以收到。我是想做成一个串口中断的,请问我应该怎样配置?

你好,我向串口发送数据,依然没有接收

n你可以先使用原始的示例代码进行调试,看看串口收发是否正常。

如果正常,再加入你自己的代码,这样方便确定问题出在哪里

另外,你可以通过ROA看看当前各个task、semphore等组件的状态

UART_init();
UART_Params_init(&uartParams);
uartParams.readMode = UART_MODE_CALLBACK;
uartParams.readCallback = Uart_ReadCallback;
uartParams.writeCallback = Uart_WriteCallback;
uartParams.writeMode = UART_MODE_CALLBACK;
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_RETURN_FULL;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudRate = 115200;
uart = UART_open(Board_UART0, &uartParams);

void Uart_ReadCallback(UART_Handle handle, void *rxBuf, size_t size)
{
UART_write(handle, Uart_RxTempBuf, 1);
}

void Uart_WriteCallback(UART_Handle handle, void *txBuf, size_t size)
{
UART_read(handle, Uart_RxTempBuf, 1);
}

自己移植一下中断方式的

你好,下面的两个函数是不是类似于中断服务函数?如果我要接收一串数据后给LED置位,我以下程序是否可以?

void Uart_ReadCallback(UART_Handle handle, void *rxBuf, size_t size)
{
UART_write(handle, &LIN_TmpSCIByte, 1);
LIN_RxCompleted();
if(RS232HAS_DAT_FLAG){
RS232HAS_DAT_FLAG=0;
PIN_setOutputValue(ledPinHandle, Board_LED0,!PIN_getOutputValue(Board_LED0));////RED
}
}

发送的为何要使用UART_write函数?感谢回答!

我建议你给uart建一个任务,然后任务调度来处理。任务初始化如下。程序其他自己去研究。

void Uart_Thread_Init(uint8_t priority)
{
    Task_Params      taskParams;

    Task_Params_init(&taskParams);
    taskParams.stackSize    = TASKSTACKSIZE;
    taskParams.stack        = &task_uart_Stack;
    taskParams.priority     = priority;
    Task_construct(&task_uart_Struct, (Task_FuncPtr)UART_taskFxn, &taskParams, NULL);
}

void UART_taskFxn(UArg arg0, UArg arg1)
{
    UART_init();
    UART_Params_init(&uartParams);
    uartParams.readMode         = UART_MODE_CALLBACK;
    uartParams.readCallback     = Uart_ReadCallback;
    uartParams.writeCallback    = Uart_WriteCallback;
    uartParams.writeMode        = UART_MODE_CALLBACK;
    uartParams.writeDataMode    = UART_DATA_BINARY;
    uartParams.readDataMode     = UART_DATA_BINARY;
    uartParams.readReturnMode   = UART_RETURN_FULL;
    uartParams.readEcho         = UART_ECHO_OFF;
    uartParams.baudRate         = 115200;
    uart = UART_open(Board_UART0, &uartParams);
    if (uart == NULL)
    {
        while (1);/* UART_open() failed */
    }
    Uart_Send_char("\r\n***uart thread***\r\n");
    while (1)
    {
        Task_sleep(Task_Sleep);//休息10ms
    }
}


void Uart_Send_Byte(uint8_t data)
{
    UART_write(uart, &data, 1);
}

void Uart_Send_char(char *data)
{
    UART_write(uart, data, strlen(data));
}
 

cc1310的串口只能用UART_write这个函数,不能用printf。。另外你再例程里面看见的System_abort是仿真的时候调试界面打印用的,平时串口出不来的。

上一篇:task阻塞
下一篇:CC1101的WOR无法唤醒

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

网站地图

Top