[单片机芯片] 沁恒CH579 USB蓝牙MCU的应用与代码示例

[复制链接]
3794|9
 楼主| 周半梅 发表于 2024-10-11 09:33 | 显示全部楼层 |阅读模式

沁恒微电子(WCH)的CH579是一款集成了USB和蓝牙BLE功能的多功能MCU,适用于物联网、蓝牙音频传输以及USB设备的开发。CH579基于Cortex-M0内核,具有高效的能耗管理和丰富的外设接口,能够同时处理USB和蓝牙通信,给开发者提供了极大的灵活性和便利性。本文将以CH579为例,介绍如何利用其USB和蓝牙功能实现数据传输和控制应用。

CH579的应用场景在实际应用中,CH579可以用于智能设备的无线通信、USB设备与PC之间的数据交互,以及通过蓝牙实现远程控制。我们将演示如何通过蓝牙模块传输数据,并利用USB接口与PC通信。

硬件设计
  • MCU型号: 沁恒 CH579
  • 功能模块: USB接口与蓝牙BLE模块
  • 其他外设: 一个LED和按键,用于控制蓝牙数据传输状态
我们将通过按键触发蓝牙数据发送,并使用USB接口与PC通信以显示发送数据的结果。

代码实现在本示例中,CH579通过按键触发蓝牙数据的发送,并利用USB连接PC,将结果数据打印到串口监视器。
  1. #include "CH579.h"

  2. // 定义LED和按键引脚
  3. #define LED_PIN  GPIO_Pin_1  // LED连接到GPIO引脚1
  4. #define BUTTON_PIN GPIO_Pin_0  // 按键连接到GPIO引脚0

  5. // 蓝牙数据包
  6. uint8_t bleData[] = "Hello from CH579 BLE!";

  7. // 函数声明
  8. void System_Init(void);
  9. void GPIO_Init(void);
  10. void USB_Init(void);
  11. void BLE_Init(void);
  12. void SendDataOverBLE(uint8_t *data, uint16_t len);
  13. void USB_Print(const char *str);

  14. int main(void)
  15. {
  16.     // 系统初始化
  17.     System_Init();
  18.     // GPIO初始化
  19.     GPIO_Init();
  20.     // USB初始化
  21.     USB_Init();
  22.     // 蓝牙初始化
  23.     BLE_Init();

  24.     // 主循环
  25.     while (1)
  26.     {
  27.         // 检测按键状态
  28.         if (GPIO_ReadInputDataBit(GPIOA, BUTTON_PIN) == RESET) // 按键按下
  29.         {
  30.             // 点亮LED,表示正在发送数据
  31.             GPIO_SetBits(GPIOA, LED_PIN);

  32.             // 发送数据通过蓝牙
  33.             SendDataOverBLE(bleData, sizeof(bleData));

  34.             // 在USB串口打印信息
  35.             USB_Print("BLE Data Sent: Hello from CH579 BLE!\r\n");

  36.             // 延时避免按键抖动
  37.             Delay_Ms(500);

  38.             // 关闭LED
  39.             GPIO_ResetBits(GPIOA, LED_PIN);
  40.         }
  41.     }
  42. }

  43. // 系统初始化
  44. void System_Init(void)
  45. {
  46.     // 启动外设时钟
  47.     SystemCoreClockUpdate();
  48.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  49. }

  50. // GPIO初始化
  51. void GPIO_Init(void)
  52. {
  53.     GPIO_InitTypeDef GPIO_InitStructure;

  54.     // LED引脚配置为输出模式
  55.     GPIO_InitStructure.GPIO_Pin = LED_PIN;
  56.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  57.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  58.     GPIO_Init(GPIOA, &GPIO_InitStructure);

  59.     // 按键引脚配置为输入模式
  60.     GPIO_InitStructure.GPIO_Pin = BUTTON_PIN;
  61.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  62.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  63. }

  64. // USB初始化
  65. void USB_Init(void)
  66. {
  67.     // USB外设初始化
  68.     USB_DeviceInit();
  69.     USB_Print("USB Initialized.\r\n");
  70. }

  71. // 蓝牙初始化
  72. void BLE_Init(void)
  73. {
  74.     // 初始化蓝牙模块
  75.     BLE_ModuleInit();
  76.     USB_Print("BLE Initialized.\r\n");
  77. }

  78. // 通过蓝牙发送数据
  79. void SendDataOverBLE(uint8_t *data, uint16_t len)
  80. {
  81.     BLE_SendData(data, len);
  82. }

  83. // 通过USB发送字符串
  84. void USB_Print(const char *str)
  85. {
  86.     while (*str)
  87.     {
  88.         USB_SendData(*str++);
  89.     }
  90. }

  91. // 简单延时函数
  92. void Delay_Ms(uint32_t ms)
  93. {
  94.     for(uint32_t i = 0; i < ms * 8000; i++);
  95. }

代码解析
  • 系统初始化:System_Init()函数中配置了系统时钟,并使能了GPIOA外设的时钟。该步骤是为后续的GPIO和外设初始化做准备。
  • GPIO初始化:GPIO_Init()函数将GPIOA的1号引脚配置为推挽输出,用于控制LED,同时将GPIOA的0号引脚配置为浮空输入,检测按键的状态。
  • USB初始化:USB_Init()函数用于初始化CH579的USB外设。通过USB与PC进行通信,所有信息都会通过USB串口打印出来。
  • 蓝牙初始化:BLE_Init()函数用于初始化蓝牙模块。CH579内置蓝牙BLE模块,初始化后,可以发送和接收BLE数据。
  • 蓝牙数据发送:SendDataOverBLE()函数用于通过蓝牙发送数据。在按键按下时,该函数会被调用,向蓝牙发送预设的数据。
  • USB串口打印:通过USB_Print()函数可以将字符串发送到PC端的串口工具,用于实时显示MCU的操作状态。
  • 按键检测:在主循环中,MCU持续监控按键状态,按下时,LED点亮并发送蓝牙数据,同时通过USB串口输出发送信息。


应用效果
  • 蓝牙数据传输:当按下按键时,CH579通过蓝牙发送预定义的字符串"Hello from CH579 BLE!",蓝牙客户端能够接收到这条信息。
  • USB通信:通过USB连接PC,MCU会在每次蓝牙数据发送后,将发送的信息通过串口打印到PC上,以确认数据的发送情况。
  • LED指示:LED用于指示当前蓝牙数据发送的状态,当LED点亮时表示数据正在发送,熄灭时表示数据发送结束。

扩展应用通过本文示例,可以轻松扩展CH579 MCU的应用:
  • 多数据通道:除了发送固定数据,可以扩展为通过USB接口接收数据并通过蓝牙转发,实现双向数据传输。
  • 低功耗应用:CH579支持低功耗模式,可以结合定时器和中断,实现节能设计。
  • 传感器采集:通过扩展ADC模块,可以采集传感器数据,并通过蓝牙传输至手机或其他蓝牙设备,适用于物联网传感器节点设计。

总结沁恒的CH579 MCU集成了USB和蓝牙BLE功能,在物联网和无线通信应用中具有广泛的应用前景。通过本文介绍的示例代码,开发者可以轻松实现USB和蓝牙的数据传输与控制应用,为更复杂的项目奠定基础。

公羊子丹 发表于 2024-10-11 09:33 | 显示全部楼层
沁恒这款MCU功能好全啊,USB和蓝牙都集成了,开发起来应该很方便。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

170

主题

6161

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部