CH582F核心板入门:RGB灯点亮与蓝牙上报功能实战

文章目录

  • 一、前言
  • 二、硬件
    • 1.原理图
    • 2.实物图
    • 3.实物连接图
  • 三、软件
    • 1.初始化
    • 2.显示部分
    • 3.输出部分(打印和蓝牙上报)
    • 4.结果
      • 4.1 打印结果
      • 4.2 蓝牙上报
      • 4.2.1 打开手机蓝牙调试助手,找到ble_test_XXXX
      • 4.2.2 点击CONNECT
      • 4.2.3 找到Unknown Service服务,然后有个NOTIFY上报
      • 4.2.4 点进去,接收通知数据,就可以看到数据了
  • 四、 总结


一、前言

首先,简单的说明下CH582F这款芯片。

沁恒的蓝牙芯片CH582F是一款集成了BLE(Bluetooth Low Energy,低功耗蓝牙)无线通讯功能的32位RISC微控制器。

这款芯片的特点包括:

  1. RISC-V内核:CH582F采用了RISC-V架构的内核,这是一种开源的指令集架构,提供了高性能和低功耗的特点。
  2. 低功耗蓝牙BLE:支持2Mbps的低功耗蓝牙通讯,符合BLE 5.3标准,适合需要低功耗无线连接的应用场景。
  3. 丰富的外设资源:芯片集成了2个全速USB主机和设备控制器及收发器、2个SPI、4个串口、ADC(模数转换器)、触摸按键检测模块、RTC(实时时钟)等,为各种应用提供了灵活的接口选项。

在这里插入图片描述

  1. 内存配置:具备448KB的Flash存储空间和32KB的SRAM,以及DataFlash,为应用程序提供了足够的存储能力。
  2. 电源管理:支持2.3V的电源电压,有助于进一步降低功耗。
  3. 封装形式:采用QFN28封装,这种封装形式紧凑,适合空间有限的设备。
  4. 应用场景:CH582F适用于需要蓝牙连接的各类产品,如智能家居设备、可穿戴设备、工业传感器、医疗设备等。

二、硬件

1.原理图

在这里插入图片描述

接下来,简单说明下原理图。

  1. 首先Type-C接口进来5V,利用二极管的单向导通性起到防反接的作用。
  2. 接口的C1和C2引脚需要焊接两个5.1k的下拉电阻是为了实现接口的检测和识别功能。
  3. 5V经过LDO降压为3.3V给MCU供电,CH582F芯片的外围电路设计通常包括多个元件,其中包括32.768kHz晶振、32MHz晶振和22uH电感。它们各自的作用为32.768kHz晶振用于提供实时时钟功能,32MHz晶振用于提供高频时钟信号以支持高速运算,而22uH电感则用于电源管理电路中的滤波和稳压作用,确保芯片工作的稳定性和性能表现。
  4. 这里两个按键一个是RST复位按键,一个是BOOT烧录按键,以及一个测试的LED。

2.实物图

在这里插入图片描述
实物还是蛮精美的。

3.实物连接图

在这里插入图片描述

三、软件

这里使用的是MounRiver Studio集成开发环境。

1.初始化

代码如下(示例):

/******************************************************************************** 函数名:app_led_init* 描述  :引脚初始化* 输入  :void* 输出  :void* 调用  :初始化* 备注  :*******************************************************************************/
void app_led_init(void)
{IO_LED.init(GPIO_ModeOut_PP_5mA);IO_LED.set();IO_LED_R.init(GPIO_ModeOut_PP_20mA);IO_LED_R.set();IO_LED_G.init(GPIO_ModeOut_PP_20mA);IO_LED_G.set();IO_LED_B.init(GPIO_ModeOut_PP_20mA);IO_LED_B.set();
}/******************************************************************************** 函数名:rope_init* 描述  :用户定义初始化* 输入  :void* 输出  :void* 调用  :初始化* 备注  :*******************************************************************************/
void rope_init(void)
{app_led_init();GPIOB_SetBits(bTXD1);GPIOB_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);GPIOB_ModeCfg(bRXD1, GPIO_ModeIN_PU);UART1_DefInit();//串口波特率115200UART1_ByteTrigCfg(UART_7BYTE_TRIG);UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_LINE_STAT);PFIC_EnableIRQ(UART1_IRQn);ROPE_TaskID = TMOS_ProcessEventRegister(ROPE_ProcessEvent); // 向系统注册了一个任务tmos_set_event(ROPE_TaskID, READ_UART_EVENT);tmos_set_event(ROPE_TaskID, E1000MS_EVENT);tmos_set_event(ROPE_TaskID, E10MS_EVENT);tmos_start_task(ROPE_TaskID, E100MS_EVENT, 160); // 160 * 0.625ms执行一次  100ms
}

2.显示部分

核心板上的测试灯进行1s闪烁一次的动作,RGB进行1s的红->蓝->绿的切换动作。

代码如下(示例):

