1、安装开发环境

每一个款芯片开后都是从安装开发环境开始的,沁恒的开发环境安装非常简单

SDK下载连接:

https://www.wch.cn/downloads/CH585EVT_ZIP.html

IDE下载连接:

http://www.mounriver.com/download

点击下图红框内的蓝色字体即可下载。

MounRiver Studio Ⅱ(MRS2)为MounRiver Studio的换代版本,从V2.1开始,框架更为VSCode,开发上就和VSCode一样丝滑。

下载解压后,无脑下一步就完成安装。
在这里插入图片描述
打开工程即可编译,不需要额外配置其他东西,十分简单!!

开发蓝牙的话一般都是从蓝牙从机开始的,这也不例外。

2、开发板

本次使用的开发板是CH585M的沁恒官方开发板,相关的资料在SDK中,路径是:EVT\PUB,内含开发板的PCB、原理图、布局布线的注意事项,非常全面!
在这里插入图片描述
观察上图可以发现,沁恒的蓝牙芯片的外围 与 天线外围非常简单,大大降低入门难度。

2.1、开发板获取途径

1、淘宝店购买,沁恒官方在淘宝有店,店面是“WCH沁恒微电子官方店”,注意名字,不要搞错了

2、由公司名义,去联系沁恒原厂申请(最好是企业用户)。

沁恒的板子也不贵,个人用户直接走淘宝,而且淘宝店还包邮!

3、BLE 从机

打开例程,路径是:EVT\EXAM\BLE\Peripheral

3.1、修改广播 与 扫描回复内容

可由main 函数中跳转到 Peripheral_Init 函数, Peripheral_Init 函数中看到以下的两行代码,其中代码的操作码分别代表:
GAPROLE_SCAN_RSP_DATA(扫描回复)
GAPROLE_ADVERT_DATA(广播)
API中传入的其他参数就是 实际的广播数组名 和 数据长度

void Peripheral_Init() {
 .......
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable); //使能开启广播

GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA, sizeof(scanRspData),scanRspData);
//传入扫描回复参数

GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData);
//传入广播参数
....

例程中的广播内容如下,

需要注意 广播是以LTV格式填写的,即1 Byte Length、1 Byte Type、N Byte data。
长度是指 1个Type + N个data的长度,Type 与 data 按需填写。

注释上写着:最大广播字节数31字节,而且尽可能减少广播字节数,减少功耗。

// GAP - Advertisement data (max size = 31 bytes, though this is

// best kept short to conserve power while advertising)

static uint8_t advertData[] = {

    0x02, // length of this data

    GAP_ADTYPE_FLAGS,

    DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,


    0x03,                  // length of this data

    GAP_ADTYPE_16BIT_MORE, // some of the UUID's, but not all

    LO_UINT16(SIMPLEPROFILE_SERV_UUID),

    HI_UINT16(SIMPLEPROFILE_SERV_UUID)

};

扫描回复,大部分手机的APP显示名称就是的扫描回复内的名称

// GAP - SCAN RSP data (max size = 31 bytes)

static uint8_t scanRspData[] = {
    // complete name
    0x12, // length of this data
    GAP_ADTYPE_LOCAL_NAME_COMPLETE,
    'S','i','m','p','l','e',' ','P','e','r','i','p','h','e','r','a','l',
    // connection interval range
    0x05, // length of this data
    GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE,
    LO_UINT16(DEFAULT_DESIRED_MIN_CONN_INTERVAL), // 100ms
    HI_UINT16(DEFAULT_DESIRED_MIN_CONN_INTERVAL),
    LO_UINT16(DEFAULT_DESIRED_MAX_CONN_INTERVAL), // 1s
    HI_UINT16(DEFAULT_DESIRED_MAX_CONN_INTERVAL),
    // Tx power level
    0x02, // length of this data
    GAP_ADTYPE_POWER_LEVEL,
    0 // 0dBm
};

修改扫描回复的内容,修改广播名

// GAP - SCAN RSP data (max size = 31 bytes)
static uint8_t scanRspData[] = {
    // complete name
    5, // length of this data
    GAP_ADTYPE_LOCAL_NAME_COMPLETE,
    'T','e','s','t',

    // connection interval range
    0x05, // length of this data
    GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE,
    LO_UINT16(DEFAULT_DESIRED_MIN_CONN_INTERVAL), // 100ms
    HI_UINT16(DEFAULT_DESIRED_MIN_CONN_INTERVAL),
    LO_UINT16(DEFAULT_DESIRED_MAX_CONN_INTERVAL), // 1s
    HI_UINT16(DEFAULT_DESIRED_MAX_CONN_INTERVAL),

    // Tx power level
    0x02, // length of this data
    GAP_ADTYPE_POWER_LEVEL,
    0 // 0dBm
};

实际效果对比,红框内就是修改前后的广播名对比
在这里插入图片描述

3.2、修改广播间隔

1单位广播间隔,代表625微秒,80us 即 50ms,蓝牙规定实际的广播间隔要在设置的基础上随机家1-10ms,所以实际的广播间隔是51-60ms之间的随机数。

// What is the advertising interval when device is discoverable (units of 625us, 80=50ms)
#define DEFAULT_ADVERTISING_INTERVAL         80

void Peripheral_Init(){
...
    {
        uint16_t advInt = DEFAULT_ADVERTISING_INTERVAL;

        // Set advertising interval
        GAP_SetParamValue(TGAP_DISC_ADV_INT_MIN, advInt);
        GAP_SetParamValue(TGAP_DISC_ADV_INT_MAX, advInt);

        // Enable scan req notify
        GAP_SetParamValue(TGAP_ADV_SCAN_REQ_NOTIFY, ENABLE);
    }
...
}

修改以下宏为160,实际时间就是160*0.625=100ms

#define DEFAULT_ADVERTISING_INTERVAL         160

实际效果对比,红框内就是修改前后的广播间隔对比
在这里插入图片描述
以上就是沁恒

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