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_central、simple_peripheral实现主从通信。现在测试例程simple_peripheral,用Uart输出外接模块实现红外遥控转发;现在的问题是CC2652RB输出的数据怎么被其它模块识别?
1、用Putty可以通信,串口助手不能正常显示
2、修改了代码:static void SimplePeripheral_processCharValueChangeEvt(uint8_t paramId)
{
uint8_t newValue;
switch(paramId)
{
case SIMPLEPROFILE_CHAR1:
SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR1, &newValue);
//Display_printf(dispHandle, SP_ROW_STATUS_1, 0, "Char 1: %d", (uint16_t)newValue);
但是用串口助手依然不能正常显示;红外转发模块Uart的设置为;波特率:115200 停止位:1 数据位:8 奇偶校验:无
现在该如何修改代码才能实现红外转发模块Uart的通信格式呢?
Kevln Qlu1您好!
我在simple_peripheral.c文件调用了头文件
#include <stdint.h>
#include <stddef.h>
#include <ti/drivers/GPIO.h>
#include <ti/drivers/UART.h>
#include "ti_drivers_config.h"
在函数:static void SimplePeripheral_init(void)添加以下代码:
char input;
const char echoPrompt[] = "Echoing characters:\r\n";
UART_Handle uart;
UART_Params uartParams;
/* Call driver init functions */
GPIO_init();
UART_init();
/* Configure the LED pin */
//GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/* Create a UART with data processing off. */
UART_Params_init(&uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_RETURN_FULL;
uartParams.baudRate = 115200;
在函数:static void SimplePeripheral_processCharValueChangeEvt(uint8_t paramId)
uint8_t dat[3]={0x03,0x06,0x09};
UART_write(uart,&dat,3);
结果编译报错,请问该怎么解决呢?
YiKai Chen您好!十分感谢您的回复和帮助!
我按dev.ti.com/.../node
在simple_peripheral.c文件初始化添加了:
在SimplePeripheral_init(void)函数里我添加了以下代码:
现在不管是:uart=UART_open(CONFIG_UART_0, &uartParams);还是uart=UART_open(CONFIG_UART_1, &uartParams);编译都会报错。
YiKai Chen您好!十分感谢您的回复和帮助!
我现在启用了:UART_open后 PuTTY没有信息打印了,不执行UART_open就有打印输出,我在CC2562RB的DIO0、和DIO1连接了TTL转USB模块,另外开了一个串口助手,当复位CC2562RB时串口助手(UART2)只显示了HEX的00.
YiKai Chen您好!十分感谢您的回复和帮助!
是这样;源代码用的Uart的IO是DIO2、DIO3我用这个端口连接的PuTTY,在没启用Uart2也就是不执行UART_open这一句,代码烧录后复位板子会打印相关信息,通过btool 连接终端时能看到信息;现在启用Uart2后,原来Uart没有数据输出了。屏蔽UART_open后原Uart就有打印输出。我现在用原Uart输出到PuTTY、Uart2输出到另一个串口工具,在复位时Uart无输出、Uart2只打印了16进制的0x00
YiKai Chen您好!十分感谢您的回复和帮助!
我是想用例程simple_central和simple_peripheral实现一主多从模式,现在用simple_peripheral实现红外遥控转发器终端,我用其它单片机实现了红外编码生成及Uart通信,现在需要CC2562RB通过Uart按照通信格式:“波特率:115200 停止位:1 数据位:8 奇偶校验:无” 来发送数据给红其它单片机;在SimplePeripheral_processCharValueChangeEvt函数里实现Uart2的Uart数据转发
static void SimplePeripheral_processCharValueChangeEvt(uint8_t paramId)
{
uint8_t newValue;
uint8_t dat[3]={0x03,0x06,0x09};
switch(paramId)
{
case SIMPLEPROFILE_CHAR1:
SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR1, &newValue);
Display_printf(dispHandle, SP_ROW_STATUS_1, 0, "Char 1: %d", (uint16_t)newValue);
switch(newValue)
{
case 1:
Display_printf(dispHandle, 0, 0, "01");
newValue=0;
break;
case 6:
Display_printf(dispHandle, 0, 0, "06");
UART_write(uart2,dat,3);
newValue=0;
break;
default:;
}
不知道这样描述您能看清了么?之前有个帖子,(+) CC2652RB: 请教simple_peripheral应用 - 蓝牙论坛 - Bluetooth - E2E 设计支持 (ti.com)当时用CC2562RB实现红外编码不理想,后来我用其它单片机实现了红外编码生成。
YiKai Chen您好!十分感谢您的回复和帮助!
我在simple_peripheral.c代码开始处添加了以下内容:
#include <stdint.h>
#include <stddef.h>
#include <semaphore.h>
#include <ti/drivers/GPIO.h>
#include <ti/drivers/UART2.h>
#include "ti_drivers_config.h"
char input;
const char echoPrompt[] = "Echoing characters:\r\n";
UART2_Handle uart;
UART2_Params uartParams;
int32_t semStatus;
uint32_t status = UART2_STATUS_SUCCESS;
static sem_t sem;
static volatile size_t numBytesRead;
在
static void SimplePeripheral_init(void)函数里添加了:
GPIO_init();
UART2_Params_init(&uartParams);
uartParams.readMode = UART2_Mode_CALLBACK;
uartParams.readCallback = callbackFxn;
uartParams.baudRate = 115200;
uart = UART2_open(CONFIG_UART2_0, &uartParams);
当添加:void callbackFxn(UART2_Handle handle, void *buffer, size_t count,
void *userArg, int_fast16_t status)函数后编译报错
YiKai Chen您好!十分感谢您的回复和帮助!
在官方帮助文档:uart2callback.c
void *mainThread(void *arg0)
{
char input;
const char echoPrompt[] = "Echoing characters:\r\n";
UART2_Handle uart;
UART2_Params uartParams;
int32_t semStatus;
uint32_t status = UART2_STATUS_SUCCESS;
/* Call driver init functions */
GPIO_init();
/* Configure the LED pin */
GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/* Create semaphore */
semStatus = sem_init(&sem, 0, 0);
if (semStatus != 0) {
/* Error creating semaphore */
while (1);
}
/* Create a UART in CALLBACK read mode */
UART2_Params_init(&uartParams);
uartParams.readMode = UART2_Mode_CALLBACK;
uartParams.readCallback = callbackFxn;
uartParams.baudRate = 115200;
uart = UART2_open(CONFIG_UART2_0, &uartParams);
if (uart == NULL) {
/* UART2_open() failed */
while (1);
}
初始化部分用到的,
void callbackFxn(UART2_Handle handle, void *buffer, size_t count,
void *userArg, int_fast16_t status)
{
if (status != UART2_STATUS_SUCCESS) {
/* RX error occured in UART2_read() */
while (1);
}
numBytesRead = count;
sem_post(&sem);
}
我后来把uartParams.readCallback = callbackFxn;屏蔽了,编译可以通过但是串口2没数据输出。截图如下:
YiKai Chen您好!十分感谢您的回复和帮助!
串口2初始化代码放在了static void SimplePeripheral_init(void)里,如下图:
我在sysconfig上使能UART2然後在SimplePeripheral_init最後加上下列的程序是可以正常運作的啊
/* Create a UART in CALLBACK read mode */ UART2_Params_init(&uartParams); //uartParams.readMode = UART2_Mode_CALLBACK; //uartParams.readCallback = callbackFxn; uartParams.baudRate = 115200; uart = UART2_open(CONFIG_UART2_0, &uartParams); if (uart == NULL) { /* UART2_open() failed */ while (1); } /* Pass NULL for bytesWritten since it's not used in this example */ UART2_write(uart, echoPrompt, sizeof(echoPrompt), NULL);
YiKai Chen您好!十分感谢您的回复和帮助!
按您的结构可以通信了,跟您的代码对比,屏蔽这一句uartParams.readMode = UART2_Mode_CALLBACK;现在串口2有输出了,若不屏蔽还是会卡在初始化部分;接下来我想实现和simple_central例程通信;我等会把代码烧录了先看看相关文档有疑难再来请教!谢谢!
YiKai Chen您好!十分感谢您的回复和帮助!
那我估计我的代码还有问题,我试了几次,只要加Params.readMode = UART2_Mode_CALLBACK;代码就无法完成初始化,LED会常亮;我现在把simple_central的代码烧录到芯片了,如何和SimplePeripheral实现类似zigbee协调器和终端那种模式的通信呢?看官方说明都是用putty监视,通过按键来实现通信,感觉不太适用。
BLE互通就是simple_central/SimplePeripheral透過GATT characteristics來溝通,你的應用應該就是simple_central去寫入SimplePeripheral的红外遥控转发 GATT characteristics
YiKai Chen您好!十分感谢您的回复和帮助!
您能否给出一些步骤该怎么来实现呢?或者给一些参考资料,我参考资料再加上您的指导;否则估计要烦扰您很多,我对BLE基本没接触过。
YiKai Chen您好!十分感谢您的回复和帮助!
好的,我先看看尝试实现下;我也感觉我目前的实现方法不太灵活,正常的应该是SimplePeripheral接收到simple_central的数据直接转发给红外模块,而不是我目前这种人为设定的固定格式的数据是吧
YiKai Chen您好!十分感谢您的回复和帮助!
哦,好的;那先按目前的去实现吧;现在有个问题请教,就是simple_central是否可以通过串口开实现扫描终端,添加终端设备呢?目前这个按键模式的感觉太繁琐,若要实现该在那个函数去添加修改呢?
YiKai Chen您好!十分感谢您的回复和帮助!
那我若用HostTest例程作为网关,透过串口和云端及手机通信;和SimplePeripheral终端BLE组网这样可以吗?HostTest可以连接的终端数和simple_central是一样的吧?