TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2640R2F: 请教:simple_central、simple_peripheral例程应用

Part Number:CC2640R2FOther Parts Discussed in Thread: CC2640R2L

开发环境:Code Composer Studi Version: 10.3. 1. 00003
SDK:simplelink_cc2640r2_sdk_5_10_00_02
我想在simple_peripheral例程增加一个Uart,在代码的初始化里添加了如下代码:

烧录后:

不添加串口烧录后打印就正常。

请教:该怎么设置,增加串口?

Kevin Qiu1:

CC2640R2F上只有一个硬件uart接口

,

WSP:

Kevin Qiu1您好!

   任意IO都可以么?这样添加正确不?

     

,

Kevin Qiu1:

未被使用的IO都可以,参考uartecho例程配置uart

,

WSP:

Kevin Qiu1你好!

    最初就参考dev.ti.com/…/nodeContent

,

YiKai Chen:

我記得在你的另一個帖子已經幫過你如何配置UART2了,基本上CC2640R2的作法是類似的,只是不用UART2

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!          是的,在那个帖子请教过您CC2562RB,但是发现SDK:simplelink_cc2640r2_sdk_5_10_00_02的界面和那个不一样,无法通过sysconf设置,没有sysconf这个选项,来定义UART2。

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!我在simple_peripheral.c初始化加了: UART_Params_init(&uartParams); uartParams.writeDataMode = UART_DATA_BINARY; uartParams.readDataMode = UART_DATA_BINARY; uartParams.readReturnMode = UART_RETURN_FULL; uartParams.readEcho = UART_ECHO_OFF; uartParams.baudRate = 115200; uart = UART_open(Board_UART2, &uartParams); if (uart == NULL) { //UART_open() failed while (1); }我在CC2640R2_LAUNCHKL.h文件定义了:#define CC2640R2_LAUNCHXL_UART2_RX IOID_21#define CC2640R2_LAUNCHXL_UART2_TX IOID_22添加了:typedef enum CC2640R2_LAUNCHXL_UART2Name { CC2640R2_LAUNCHXL_UART2 = 0,

CC2640R2_LAUNCHXL_UART2COUNT} CC2640R2_LAUNCHXL_UART2Name;依然不行,我记得CC2562RB在sysconf设置后会生成一个Uart2.h文件,这个SDK版本的要自己建立一个Uart2.h文件么?

,

YiKai Chen:

ble5_simple_peripheral_cc2640r2lp_app_FlashROM_StackLibrary.opt裡的BOARD_DISPLAY_USE_UART要設置為0,CC2640R2不支持UART2

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!       好的,TXD、RXD的IO需要自己来定义么?

,

YiKai Chen:

建議是自行定義

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助! 我在CC2640R2_ LAUNCHKL.h 定义了:#define CC2640R2_LAUNCHXL_UART0_RX      IOID_21#define CC2640R2_LAUNCHXL_UART0_TX       IOID_22在Bord.h文件定义了:#define Board_UART0_RXD     CC2640R2_LAUNCHXL_UART0_RX #define Board_UART0_TXD      CC2640R2_LAUNCHXL_UART0_TX在simple_peripheral.c初始化添加了: UART_Params_init(&uartParams); uartParams.writeDataMode = UART_DATA_BINARY; uartParams.readDataMode = UART_DATA_BINARY; uartParams.readReturnMode = UART_RETURN_FULL; uartParams.readEcho = UART_ECHO_OFF; uartParams.baudRate = 115200; uart = UART_open(Board_UART0, &uartParams); if (uart == NULL) { //UART_open() failed while (1); } UART_write(uart, echoPrompt, sizeof(echoPrompt));

修改了:

现在是这样,烧录后串口没反应;帮看下是我那一步定义出问题了,谢谢!

,

YiKai Chen:

有調試看看if (uart == NULL)是不是成立嗎?

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!

          是的,代码卡在这里;

if (uart == NULL) { //UART_open() failed GPIO_write(Board_GPIO_LED0, Board_GPIO_LED_ON); while (1); } else {

GPIO_write(Board_GPIO_LED0, Board_GPIO_LED_OFF); }

