大家好:
SDK版本: simplelink_cc13x2_26x2_sdk_4_40_00_44
例程:zed_sw_ota_client
MCU:CC1352P-2 LP 开发环境:CCS10
请教大家一个问题
我在使用UART2_Callback模式处理串口接收时遇到一个问题,当串口发数据较长时,进入我callback中Set的event会不稳定,有时进一次,有时进两次。
付代码如下:
说明:在zclSampleSw_Init()中调用 hl_uart_open();初始化Uart2,当有串口数据接收到时,会进入我写的loop(在zclSampleSw_process_loop 主loop中)
在里边打印字符串“uart”。图三为我UART2配置,RX TX Ring Buffer 都为32
现象:当我发送数据较长时 31个字节(如下图2),发现会不稳定,有时进一次我的loop 有时进2次,图一是4字节,只会进一次loop
问题:请问是不是这个buffer满了?这个32是单位为字节吗?callback模式下如何处理接收较长的数据?
感谢!!!
uint8_t ch_uart;
// write a string
void hl_print_string(char *buffer)
{
char symbol[2] = "\r\n";
UART2_write(UartHandle,buffer,strlen(buffer),NULL);
UART2_write(UartHandle,symbol,2,NULL);
}
//open && init
void hl_uart_open(void)
{
UART2_Params_init(&UartParams);
UartParams.baudRate = 115200;
UartParams.readMode = UART2_Mode_CALLBACK;
UartParams.readCallback = AtProcess_processingLoop;
UartHandle = UART2_open(CONFIG_UART2_0, &UartParams);
if(UartHandle == NULL)
{
hl_print_string("Error opening the UART");
}
else
{
hl_print_string("UART open success");
status = UART2_read(UartHandle, &ch_uart, 1,NULL);
}
}
//read callback
void AtProcess_processingLoop(UART2_Handle _handle, void *_buf, size_t _size, void *userArg, int_fast16_t status)
{
if (status != UART2_STATUS_SUCCESS)
{
hl_print_string("Error");
}
UART2_read(UartHandle, &ch_uart, 1,NULL);
hlAppLoopEvents |= HL_ZED_UART_EVT;
Semaphore_post(appSemHandle);
}
//my loop in zcl_samplesw.c
void hlApp_event_loop(void)
{
if(hlAppLoopEvents & HL_ZED_1_EVT)
{
hlAppLoopEvents &= (~HL_ZED_HEART_EVT);
}
if(hlAppLoopEvents & HL_ZED_UART_EVT)
{
hl_print_string("uart");
hlAppLoopEvents &= (~HL_ZED_UART_EVT);
}
}