/******************************************************************************** 函数名:app_led_display* 描述  :根据情况显示* 输入  :void* 输出  :void* 调用  :100ms调用* 备注  :*******************************************************************************/
void app_led_display(void)
{static uint8_t led_flash_status = 0;static uint8_t led_flash_count = 0;if(led_flash_status){IO_LED.set();if(++led_flash_count >= 10)//1s{led_flash_status = 0;led_flash_count = 0;}}else{IO_LED.reset();if(++led_flash_count >= 10)//1s{led_flash_status = 1;led_flash_count = 0;}}
}/******************************************************************************** 函数名:RGB_led_display* 描述  :根据情况显示* 输入  :void* 输出  :void* 调用  :1s调用* 备注  :*******************************************************************************/
void RGB_led_display(void)
{if(Alternate_flag == 0){IO_LED_R.set();IO_LED_G.reset();IO_LED_B.reset();Alternate_flag = 1;}else if(Alternate_flag == 1){IO_LED_R.reset();IO_LED_G.set();IO_LED_B.reset();Alternate_flag = 2;}else if(Alternate_flag == 2){IO_LED_R.reset();IO_LED_G.reset();IO_LED_B.set();Alternate_flag = 0;}else{IO_LED_R.reset();IO_LED_G.reset();IO_LED_B.reset();Alternate_flag = 0;}
}

3.输出部分(打印和蓝牙上报)

/****************************************************************************************/
// 函  数:void analy_recv(uint8_t *buf,uint8_t len)
// 功  能:解析数据
// 输  入:buf数据地址
// 输  出:无
/****************************************************************************************/
void analy_recv(uint8_t *buf, uint8_t len)
{uint8_t i = 0;for (i = 0; i < len; i++){if ((buf[i] = 0x55) && (buf[i + 1] = 0xAA))//找到数据帧{receive_order();//回复PRINT("Alternate_flag = %d\r\n", Alternate_flag);}}
}/****************************************************************************************/
// 函  数:void receive_order(uint8_t *buf,uint8_t len)
// 功  能:回复
// 输  入:无
// 输  出:无
/****************************************************************************************/
void receive_order(void)
{ble_heartbeat.msg.u8Head1  = 0x55;ble_heartbeat.msg.u8Head2  = 0xAA;ble_heartbeat.msg.u8KeyId  = Alternate_flag;tmos_start_task(Peripheral_TaskID,HEARTBEAT_EVT,2);//2 * 0.625ms执行一次  1.25ms//蓝牙发送数据
}//=================================蓝牙发送函数(上报)=================================//
static void heartbeatTask(void)
{peripheralChar4Notify(ble_heartbeat.Connect, 3);
}

4.结果

4.1 打印结果

在这里插入图片描述

4.2 蓝牙上报

4.2.1 打开手机蓝牙调试助手,找到ble_test_XXXX

在这里插入图片描述

4.2.2 点击CONNECT

在这里插入图片描述

4.2.3 找到Unknown Service服务,然后有个NOTIFY上报

在这里插入图片描述

4.2.4 点进去,接收通知数据,就可以看到数据了

在这里插入图片描述


四、 总结

以上就是今天的内容。

感谢你的观看,谢谢!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32(15)USART编程

使用USART实现STM32与电脑之间的通信 中介&#xff1a;USB转TTL模块 闭合总开关&#xff0c;外部时钟才会传输到分频器 c8t6手册里面写了&#xff0c;usart最大支持4.5MHz&#xff0c;所以选10 重映射时记得开启AFIO的时钟

python网络爬虫教程笔记(1)

系列文章目录 文章目录 系列文章目录前言一、爬虫入门1.爬虫是什么&#xff1f;2.爬虫工作原理3.爬虫基本原理4.工作流程5.HTTP请求6.HTTP响应7.HTTP原理&#xff1a;证书传递、验证和数据加密、解密过程解析8.Urllib.request库的使用9.TCP3次握手&#xff0c;4次挥手过程 总结…

PCB电路中每个层是什么?有什么作用

在电子工程领域中&#xff0c;印刷电路板&#xff08;PCB&#xff09;是不可或缺的组件&#xff0c;它承载着电子元件之间的连接与通信&#xff0c;而PCB并非单层结构&#xff0c;是由多个层次构成&#xff0c;每层都有其特定的功能和作用&#xff0c;下面我们一起来聊聊。 1、…

计算机网络实验一 网线制作

实验目的与要求&#xff1a; 实验目的 了解以太网网线&#xff08;双绞线&#xff09;和制作方法 实验内容 了解网线和水晶头 学习网线制作方法 实验环境和要求 网线 水晶头 压线钳 剥线钳 网线测试器 方法、步骤&#xff1a; 步骤一 准备工具和材料 步骤二 剥掉双绞线的外…

基于 Vue3打造前台+中台通用提效解决方案(下)

47、通用组件 - 倒计时组件 特惠部分存在一个倒计时的功能,所以我们需要先处理对应的倒计时模块,并把它处理成一个通用组件。 那么对于倒计时模块我们又应该如何进行处理呢? 所谓倒计时,其实更多的是一个时间的处理,那么对于时间的处理,此时我们就需要使用到一个第三方…

libigl 网格平均曲率计算

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 根据 Laplace-Beltrami 算子与平均曲率法向的关系: 又根据余切 Laplace-Beltrami 算子的定义: 其中 Ai 为该点邻域面积,取 Voronoi cell 面积如下: 得到

uniapp制作--简单的tab切换

一、实现思路 在UniApp中&#xff0c;可以使用v-if来控制Tab栏并进行切换。 创建一个方法来控制点击时的效果。 二、实现步骤 ①view部分展示 <!-- tab选项 --><view class"select-area"><view class"select-top"><view clas…

基于Python+Flask实现一个TODO任务管理系统网站

随着科技的进步&#xff0c;数字化的任务清单逐渐成为生活中不可或缺的一部分。它们不仅可以帮助我们跟踪日常任务&#xff0c;还可以提高效率。但是&#xff0c;你是否考虑过自己制作一个任务管理系统呢&#xff1f; 好消息是&#xff0c;使用Python和Flask&#xff0c;我们可…

Redis 之六:Redis 的哨兵模式(Sentinel)

Redis 哨兵&#xff08;Sentinel&#xff09;模式是一种高可用性解决方案&#xff0c;用于监控和自动故障转移的集群系统。 在 Redis Sentinel 架构中&#xff0c;哨兵是一组运行在特殊模式下的 Redis 进程&#xff0c;它们可以监控一个或多个主从复制结构中的 Redis 主服务器以…

Excel中筛选合并单元格后,只显示第一行怎么办?

Excel中筛选合并单元格后,只显示第一行怎么办? 我们日常的Excel数据在展示的时候为了数据的清晰和美观往往部分相同的单元格进行合并,但是合并之后在筛选时会发现结果会显示异常。 现在我们筛选下国籍为中国的员工信息,发现只显示了一条数据,解决这个异常只需要五Excel步:…

06-prometheus的数据存储

一、本地存储prometheus收集的监控数据 就是将默认的存储&#xff0c;修改为“我们指定”的目录下&#xff1b; 1&#xff0c;配置systemctl启动文件 [rootprometheus-server32 ~]# vim /etc/systemd/system/prometheus-server.service [Unit] DescriptionPrometheus Server D…

站群服务器租用需要考虑哪些?

站群服务器租用是指租用服务器来托管多个网站或应用&#xff0c;通常用于实现网站优化、提高搜索引擎排名等目的。在选择站群服务器租用服务时可以考虑以下几点&#xff0c;RAKsmart小编为您整理发布。 1. 多IP支持&#xff1a;站群服务器应具备多个独立IP地址&#xff0c;以便…

面试经典150题——逆波兰表达式求值

Man cannot live like a beast, he should pursue knowledge and virtue. -- Dante 1. 题目描述 2. 题目分析与解析 2.1 思路一 这个波兰式我记得在之前上编译原理的时候学过&#xff0c;是对输入的代码进行解析用的。可能有一部分读者对于波兰表达式并不太熟悉&#xff0c;…

对接华泰极速行情丨DolphinDB INSIGHT 插件使用教程

INSIGHT 是华泰证券依托大数据存储、实时分析等领域的技术积累&#xff0c;整合接入国内多家交易所高频行情数据&#xff0c;为投资者提供集行情接入、推送、回测、计算及分析等功能于一体的行情数据服务解决方案。基于 INSIGHT 官方提供的行情数据服务 C SDK&#xff08;TCP 版…

【FastChat】用于训练、服务和评估大型语言模型的开放平台

FastChat 用于训练、服务和评估大型语言模型的开放平台。发布 Vicuna 和 Chatbot Arena 的存储库。 隆重推出 Vicuna&#xff0c;一款令人印象深刻的开源聊天机器人 GPT-4&#xff01; &#x1f680; 根据 GPT-4 的评估&#xff0c;Vicuna 达到了 ChatGPT/Bard 90%* 的质量&…

最短路径Floyd算法

第一题&#xff1a;[USACO08OPEN] Clear And Present Danger S #include<bits/stdc.h> using namespace std; int n,m; int g[105][105]; int arr[100005]; long long sum; int main() {scanf("%d%d",&n,&m);for(int i1;i<m;i){scanf("%d"…

聚观早报 | 2024款腾势D9将发布;岚图汽车2月销量

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 3月2日消息 2024款腾势D9将发布 岚图汽车2月销量 苹果Vision Pro防汗新专利 真我12 Pro正式开售 Redmi K70/Pro…

终极排序(快排,归并,库函数)

一、快速排序 1、确定分界点&#xff1a;q [ l ] , q [ ( l r ) / 2 ] , q [ r ] ,或者其它区间之中的随机数。&#xff08;左 l 右 r &#xff09; 2、调整区间&#xff1a;&#xff08;较难理解的部分&#xff09; &#xff08;1&#xff09;、暴力做法 …

Linux 学习笔记(12)

十二、 系统服务 1 、系统服务分类&#xff0c;根据其使用的方法来分&#xff0c;可以被分为三类 a、由 init 控制的服务&#xff1a;基本都是系统级别的服务&#xff0c;运行级别这一章讲的就是这一类的服务 b、由 System V 启动脚本启动的服务&#xff1a;和我们打交道最多…