现在LED常亮

,

YiKai Chen:

UART_Params_init之前有調用UART_init()嗎?

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!

           刚刚添加了,烧录后还是不行,还是会卡在uart == NULL

,

YiKai Chen:

看來你的BOARD_DISPLAY_USE_UART還是在使能狀況,不然你不應該會看到*Simple Peripheral的輸出

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!             那现在该怎么修改呢?修改那一部分呢

,

Kevin Qiu1:

上面的回复有点问题,CC2640R2F上只有一个硬件uart接口,

如果要使用两个uart,需要使用IO模拟串口

,

WSP:

Kevin Qiu1你好!

      我现在需要怎么修改代码呢?

,

YiKai Chen:

BOARD_DISPLAY_USE_UART設置為0后你有沒有clean project 再build project?

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!           没有哦,设置好后直接build project了,我现在先clean project 再build project试下。

,

YiKai Chen:

我剛剛用我的LAUNCHXL-CC2640R2F測試是可以的,應該是你沒有做先clean project 再build project

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!我刚刚第一步: 设置:-DBOARD_DISPLAY_USE_UART=1            -DBOARD_DISPLAY_USE_UART_ANSI=1然后:build project第二步:设置:-DBOARD_DISPLAY_USE_UART=0          -DBOARD_DISPLAY_USE_UART_ANSI=0先clean project 再build project现在代码还是卡在初始化,若不这样;我按照现在的IO及设置重新建个项目,按流程再来一次。

,

YiKai Chen:

下面是我初始化的程序給你參考,我猜你的問題應該是在UART_Open 應該要用Board_UART0

UART_init();/* Create a UART in CALLBACK read mode */UART_Params_init(&uartParams);//uartParams.readMode = UART_Mode_CALLBACK;//uartParams.readCallback = callbackFxn;uartParams.baudRate = 115200;uart = UART_open(Board_UART0, &uartParams);if (uart == NULL) {/* UART2_open() failed */while (1);}/* Pass NULL for bytesWritten since it's not used in this example */UART_write(uart, echoPrompt, sizeof(echoPrompt));

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!

          刚刚参考您的代码,还是卡在初始化,我估计是不我其它地方有设置错误。

,

YiKai Chen:

你Board_UART0的定義是?

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!在Board.h的定义为:                                #define Board_UART0     CC2640R2_LAUNCHXL_UART0                   跟踪CC2640R2_LAUNCHXL_UART0跳转到到CC2640R2_ LAUNCHEL. h                  定义为:

typedef enum CC2640R2_LAUNCHXL_UARTName { CC2640R2_LAUNCHXL_UART0 = 0, CC2640R2_LAUNCHXL_UARTCOUNT} CC2640R2_LAUNCHXL_UARTName;

,

YiKai Chen:

下面這些你不要做

CC2640R2_ LAUNCHKL.h 定义了:#define CC2640R2_LAUNCHXL_UART0_RX      IOID_21#define CC2640R2_LAUNCHXL_UART0_TX       IOID_22在Bord.h文件定义了:#define Board_UART0_RXD     CC2640R2_LAUNCHXL_UART0_RX #define Board_UART0_TXD      CC2640R2_LAUNCHXL_UART0_TX

要改腳位直接去修改CC2640R2_LAUNCHXL.h裡頭的CC2640R2_LAUNCHXL_UART_RX/CC2640R2_LAUNCHXL_UART_TX 再試試

#define CC2640R2_LAUNCHXL_UART_RX               IOID_2          /* RXD */#define CC2640R2_LAUNCHXL_UART_TX               IOID_3          /* TXD */

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助! 我把之前在Bord.h文件设置的IO全屏蔽,只在CC2640R2_LAUNCHXL.h修改了:/* UART Board */#define CC2640R2_LAUNCHXL_UART_RX IOID_21 /* RXD */#define CC2640R2_LAUNCHXL_UART_TX IOID_22 /* TXD */#define CC2640R2_LAUNCHXL_UART_CTS IOID_19 /* CTS */#define CC2640R2_LAUNCHXL_UART_RTS IOID_18 /* RTS */现在接在连接IO21、IO22的串口助手有信息显示了,但是依然卡在初始化部分。

