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.

CC2652RB: 请教simple_peripheral应用

Expert 1395 points
Part Number: CC2652RB
Other Parts Discussed in Thread: LAUNCHXL-CC26X2R1

在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特性,屏蔽后可以,是不我的写法错误呢?

  • 您好!我在simple_peripheral.c文件中做了以下修改,编译报错。

    1、添加了头文件

    2、初始化

    3、

    是写法错误么?

                                                                    谢谢!

  • 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的数据实现红外线发射,不知道这种方法对不对呢?谢谢!

  • 基本上可行,但是你的simpleProfileChar6Props 應該要 OR上GATT_PROP_WRITE吧

  • YiKai Chen您好!
    好的,我修改下测试下,我说前天测试一直不成功。红外转发zigbee和Bluetooth哪个更合适呢?
                                                                                                                  谢谢!

  • 基本上我都做過,都可以,沒有哪个更合适,看客戶應用場景,跟手機直連就用BLE比較适合,如果透過hub,就Zigbee比較适合

  • YiKai Chen您好!
    好的,谢谢!我先尝试用BLE实现下看,之前没接触过BLE开发。
                                                                                              谢谢!

  • 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可以读取

    写入失败

    我在上面的操作中,哪个步骤操作错误?还是代码有问题呢

  • simpleProfileAttrTbl裡面應該沒有設置對吧

  • YiKai Chen您好!
    刚才看了下是static gattAttribute_t simpleProfileAttrTbl属性设置错误一个,现在可以发送成功,

    但是串口没有打印输出。
    我对SimplePeripheral_processCharValueChangeEvt(uint8_t paramId)进行修改如下:

    是写法有误么

  • 你是什麼发送成功,串口没有打印输出?

  • YiKai Chen您好!
    btool显示发送成功

  • Write不會驅動SimpleProfile_GetParameter,Write應該是觸發simpleProfile_WriteAttrCB

  • 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及串口打印信息。我想通过这样实现红外转发。

  • 你要不要先去參考project_zero裡面实现控制LED的程序,深入了解一下程序碼後再來实现红外转发

  • YiKai Chen您好!

                好的,我先去看看project_zero的代码,谢谢!

  • YiKai Chen您好!

                  感觉代码怪怪的,我尝试屏蔽一部分代码,结果编译烧录后执行结果和没修改代码时是一样的,LED一样可以受APP控制。

  • 我這邊試了屏蔽掉ProjectZero_LedService_ValueChangeHandler內的代,码编译烧录后执行,LED就不可以受APP控制了,你是不是程序沒燒錄進去

  • YiKai Chen您好!

                  烧录进去了,还尝试过擦除后再烧录,也不行。为了避免混淆我还把项目改了名字;

  • 我懷疑你BIM沒燒錄好,所以執行到的是external flash上的程序,你要不要直接用CCS下載測試?

  • YiKai Chen您好!

                  好的,我查下看CCS直接下载的操作方法

  • 不是就在CCS先選好project_zero然後按下debug按鍵就可以下載進去了

  • 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了,还是改用zigbee吧。谢谢!

  • YiKai Chen您好!

                 呵呵,感觉Ti的BLE有点无从入手,昨天折腾一天反复烧录N多次,刚才参照教程烧录,运行结果和之前一样,我屏蔽了LED0的代码结果一样可以执行。还有其它烧录软件可以用不?

  • 你的問題看來跟烧录软件沒什麼關係,你要不要就用CCS去Debug執行project_zero看看你屏蔽了LED0的代码是不是起作用了

  • YiKai Chen您好!

                我是不是直接Debug项目project_zero,然后用Btool发送数据看能不能执行到LED0处是吧

  • 是的

  • YiKai Chen您好!

               问题有点奇怪哦,Debug时结果和代码是一致的:

    LED0既无变化也无打印输出,LED1我只屏蔽了开关操作LED1不能实现开关了,但是依然可以打印。

  • 從截圖看來你沒有屏蔽LED1打印當然就會打印出來啊

  • YiKai Chen您好!

            是的,这个代码和运行结果一致,可烧录后就不是这样了,烧录后LED0、和LED1一样受控,LED0一样有打印输出。

  • 代码和运行结果一致,可烧录后就不是这样了?這是什麼意思?

  • 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看看會不會動作

    project_zero-LAUNCHXL-CC26x2R1.zip

  • YiKai Chen您好!

              会动作哦

  • 我用的SDK是simplelink_cc13x2_26x2_sdk_5_10_00_48,你呢?

  • YiKai Chen您好!

               我的SDK也是:simplelink_cc13x2_26x2_sdk_5_10_00_48

  • CCS的版本呢,我用10.3.1

  • YiKai Chen您好!

                  也是一样的;

1 2