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您好!十分感谢您的回复和帮助!
好的,我尝试去修改下看。