您好!
我将使用 CC2340R5 SDK 版本7.40 basic_ble 工程。
我将在 UART_2上读取和写入数据。 我最初正在通过 UART 从 MCU 向 BLE 发送命令、但如果 BLE 已断开连接/处于广播模式、则 UART 回调函数不会触发。
在读取回调函数时、它仅在我与 Android 应用建立外设连接时触发。
同样在外设中、回调并不总是触发。 它有时会错过回调。 不过、我从 UART 上获取数据。
下面是我的代码:
UART 配置:
void *mainThread(void *arg0)
{
char input;
const char echoPrompt[] = "Echoing characters:\r\n";
UART2_Params uartParams;
int32_t semStatus;
uint32_t status = UART2_STATUS_SUCCESS;
uint8_t tempbuf[64] = {0};
/* Create semaphore */
// semStatus = sem_init(&sem, 0, 0);
// if (semStatus != 0)
// {
// /* Error creating semaphore */
// // while (1) {}
// }
/* Create a UART in CALLBACK read mode */
UART2_Params_init(&uartParams);
uartParams.readMode = UART2_Mode_BLOCKING;
uartParams.writeMode = UART2_Mode_BLOCKING;
uartParams.readCallback = callbackFxn;
uartParams.baudRate = 115200;
// uartParams.readReturnMode = UART2_ReadReturnMode_PARTIAL;
uartParams.dataLength = UART2_DataLen_8;
uart_handle = UART2_open(CONFIG_DISPLAY_UART, &uartParams);
}
UART 回调:
void callbackFxn(UART2_Handle handle, void *buffer, size_t count, void *userArg, int_fast16_t status)
{
// uint8_t tempbuf[260] = {0};
if (status != UART2_STATUS_SUCCESS)
{
/* RX error occured in UART2_read() */
// while (1) {}
}
status = UART2_read(uart_handle, buffer, sizeof(count), NULL);
BLE_MCU_Cmd_parser(buffer);
}
在 main()函数中调用:
int main()
{
pthread_t thread;
pthread_attr_t attrs;
struct sched_param priParam;
int retc;
/* Register Application callback to trap asserts raised in the Stack */
halAssertCback = AssertHandler;
RegisterAssertCback(AssertHandler);
Board_init();
/* Initialize the attributes structure with default values */
pthread_attr_init(&attrs);
/* Set priority, detach state, and stack size attributes */
priParam.sched_priority = 1;
retc = pthread_attr_setschedparam(&attrs, &priParam);
retc |= pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED);
retc |= pthread_attr_setstacksize(&attrs, THREADSTACKSIZE);
if (retc != 0)
{
/* failed to set attributes */
// while (1) {}
}
retc = pthread_create(&thread, &attrs, mainThread, NULL);
if (retc != 0)
{
/* pthread_create() failed */
// while (1) {}
}
/* Update User Configuration of the stack */
user0Cfg.appServiceInfo->timerTickPeriod = ICall_getTickPeriod();
user0Cfg.appServiceInfo->timerMaxMillisecond = ICall_getMaxMSecs();
/* Initialize all applications tasks */
appMain();
/* Start the FreeRTOS scheduler */
vTaskStartScheduler();
return 0;
}