CC1310一直无法进入串口读回调函数readCallback(UART_Handle uarthandle, void *rxBuf, size_t size),代码如下:
unsigned char lhg3[] = "lhg3";
static void readCallback(UART_Handle uarthandle, void *rxBuf, size_t size)
{
size_t i = 0;
// Make sure we received all expected bytes
if (size == wantedRxBytes) {
// Copy bytes from RX buffer to TX buffer
for(i = 0; i < size; i++)
txBuf[i] = ((uint8_t*)rxBuf)[i];
uart_receive_flag=1;
UART_read(uarthandle, rxBuf, wantedRxBytes);
}
else {
// uarthandle error or call to UART_readCancel()
}
}
// Write callback function
static void writeCallback(UART_Handle uarthandle, void *rxBuf, size_t size)
{
// Do nothing
}
/*
* ======== mainThread ========
*/
void *uart_task(void *arg0)
{
/* Create a UART with data processing off. */
UART_Params_init(&uartparams);
uartparams.writeMode = UART_MODE_CALLBACK;
uartparams.writeDataMode = UART_DATA_BINARY;
uartparams.writeCallback = writeCallback;
uartparams.readMode = UART_MODE_CALLBACK;
uartparams.readDataMode = UART_DATA_BINARY;
uartparams.readCallback = readCallback;
uartparams.readReturnMode = UART_RETURN_NEWLINE;//UART_RETURN_FULL UART_RETURN_NEWLINE
uartparams.readEcho = UART_ECHO_OFF;
uartparams.baudRate = 115200;
// Open the UART and initiate the first read
uarthandle = UART_open(Board_UART0, &uartparams);
rxBytes = UART_read(uarthandle, rxBuf, wantedRxBytes);
UART_write(uarthandle, "\r\nUart_task begin……\r\n", 25);
/* Loop forever echoing */
while (1) {
if(uart_receive_flag==1 ){
uart_receive_flag=0;
UART_write(uarthandle,lhg3,sizeof(lhg3));
}
}
}
/*
* ======== uart_taskint ========
*/
void uart_taskint(void){
Task_Params_init(&taskParams);
taskParams.stackSize = uart_THREADSTACKSIZE;
taskParams.stack = &uart_taskStack;
taskParams.priority = 2;
Task_construct(&uart_taskStruct, uart_task, &taskParams, NULL);
}
上述程序串口可以输出Uart_task begin……,最后一直在while (1) 循环,一直不能进入串口接收回调函数readCallback,uart_receive_flag无法置1。已经困扰几天找不原因,请各位老师指点。用的板子是官方CC1310 LaunchPad
Viki Shi:
这部分代码里没看见哪里有调用readCallback,UART_task里调用的UART_read,回调函数里也调用了 UART_read
user4343169:
回复 Viki Shi:
老师,这里设置了回调函数 uartparams.readCallback= readcallback;而且我把uart_task()里的rxBytes = UART_read(uarthandle, rxBuf, wantedRxBytes);删掉依然不能进readcallback函数。难道我理解的回调函数不是这么设置?望解答!
Viki Shi:
回复 user4343169:
这一句uartparams.readCallback = readcallback,你把readcallback赋给uartparams.readCallback,要进readCallback,要么直接调用readCallback,要么回调调用uartparams.readCallback
UART_read是在readCallback里调用的,你调用 UART_read只能进UART_read,而不是readCallback
user4343169:
回复 Viki Shi:
老师您好,我已做了如下改动,依然不能进回调函数UARTreadcallback(),请问哪里出错?期待您的回复!
static void UARTreadcallback(UART_Handle uarthandle, void *rxBuf, size_t size){ size_t i = 0; UART_readCancel(uarthandle); rxBytes = UART_read(uarthandle, rxBuf, wantedRxBytes); if (size > 0) {
for(i = 0; i < size; i++) txBuf[i] = ((uint8_t*)rxBuf)[i]; txBuf[size-1] = 00; uart_receive_count=size; } uart_receive_flag=1;}// Write callback functionstatic void UARTwritecallback(UART_Handle uarthandle, void *rxBuf, size_t size){ // Do nothing}
/* * ======== mainThread ======== */void *uart_task(void *arg0){ /* Create a UART with data processing off. */ UART_Params_init(&uartparams); uartparams.writeMode = UART_MODE_CALLBACK; uartparams.writeDataMode = UART_DATA_BINARY; uartparams.writeCallback = UARTwritecallback; uartparams.readMode = UART_MODE_CALLBACK; uartparams.readDataMode = UART_DATA_BINARY; uartparams.readCallback = UARTreadcallback; uartparams.readReturnMode = UART_RETURN_NEWLINE;//UART_RETURN_FULL UART_RETURN_NEWLINE uartparams.readEcho = UART_ECHO_OFF; uartparams.baudRate = 115200;
// Open the UART and initiate the first read uarthandle = UART_open(Board_UART0, &uartparams);
UART_write(uarthandle, "\r\nUart_task begin……\r\n", 25); /* Loop forever echoing */ while (1) {
if(uart_receive_flag==1 ){ UART_write(uarthandle,lhg3,sizeof(lhg3)); UART_write(uarthandle,txBuf,uart_receive_count); uart_receive_flag=0; uart_receive_count=0; } }}
/* * ======== uart_taskint ======== */void uart_taskint(void){
Task_Params_init(&taskParams); taskParams.stackSize = uart_THREADSTACKSIZE; taskParams.stack = &uart_taskStack; taskParams.priority = 2; Task_construct(&uart_taskStruct, uart_task, &taskParams, NULL);
}
Dongchen Li:
回复 user4343169:
uartparams.writeDataMode = UART_DATA_BINARY; 改成uartparams.writeDataMode = UART_DATA_TEXT;
user4343169:
回复 Dongchen Li:
依然不能进入回调函数
Dongchen Li:
回复 user4343169:
我看到你的串口task在while之前没有读串口。读串口的操作会清除标志位。在while之前加入读串口的命令试试。
TI中文支持网
