打印
[蓝牙芯片]

CH579 BLE名称修改问题

[复制链接]
1688|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dykxjh|  楼主 | 2020-1-6 16:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
拿到开发板开始测评BLE例程。一、在BLE Peripheral例程中首先发现接收不了数据,检查程序发现原来是程序里面限制了一次只能接收一个数据,
而我测试的时候是一次发送一堆数据。
见下图,去掉限制以后能正确接收数据了。





二、同样是BLE Peripheral例程中,想修改蓝牙广播名称,在程序里找到有2个地方包含了名称定义,见下图。





项目中这2个地方都包含了蓝牙广播名称Simple Peripheral,先修改2处,发现无效,再修改1处,发现有效。
由于官方的APP是安卓的,我没有安卓手机就用第三方测试APP(FeasyBlue),发现搜索到的蓝牙名称确实是我改的了。
重点来了,这时候我用我的微信小程序搜索蓝牙,居然搜索到的还是Simple Peripheral,于是又用第三方微信蓝牙小程序再搜索,居然收到的还是Simple Peripheral。
尴尬吧,用APP搜到的是我改过的,用微信小程序搜到的是Simple Peripheral,关键是都能连上,都能正常发送数据。
继续检查程序,没有再发现哪里还有Simple Peripheral的定义。

望官方解答一下吧。

使用特权

评论回复
沙发
zzele| | 2020-1-6 17:26 | 只看该作者
在OTA的app下的Peripheral.C里也有一个名称的

你再试试看

使用特权

评论回复
板凳
WCHTech2| | 2020-1-6 19:00 | 只看该作者
图中1处是扫描的名称,2处是GAP服务的名称,通常情况下两处的名称都是统一的。如果第一次未连接过时,手机扫描显示的时1处的名称,如果连接过后,手机会保存该蓝牙的MAC地址,再次扫描时,根据不同的APP或者小程序,显示的可能时1处的名称,也可能时2处的名称。楼主可以修改MAC地址再次测试,肯定会显示1处的名称。通常要修改名称时,将两处一起修改,尽量保持名称一致。

使用特权

评论回复
地板
dykxjh|  楼主 | 2020-1-7 09:36 | 只看该作者
本帖最后由 dykxjh 于 2020-1-7 10:48 编辑
WCHTech2 发表于 2020-1-6 19:00
图中1处是扫描的名称,2处是GAP服务的名称,通常情况下两处的名称都是统一的。如果第一次未连接过时,手机 ...

正解,改了MAC后,微信小程序蓝牙搜索名称也正确了。也就是说微信蓝牙API接口搜索蓝牙之后显示的名称不是设备广播出来的,而是手机里保存的,这应该是微信API接口的BUG。

使用特权

评论回复
5
dykxjh|  楼主 | 2020-1-8 13:37 | 只看该作者
WCHTech2 发表于 2020-1-6 19:00
图中1处是扫描的名称,2处是GAP服务的名称,通常情况下两处的名称都是统一的。如果第一次未连接过时,手机 ...

BLE Peripheral例程程序中,我发现一个包只能接收80个字节,手机端发送超过80个字节就会出现发送失败,我原来用的芯片就不会,我估计不是CH579芯片的原因,应该还是库和程序的问题,会不会是哪里没有配置好?

使用特权

评论回复
6
zykzyk| | 2020-1-11 15:15 | 只看该作者
if (offset == 0)
                {
                    if (len > SIMPLEPROFILE_CHAR1_LEN)
                    {
                        status = ATT_ERR_INVALID_VALUE_SIZE;
                    }
                }
                else
                {
                    status = ATT_ERR_ATTR_NOT_LONG;
                }

您好 !我尝试修改了SIMPLEPROFILE_CHAR1_LEN 的值,为什么还是不能接收长数据帧呢?你是怎么实现的?

使用特权

评论回复
7
zykzyk| | 2020-1-11 18:13 | 只看该作者
请教一个问题:此例程的发送功能函数是在哪里实现的呢?

使用特权

