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.

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

Expert 1395 points
Part Number: CC2640R2F
Other Parts Discussed in Thread: CC2640R2L

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

烧录后:

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

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

  • CC2640R2F上只有一个硬件uart接口

  • Kevin Qiu1您好!

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

         

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

  • Kevin Qiu1你好!

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

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

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

  • 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文件么?

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

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

  • 建議是自行定義

  • 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));

    修改了:

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

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

  • 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常亮

  • UART_Params_init之前有調用UART_init()嗎?

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

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

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

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

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

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

  • Kevin Qiu1你好!

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

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

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

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


  • 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及设置重新建个项目,按流程再来一次。

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

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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));
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

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

  • 你Board_UART0的定義是?

  • 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;

  • 下面這些你不要做

    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 */

  • 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的串口助手有信息显示了,但是依然卡在初始化部分。

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

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

            好的,我这就重建项目。

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

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

    1. 不能打印终端自己的信息?你不是已經都打印出echoing characters 了
  • YiKai Chen您好!十分感谢您的回复和帮助!

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

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

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

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

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

  • 可以參考一下 SimpleCentral_doGattWrite

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

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

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

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

    请教下:

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

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

  • 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终端设备

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

  • 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进行测试么?

  • 对、可以用btool 測試

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

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

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

                  

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

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

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

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

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

x 出现错误。请重试或与管理员联系。