,

YiKai Chen:

你要不要重新弄個全新的simple_peripheral重頭修改測試看看啊

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!

        好的,我这就重建项目。

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!

           高人!!!按您的步骤流程,重建项目现在初始化通过了 ,可以输出格式为”波特率:115200、停止位:1、数据位:8、奇偶校验:无“的数据了,但是不能打印终端自己的信息,这个在入网时该怎么处理

,

YiKai Chen:

不能打印终端自己的信息?你不是已經都打印出echoing characters 了

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!

      是不打印自己的ID信息,之前用RTool连接终端,通过Slave BDA 可以和终端打印的信息对照,这个以后在应用中没关系的吧

,

YiKai Chen:

你把Display UART 去掉了就不會打印了、要自己用UART_write打印自己的ID信息

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!

         好的,我这就尝试去修改下看,谢谢!

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!           在您的指导和帮助下;现在simple_peripheral终端功能已经实现了;手持主机端simple_central如何能实现,上电后和simple_peripheral自动组网,假设我在手持端的硬件上设定12个独立按键,当按下某个键,触发simple_central向simple_central发送响应的数值1~12;我该在simple_central代码里哪个函数里来实现呢;谢谢!

,

YiKai Chen:

可以參考一下 SimpleCentral_doGattWrite

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!              我对SimpleCentral_doGattWrite进行了修改,测试其截图如下:

1、我修改了数组charVals里的初值

2、编译烧录后打印依然是之前的值

3、可以通过触发simple_central发送响应的序列出去;

请教下:

1、不知道这么做的方法是正确的不?

2、如何实现手持端simple_central上电后自动连接simple_peripheral终端设备,免去通过按键选择这个过程。

,

YiKai Chen:

1. 要改顯示需要去改下面的程序,你數量如果要改也要做對應的修改

MENU_OBJ(scMenuGattWrite, "GATT Write", 4, &scMenuPerConn)  MENU_ITEM_ACTION("Write 0x00", SimpleCentral_doGattWrite)  MENU_ITEM_ACTION("Write 0x55", SimpleCentral_doGattWrite)  MENU_ITEM_ACTION("Write 0xAA", SimpleCentral_doGattWrite)  MENU_ITEM_ACTION("Write 0xFF", SimpleCentral_doGattWrite)MENU_OBJ_END

2. 如果做pairing/bonding應該可以自动连接pairing/bonding過得simple_peripheral终端设备

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!        pairing/bonding需要在哪一端做?要在simple_peripheral终端设备来实现么?有相应参考资料么?

,

YiKai Chen:

可以參考 dev.ti.com/…/node

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助! 第一项:步骤1)、2)、设置完;Task 1 – Enable Just Works Pairing步骤3)、3. Build and flash your CC2640R2 LaunchPad with your modified Project Zero then follow the instructions below for your selected peer.在这里选BTool和simple_peripheral进行测试么?

,

YiKai Chen:

对、可以用btool 測試

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!

            文档和实际BTool不太一致哦,在步骤6里说:选择 GAPBOND_PAIRING MODE。 将值设置为02结果在实际的BTool上找不到value这个选项;

可不可以直接在simple_ peripheral代码里修改好代码后烧录直接和simple_central进行测试呢

              

,

YiKai Chen:

选pairingMode不行嗎?你要在simple_central去測試也行

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!              CC2640R2L和CC2640R2F不能共用一个代码么?我编译了一个simple_peripheral烧录在CC2640R2F可以正常运行,烧录在CC2640R2L无任何反应,若要在CC2640R2L上运行需要修改那些设置呢,芯片信息如下:

,

YiKai Chen:

你的CC2640R2L是QFN-32,CC2640R2F是QFN-48,腳位不同,所以你要去改相關的腳位設置吧

,

WSP:

YiKai Chen您好!十分感谢您的回复和帮助!

        好的,我尝试去修改下看。

赞(0)
未经允许不得转载:TI中文支持网 » CC2640R2F: 请教:simple_central、simple_peripheral例程应用
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1