This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在simple_peripheral例程中,如何调用打印输出功能和LED应用?谢谢!
YiKai Chen您好!首先感谢您的回复和帮助!
我在simple_peripheral.c文件添加了printf("LED ON\n");结果编译报错,该怎么设置呢?
https://dev.ti.com/tirex/explore/node?node=ANqagjxZxWnBRB7bx0EnOw__pTTHBmu__LATEST 理頭不是建議你用Display_printf、為什麼你要直接用printf?
YiKai Chen您好!首先感谢您的回复和帮助!
我在simple_peripheral.c文件,static void SimplePeripheral_processCharValueChangeEvt(uint8_t paramId)函数做如下修改:
烧录后读不到UUID特性,屏蔽后可以,是不我的写法错误呢?
Display_printf的使用参考例程https://dev.ti.com/tirex/explore/node?node=AMfLSuSoMzVcuQ9LjadFHQ__pTTHBmu__LATEST
simple_peripheral例程裡面直接調用"Display_printf(dispHandle,..."就可以打印到UART了,你SimplePeripheral_processCharValueChangeEvt應該只有Char1/Char3的特徵值有改變才會被調用,你BTool裡面用"Read Using Characteristic UUID"根本不會改變Char1的特徵值阿
YiKai Chen您好!
我在simple_gatt_profile.h文件里添加了
#define SIMPLEPROFILE_CHAR6 5
#define SIMPLEPROFILE_CHAR6_UUID 0xFFF6
#define SIMPLEPROFILE_CHAR6_LEN 7
在simple_gatt_profile.c文件里添加了:
CONST uint8 simpleProfilechar6UUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SIMPLEPROFILE_CHAR6_UUID), HI_UINT16(SIMPLEPROFILE_CHAR6_UUID)
};
static uint8 simpleProfileChar6Props = GATT_PROP_READ;
static uint8 simpleProfileChar6[SIMPLEPROFILE_CHAR6_LEN] = { 0, 0, 0, 0, 0 };
static uint8 simpleProfileChar6UserDesp[17] = "Characteristic 6";
static gattAttribute_t simpleProfileAttrTbl[SERVAPP_NUM_ATTR_SUPPORTED] =//添加
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&simpleProfileChar6Props
},
{
{ ATT_BT_UUID_SIZE, simpleProfilechar6UUID },
GATT_PERMIT_AUTHEN_READ,
0,
simpleProfileChar6
},
{
{ ATT_BT_UUID_SIZE, charUserDescUUID },
GATT_PERMIT_READ,
0,
simpleProfileChar6UserDesp
},
simpleProfile_ReadAttrCB//添加
case SIMPLEPROFILE_CHAR6_UUID:
*pLen = SIMPLEPROFILE_CHAR6_LEN;
VOID memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR6_LEN );
break;
simpleProfile_WriteAttrCB//添加
case SIMPLEPROFILE_CHAR6_UUID:
if ( offset == 0 )
{
if ( len != SIMPLEPROFILE_CHAR6_LEN )
{
status = ATT_ERR_INVALID_VALUE_SIZE;
}
}
else
{
status = ATT_ERR_ATTR_NOT_LONG;
}
if ( status == SUCCESS )
{
VOID memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR6_LEN );
notifyApp = SIMPLEPROFILE_CHAR6;
}
break;
在simple_peripheral.c
static void SimplePeripheral_processCharValueChangeEvt(uint8_t paramId)//添加
case SIMPLEPROFILE_CHAR6:
SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR6,&buf);
if (osal_memcmp(buf,"LED_ONN",SIMPLEPROFILE_CHAR6_LEN))
{
}
if (osal_memcmp(buf,"LED_OFF",SIMPLEPROFILE_CHAR6_LEN))
{
}
break;
想通过CHAR6的数据实现红外线发射,不知道这种方法对不对呢?谢谢!
YiKai Chen您好!
我定义了:
static uint8 simpleProfileChar6Props = GATT_PROP_READ | GATT_PROP_WRITE;
在函数:
static void SimplePeripheral_processCharValueChangeEvt(uint8_t paramId)
添加了:uint8_t buf[7];
case SIMPLEPROFILE_CHAR6:
SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR6,&buf);
if (osal_memcmp(buf,"LED_ONN",SIMPLEPROFILE_CHAR6_LEN))
{
Display_printf(dispHandle, 0, 0, "LED_ONN");
}
if (osal_memcmp(buf,"LED_OFF",SIMPLEPROFILE_CHAR6_LEN))
{
Display_printf(dispHandle, 0, 0,"LED_OFF");
}
break;
测试时,第一个特性值可以实现读写,第六个操作失败,截图如下:
用Read Using Characteristic UUID读取第六个属性值提示:认证不足。
用Discover Characteristic by UUID可以读取
写入失败
我在上面的操作中,哪个步骤操作错误?还是代码有问题呢
YiKai Chen您好!
刚才看了下是static gattAttribute_t simpleProfileAttrTbl属性设置错误一个,现在可以发送成功,
但是串口没有打印输出。
我对SimplePeripheral_processCharValueChangeEvt(uint8_t paramId)进行修改如下:
是写法有误么
YiKai Chen您好!
我在simpleProfile_ReadAttrCB添加了以下代码:
case SIMPLEPROFILE_CHAR6_UUID:
*pLen = SIMPLEPROFILE_CHAR6_LEN;
VOID memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR6_LEN );
break;
在simpleProfile_WriteAttrCB添加了以下代码:
case SIMPLEPROFILE_CHAR6_UUID:
if ( offset == 0 )
{
if ( len != SIMPLEPROFILE_CHAR6_LEN )
{
status = ATT_ERR_INVALID_VALUE_SIZE;
}
}
else
{
status = ATT_ERR_ATTR_NOT_LONG;
}
if ( status == SUCCESS )
{
VOID memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR6_LEN );
notifyApp = SIMPLEPROFILE_CHAR6;
}
break;
是不是这个思路不对,正确的做法因该是怎么实现呢?
YiKai Chen您好!
代码是参考一本蓝牙4.0BLE的书修改的,但是SDK版本不同,修改后实现不了功能。书上是通过BTool写入指令实现控制板上的LED及串口打印信息。我想通过这样实现红外转发。
我這邊試了屏蔽掉ProjectZero_LedService_ValueChangeHandler內的代,码编译烧录后执行,LED就不可以受APP控制了,你是不是程序沒燒錄進去
YiKai Chen您好!
bim_offchip_CC26X2R1_LAUNCHXL_nortos_ccs也需要执行这样的操作吧?是不先执行bim_offchip_CC26X2R1_LAUNCHXL_nortos_ccs再执行project_zero_CC26X2R1_LAUNCHXL_tirtos_ccs还是只执行project_zero_CC26X2R1_LAUNCHXL_tirtos_ccs就可以
需要先执行bim_offchip_CC26X2R1_LAUNCHXL_nortos_ccs再执行project_zero_CC26X2R1_LAUNCHXL_tirtos_ccs
YiKai Chen您好!
呵呵,感觉Ti的BLE有点无从入手,昨天折腾一天反复烧录N多次,刚才参照教程烧录,运行结果和之前一样,我屏蔽了LED0的代码结果一样可以执行。还有其它烧录软件可以用不?
YiKai Chen您好!
问题有点奇怪哦,Debug时结果和代码是一致的:
LED0既无变化也无打印输出,LED1我只屏蔽了开关操作LED1不能实现开关了,但是依然可以打印。
YiKai Chen您好!
Debug时LED0既无变化也无打印输出,LED1我只屏蔽了开关操作LED1不能实现开关了,但是依然可以打印,这个运行结果和代码一致。但是当把.hex文件烧录到板子后LED0一样可以受APP控制开关、依然有打印输出,LED1也一样可以实现开关控制。运行结果和代码就不一致了,昨天折腾一天都这样。
你燒錄project_zero_CC26X2R1_LAUNCHXL_tirtos_ccs hex之前必須要先燒錄BIM然後,並且在燒錄project_zero_CC26X2R1_LAUNCHXL_tirtos_ccs之前不要做flash erase的動作,也要確認flash programmer 2沒有選erase,不然你會把BIM給erase掉,然後你的CC2652RB就會從external flash去重新載入預設的project_zero導致你看到的問題
YiKai Chen您好!
我的CC2652RB没有外接flash所以现在是用LAUNCHXL-CC26X2R1烧录project_zero文件,用CC2652RB连接Btool;当用Multiple模式烧录就会出现之前的问题,运行结果和代码不一致,但是可以烧录成功:
当用Single模式烧录,在烧录bim时我勾选了Erase烧录project_zero取消勾选Erase结果烧录不成功:
你試試看用我附上的bim_offchip_CC26X2R1_LAUNCHXL_nortos_ccs.hex/project_zero_CC26X2R1_LAUNCHXL_tirtos_ccs.hex烧录到你的LAUNCHXL-CC26X2R1看看會不會動作