cc1310 uart问题
下载了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是仿真的时候调试界面打印用的,平时串口出不来的。