评论回复
8
WCHTech2| | 2020-1-13 10:14 | 只看该作者
zykzyk 发表于 2020-1-11 15:15
if (offset == 0)
                {
                    if (len > SIMPLEPROFILE_CHAR1_LEN)

在工程中的config文件夹中的config.h中有相应的说明,把宏定义中的 BLE_BUFF_MAX_LEN改成相应的大小即可。

使用特权

评论回复
9
WCHTech2| | 2020-1-13 10:20 | 只看该作者
zykzyk 发表于 2020-1-11 18:13
请教一个问题:此例程的发送功能函数是在哪里实现的呢?

在app文件夹下的peripheral.c中,参考static void performPeriodicTask( void )。

使用特权

评论回复
10
dykxjh|  楼主 | 2020-1-13 14:10 | 只看该作者
zykzyk 发表于 2020-1-11 18:13
请教一个问题:此例程的发送功能函数是在哪里实现的呢?

怪了,我们的例程难道不一样,我的例程里根本没有SIMPLEPROFILE_CHAR1_LEN这个。

使用特权

评论回复
11
dykxjh|  楼主 | 2020-1-13 14:11 | 只看该作者
WCHTech2 发表于 2020-1-13 10:20
在app文件夹下的peripheral.c中,参考static void performPeriodicTask( void )。

我的例程里也没有BLE_BUFF_MAX_LEN这个定义,难道我的不是最新的?

使用特权

评论回复
12
dykxjh|  楼主 | 2020-1-13 14:15 | 只看该作者
WCHTech2 发表于 2020-1-13 10:14
在工程中的config文件夹中的config.h中有相应的说明,把宏定义中的 BLE_BUFF_MAX_LEN改成相应的大小即可 ...

我的例程里没有BLE_BUFF_MAX_LEN这个定义,难道我拿到的例程不是最新的吗?
CONFIG.H全文如下:


/********************************** (C) COPYRIGHT *******************************
* File Name          : CONFIG.h
* Author             : WCH
* Version            : V1.10
* Date               : 2018/12/14
* Description        :
*******************************************************************************/



/******************************************************************************/
#ifndef __CONFIG_H
#define __CONFIG_H


/* ------------------------------------------------------------------------------------------------
*                                             SLEEP
* ------------------------------------------------------------------------------------------------
*/
#define   HAL_SLEEP                       FALSE

#if (defined         HAL_SLEEP) && (HAL_SLEEP == TRUE)
        #define WAKE_UP_RTC_MAX_TIME            (80)
#else
        #define WAKE_UP_RTC_MAX_TIME            (0)
#endif

/* ------------------------------------------------------------------------------------------------
*                                             SNV
* ------------------------------------------------------------------------------------------------
*/
#define   BLE_SNV                                                  TRUE

#if (defined BLE_SNV) && (BLE_SNV == TRUE)
#define BLE_SNV_ADDR                                                           (0x3EE00)
#else
#define BLE_SNV_ADDR                                                          (0)
#endif

/* ------------------------------------------------------------------------------------------------
*                                             RTC
* ------------------------------------------------------------------------------------------------
*/
#if 0
#define  CLK_OSC32K_RC                    FALSE
#define  CLK_OSC32K_XT                    TRUE
#else  
#define  CLK_OSC32K_RC                    TRUE
#define  CLK_OSC32K_XT                    FALSE
#endif

/* ------------------------------------------------------------------------------------------------
*                                             MEMORY
* ------------------------------------------------------------------------------------------------
*/
#define BLE_MEMHEAP_SIZE                  (1024*4)

#endif

/******************************** endfile @ config ******************************/

使用特权

评论回复
13
arduino999| | 2020-1-13 14:36 | 只看该作者
修改名称,不是在手机端定义的吗?

使用特权

评论回复
14
GREENjim| | 2020-1-13 14:37 | 只看该作者
貌似的确是,用手机连接蓝牙的时候,可以对蓝牙的名称重新定义。但是第一次连接的时候,就是设备出场名称。

使用特权

评论回复
15
WCHTech2| | 2020-1-13 17:21 | 只看该作者
本帖最后由 WCHTech2 于 2020-1-13 17:22 编辑
dykxjh 发表于 2020-1-13 14:15
我的例程里没有BLE_BUFF_MAX_LEN这个定义,难道我拿到的例程不是最新的吗?
CONFIG.H全文如下:

可能不是最新的例程,可以wch.cn中搜索CH579,下载最新的例程。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

24

帖子

0

粉丝