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


一、前言

首先,简单的说明下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();//串口波特率115200
    UART1_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 点进去,接收通知数据,就可以看到数据了

在这里插入图片描述


四、 总结

以上就是今天的内容。

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

  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 为了连接USB转TTL CH340模块和STM32F103C8T6核心,你需要遵循以下步骤: 1. 将TTL模块的TX脚连接到STM32的RX脚。 2. 将TTL模块的RX脚连接到STM32的TX脚。 3. 将TTL模块的GND脚连接到STM32的GND脚。 4. 将TTL模块的VCC脚连接到STM32的VCC脚。 请确保连接时线路顺序正确,并且电平匹配,以免造成设备损坏或通信问题。 ### 回答2: 使用USB转TTL CH340模块连接STM32F103C8T6核心是一种常见的方式,以下是连接步骤: 1. 首先,准备好所需的设备器件,包括CH340模块,STM32F103C8T6核心,杜邦线等。 2. 将CH340模块的VCC引脚接到STM32F103C8T6核心的5V引脚。 3. 将CH340模块的GND引脚接到STM32F103C8T6核心的GND引脚。 4. 将CH340模块的TX引脚接到STM32F103C8T6核心的RX引脚。 5. 将CH340模块的RX引脚接到STM32F103C8T6核心的TX引脚。 6. 在连接好上述引脚后,将CH340模块的USB接口连接到电脑的USB接口。 7. 确保CH340驱动程序已正确安装到电脑上,可以去制造商的官方网站上下载最新的驱动程序。 8. 完成以上步骤后,就可以使用USB转TTL CH340模块连接STM32F103C8T6核心了。通过串口通信,可以在电脑上与STM32F103C8T6进行通信和数据传输。 注意事项: - 此方法适用于将STM32F103C8T6核心与电脑进行串口通信,需要将串口相关代码添加到STM32F103C8T6中进行数据传输。 - 确保电源电压和电流满足CH340模块和STM32F103C8T6核心的需求,以免引起损坏。 - 保持连接正确,确保线路没有短路或接错线。 - 在连接好后,选择正确的串口和波特率进行数据传输。 ### 回答3: USB转TTL CH340模块是一种常用的串口转USB模块,而STM32F103C8T6核心是一种功能强大的微控制器。要将这两个模块连接起来,需要按照以下步骤进行操作。 首先,准备USB转TTL CH340模块和STM32F103C8T6核心。确保两个模块都处于正常工作状态。 然后,查找STM32F103C8T6核心的引脚定义图。通常,这些引脚定义图可以从官方文档或者开发的说明书中获取。从引脚定义图中找到STM32F103C8T6核心的串口引脚。通常,标有"RXD"和"TXD"的引脚为串口接收和发送引脚。 接下来,连接USB转TTL CH340模块和STM32F103C8T6核心。将USB转TTL CH340模块的TX引脚连接到STM32F103C8T6核心的RX引脚,并将USB转TTL CH340模块的RX引脚连接到STM32F103C8T6核心的TX引脚。这样,两个模块就通过串口连接在一起了。 最后,接通电源,确保STM32F103C8T6核心和USB转TTL CH340模块都能正常工作。在开发环境中编写测试代码,通过串口发送和接收数据,验证连接是否正常。如果一切顺利,你就成功地将USB转TTL CH340模块连接到了STM32F103C8T6核心上。 总之,连接USB转TTL CH340模块和STM32F103C8T6核心有一定的步骤,需要找到正确的引脚,并进行正确的连接。通过这样的连接,你可以在STM32F103C8T6核心上使用USB转TTL CH340模块进行串口通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaobuding_QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值