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 面积如下: 得到

蓝桥杯第2章_基础算法4

2.小浩的ABC - 蓝桥云课 (lanqiao.cn) #include<bits/stdc.h> using namespace std; const int N1e6; int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n;cin>>n;while(n--){long long x;cin>>x;if(x1)cout<<-1<<\n;else if(x-…

spark 报错总结

&#xff08;一&#xff09; spark 报错&#xff1a;spark SparkSession.builder() TypeError: Builder object is not callable 解决办法&#xff1a;.builder() 改为 .builder spark SparkSession.builder() 改为 spark SparkSession.builder

uniapp制作--简单的tab切换

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

Learning and Leveraging World Models in Visual Representation Learning

Learning and Leveraging World Models in Visual Representation Learning 相关链接&#xff1a;arxiv 关键字&#xff1a;学习世界模型、视觉表示学习、自监督学习、JEPA、Image World Models 摘要 本文探索了在自监督视觉表示学习中学习和利用世界模型的方法。作者引入了图…

基于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 主服务器以…

小脑萎缩患者必备营养指南

亲爱的读者朋友们&#xff0c;您是否了解小脑萎缩这一疾病&#xff1f;这是一种逐渐发展的神经退行性疾病&#xff0c;对患者的生活质量影响重大。面对这样的挑战&#xff0c;除了必要的医疗干预外&#xff0c;日常饮食和营养管理也扮演着至关重要的角色。今天&#xff0c;让我…

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;以便…

NERF论文笔记(1/2)

NeRF:Representing Scene as Neural Radiance Fields for View Synthesis 笔记 摘要 实现了一个任意视角视图生成算法&#xff1a;输入稀疏的场景图像&#xff0c;通过优化连续的Volumetric场景函数实现&#xff1b;用全连接深度网络表达场景&#xff0c;输入是一个连续的5维…

[Android] MediaPlayer SDK API glance

参考&#xff1a; https://developer.android.com/reference/android/media/MediaPlayer 概述&#xff1a; 音视频的 playback。创建 MediaPlayer 的线程必须和调用 SDK 接口的线程是同一个。注册 callback 给 MediaPlayer SDK 的 thread 必须自带一个 running Looper&#x…

Unity3D 阴影的计算原理详解

前言 阴影是游戏中的重要特效之一&#xff0c;可以增加游戏的真实感和立体感。在Unity3D中&#xff0c;阴影的计算原理主要包括阴影的产生、投影和渲染。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经验呀&#xff01; 首…