发新帖本帖赏金 50.00元(功能说明)我要提问
返回列表
打印
[蓝牙芯片]

玩转开发板 - 沁恒CH583M开发板(RISC-V)

[复制链接]
1757|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
[url=home.php?mod=space&uid=760190]@21小跑堂 #申请原创#[/url]
引:
      由于项目需要,需要使用到CH583M来进行项目开发,对于MounRiver Studio开发环境在之前的文章中已经进行了详细的说明,这里就不再赘述。从沁恒原厂申请了CH583M-R0-1V1的开发板。
一、CH583M资源评估
       资料在官网可以直接进行下载。
二、建立第一个工程文件
       将官网的开发板资料包下载,解压到​D盘的文件夹。
        我们可以看见文件夹的list文件很多,有很多都不是项目需要的文件​。在开发的时候,完全可以按照需要进行拷贝,​下面就说一下拷贝的过程。
第一步:将项目命名为YT-583(当然这个名字可以根据自己的需要进行命名)
       在文件夹中建立两个空文件夹,命名为BLE和SRC​文件夹,如上图所示。
        打开资料包中的BLE文件夹,位置在EVT-->EXAM-->BLE​文件夹下。把HAL文件夹和LIB文件夹拷贝到BLE文件夹中​。
       ​拷贝之后如下图:
        然后将我们需要的​文件进行拷贝:
        拷贝之后,更改文件夹的名字为project,同时将文件夹内的工程名字也做相应的更改。
​第二步:将​资料包的SRC文件拷贝到我们建立的文件夹中。
​        拷贝之后,如下图所示:
​第三步:运行项目,找到刚刚我们重新命名的project工程文件双击运行。
        系统会自动弹出开发环境MRS
        如果不习惯英文版本的,可以进行​中文版的切换。帮助-->语言-->选择需要的语言,简体中文还是English​。
​第四步:运行文件
        点击下面的图标,或者直接Shift+F7​。
       编译之后,会看见​0个错误0个警告。
       至此,最简单的例子程序​就建立完成了。
三、名称的更改
       找到peripheral.c文件,我们将下面标红的地方进行更改,0x12代表的是后面字符的长度,记得里面的GAP_​ADTYPE...也算一个字符。
       更改为YT-CH583M,不能忘记更改len
四、需要修改几个文件中的内容
       在下面的函数中​:
uint16_t Peripheral_ProcessEvent(uint8_t task_id, uint16_t events)
       按照原有的格式添加任务。
       首先在文件中增加以下代码
//peripheral.H#define SBP_START_DEVICE_EVT    0x0001#define SBP_PERIODIC_EVT        0x0002#define SBP_READ_RSSI_EVT       0x0004#define SBP_PARAM_UPDATE_EVT    0x0008#define SBP_PHY_UPDATE_EVT      0x0010​#define YT_TEST_EVT             0x0020
        然后在刚刚提到的函数中增加以下代码
//peripheral.c//构建ble uart service callback handler函数void on_bleuartServiceEvt(uint16_t connection_handle,ble_uart_evt_t  *p_evt)//函数void Peripheral_Init()中添加服务ble_uart_add_service(on_bleuartServiceEvt);//函数uint16_t Peripheral_ProcessEvent(uint8_t task_id, uint16_t events)中添加事件if(events & YT_TEST_EVT){        uint8_t send_result = SUCCESS;        uint16_t cuntest = 0;        noti.len = 6;        noti.pValue = GATT_bm_alloc(peripheralConnList.connHandle, ATT_HANDLE_VALUE_NOTI, noti.len, NULL, 0 );        noti.pValue[0]='L';        noti.pValue[1]='L';        noti.pValue[2]='S';        noti.pValue[3]='D';        noti.pValue[4]='J';        noti.pValue[5]=' ';        if(noti.pValue != NULL)        {​            send_result = simpleProfile_Notify( peripheralConnList.connHandle, &noti);            if(send_result==SUCCESS)            {                tmos_start_task( Peripheral_TaskID, YT_TEST_EVT,1600);            }​            else            {                tmos_stop_task( Peripheral_TaskID, YT_TEST_EVT);                GATT_bm_free( (gattMsg_t *)&noti, ATT_HANDLE_VALUE_NOTI );            }​        }        return (events ^ YT_TEST_EVT);​    }
       在gattprofile.c文件中构建以下几个函数,具体的函数内容,可以参考沁恒的手册进行​构建。
//gattprofile.Cstatic bStatus_t ble_uart_ReadAttrCB( uint16 connHandle, gattAttribute_t *pAttr,                                     uint8 *pValue, uint16 *pLen, uint16 offset, uint16 maxLen,uint8 method )static bStatus_t ble_uart_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,                                      uint8 *pValue, uint16 len, uint16 offset,uint8 method )static void ble_uart_HandleConnStatusCB ( uint16 connHandle, uint8 changeType )bStatus_t ble_uart_add_service( ble_uart_ProfileChangeCB_t cb)bStatus_t ble_uart_notify( uint16 connHandle, attHandleValueNoti_t *pNoti, uint8 taskId )
五、下载设置
       点击闪存-->下载配置,然后根据自己的需要进行勾选​,选择操作。
​        连接好仿真器和开发板。
       ​进行程序下载。
六、查看结果
        我们打开沁恒的windows软件WCHBleDemo​。
       点击刷新设备,然后选中YT-CH583M,​打开设备。
       点击获取服务,选择FFF0,点击获取特征,选择FFF1,点击获取操作,​订阅。就可以在接收区看见LLSDJ在不断传输。
​结:
        沁恒的​芯片还是很好用的,协议栈也不是很复杂,移植也很方便。

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 50.00 元 2023-03-06
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
21小跑堂 2023-3-6 16:24 回复TA
详细介绍在MounRiver Studio开发环境下的工程搭建,但是注意代码部分可用代码编辑器,否则造成代码错乱,无任何可读性 
沙发
tpgf| | 2023-4-4 08:14 | 只看该作者
整个开发板的上半部分 为什么要打那么多过孔呢

使用特权

评论回复
板凳
qcliu| | 2023-4-4 11:14 | 只看该作者
我们在工程文件里边需要修改哪些内容呢

使用特权

评论回复
地板
drer| | 2023-4-4 11:47 | 只看该作者
我们在工程里边增加代码的依据是什么呢

使用特权

评论回复
5
coshi| | 2023-4-4 12:18 | 只看该作者
请教楼主一个问题就是如何看懂这个协议栈呢

使用特权

评论回复
6
kxsi| | 2023-4-4 15:09 | 只看该作者
更改文件内容的时候 这个长度如何确定呢

使用特权

评论回复
7
wiba| | 2023-4-4 15:23 | 只看该作者
请问这个函数uint16_t Peripheral_ProcessEvent(uint8_t task_id, uint16_t events)中的任务id如何确定呢

使用特权

评论回复
发新帖 本帖赏金 50.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:资深专家
简介:丰富的嵌入式软硬件开发管理经验; 丰富的项目管理经验并具备敏锐的市场嗅觉; 丰富的产品的供应链资源及工厂管控能力; 具备很强的产品落地经验(从产品企划到产品量产);

107

主题

2308

帖子

9

粉丝