文章目录
- 一、前言
- 二、硬件
- 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微控制器。
这款芯片的特点包括:
- RISC-V内核:CH582F采用了RISC-V架构的内核,这是一种开源的指令集架构,提供了高性能和低功耗的特点。
- 低功耗蓝牙BLE:支持2Mbps的低功耗蓝牙通讯,符合BLE 5.3标准,适合需要低功耗无线连接的应用场景。
- 丰富的外设资源:芯片集成了2个全速USB主机和设备控制器及收发器、2个SPI、4个串口、ADC(模数转换器)、触摸按键检测模块、RTC(实时时钟)等,为各种应用提供了灵活的接口选项。
- 内存配置:具备448KB的Flash存储空间和32KB的SRAM,以及DataFlash,为应用程序提供了足够的存储能力。
- 电源管理:支持2.3V的电源电压,有助于进一步降低功耗。
- 封装形式:采用QFN28封装,这种封装形式紧凑,适合空间有限的设备。
- 应用场景:CH582F适用于需要蓝牙连接的各类产品,如智能家居设备、可穿戴设备、工业传感器、医疗设备等。
二、硬件
1.原理图
接下来,简单说明下原理图。
- 首先Type-C接口进来5V,利用二极管的单向导通性起到防反接的作用。
- 接口的C1和C2引脚需要焊接两个5.1k的下拉电阻是为了实现接口的检测和识别功能。
- 5V经过LDO降压为3.3V给MCU供电,CH582F芯片的外围电路设计通常包括多个元件,其中包括32.768kHz晶振、32MHz晶振和22uH电感。它们各自的作用为32.768kHz晶振用于提供实时时钟功能,32MHz晶振用于提供高频时钟信号以支持高速运算,而22uH电感则用于电源管理电路中的滤波和稳压作用,确保芯片工作的稳定性和性能表现。
- 这里两个按键一个是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 点进去,接收通知数据,就可以看到数据了
四、 总结
以上就是今天的内容。
感谢你的观看,谢谢!