工程师们,你们好,我已将这份代码放到simple_peripheral中,并能正常运行,
GPTimerCC26XX_Handle hTimer; static GPTimerCC26XX_Value ReloadValue = 0; //这个值用来重装 void timerCallback(GPTimerCC26XX_Handle handle, GPTimerCC26XX_IntMask interruptMask) //触发中断事件,向串口打印完成并关闭定时器 { UART_Handle MyUart = GetUartHandle(); UART_write(MyUart, "Finish", 6); GPTimerCC26XX_stop(hTimer); } void UartTimeOutTimer_Start(void) //开启定时器 { GPTimerCC26XX_start(hTimer); } void UartTimeOutTimer_Init(void) //定时器初始化 { GPTimerCC26XX_Params params; GPTimerCC26XX_Params_init(¶ms); params.width = GPT_CONFIG_32BIT; //16bit width timer params.mode = GPT_MODE_PERIODIC; //Period timer params.direction = GPTimerCC26XX_DIRECTION_DOWN; //Timer's direction up params.debugStallMode = GPTimerCC26XX_DEBUG_STALL_OFF; //No debug stall mode while(1) { hTimer = GPTimerCC26XX_open(CC2640R2_LAUNCHXL_GPTIMER0, ¶ms); //Open timer if(hTimer == NULL) { continue; //If open failed, retry again } else break; } Types_FreqHz freq; BIOS_getCpuFreq(&freq); ReloadValue = freq.lo - 1; //47999999,这里为其赋上期望值 GPTimerCC26XX_setLoadValue(hTimer, ReloadValue); GPTimerCC26XX_registerInterrupt(hTimer, timerCallback, GPT_INT_TIMEOUT); } void UartTimeOutTimer_ReloadValue(void) //定时时间重置 { GPTimerCC26XX_setLoadValue(hTimer, ReloadValue); }
连接移植前simple_central后正常收发,但是我将这份代码移植到simple_central的时候(移植过程中在main中增加了定时器初始化,与simple_peripheral相同),出现了如下问题:
simple_central串口在接收数据后,能够通过事件到达APP(simple_central和simple_peripheral已经连接完成,simple_peripheral向simple_central发送数据正常),但是simple_central此时却无法将数据成功下发到simple_peripheral。
调试时发现如下代码中返回的status并不是SUCCESS,并且在之后串口无法工作,协议栈其他部分正常(simple_peripheral发送数据到simple_central时返回值是SUCCESS)
//Send message
status = GATT_WriteCharValue(dstConnHandle, &req, selfEntity);
if ( status != SUCCESS )
{
GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);
}
请问这个问题的原因是什么?能帮忙分析一下大概问题的方向吗?
Viki Shi:
请参考下这边的类似问题:e2e.ti.com/…/619203
GuppyCat:
前几天在逛TI的帖子时有个类似问题,这个问题的原因是修改了任务栈的大小导致的,那篇帖子中提到了任务栈的大小不要进行修改,我将任务栈大小修改后,串口正常,蓝牙协议栈正常。