android 芯烨 wifi 芯烨xp58iih怎么连接手机蓝牙 您所在的位置:网站首页 芯烨xp58iih android 芯烨 wifi 芯烨xp58iih怎么连接手机蓝牙

android 芯烨 wifi 芯烨xp58iih怎么连接手机蓝牙

2024-06-14 00:36| 来源: 网络整理| 查看: 265

文章目录前言一、CH58X_BLEInit二 、HAL_Init①SYS_EVENT_MSG②LED_BLINK_EVENT③HAL_KEY_EVENT④HAL_REG_INIT_EVENT⑤HAL_TEST_EVENT三、GAPRole_CentralInit四、Central_Init①SYS_EVENT_MSG②START_DEVICE_EVT③ESTABLISH_LINK_TIMEOUT_EVT④START_SVC_DISCOVERY_EVT⑤START_PARAM_UPDATE_EVT⑥START_PHY_UPDATE_EVT⑦START_READ_OR_WRITE_EVT⑧START_WRITE_CCCD_EVT⑨START_READ_RSSI_EVT

前言

沁恒蓝牙芯片CH58x系列学习与应用:

在前人的基础上补充一个沁恒CH85x系列蓝牙central例程的记录 注:我是用的是沁恒的CH582M芯片,IDE是Mounriver Studio 因作者能力有限,文中难免存在错误,请不吝指正!

沁恒的外设从机例程Peripheral

头文件包含:

#include "CONFIG.h" #include "hal.h" #include "central.h"

全局

//GLOBAL TYPEDEFS __attribute__((aligned(4))) uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4]; // 4字节对齐 #if(defined(BLE_MAC)) && (BLE_MAC == TRUE) // 不启用 const uint8_t MacAddr[6] = {0x84, 0xC2, 0xE4, 0x03, 0x02, 0x02}; #endif

循环

/********************************************************************* * @fn Main_Circulation * * @brief 循环 * * @return none */ __HIGH_CODE // 将作用的函数或数据放入指定名为"section_name"输入段(没搞明白) __attribute__((noinline)) // 声明为非内联函数 void Main_Circulation() { while(1) { TMOS_SystemProcess(); // 执行系统处理 } }

Central例程的主函数如下所示:

int main(void) { #if(defined(DCDC_ENABLE)) && (DCDC_ENABLE == TRUE) PWR_DCDCCfg(ENABLE); #endif SetSysClock(CLK_SOURCE_PLL_60MHz); #if(defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE) GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU); GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU); #endif #ifdef DEBUG GPIOA_SetBits(bTXD1); GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA); UART1_DefInit(); #endif PRINT("%s\n", VER_LIB); CH58X_BLEInit(); // BLE库初始化 HAL_Init(); // 硬件初始化 GAPRole_CentralInit(); Central_Init(); Main_Circulation(); }一、CH58X_BLEInit

首先来看蓝牙的库初始化配置:

void CH58X_BLEInit(void) { uint8_t i; bleConfig_t cfg; if(tmos_memcmp(VER_LIB, VER_FILE, strlen(VER_FILE)) == FALSE) // 其中函数是对利用变量实现对当前芯片与库文件的是否匹配 { PRINT("head file error...\n"); while(1); } SysTick_Config(SysTick_LOAD_RELOAD_Msk); // 系统时钟的配置 PFIC_DisableIRQ(SysTick_IRQn); // 中断不使能 tmos_memset(&cfg, 0, sizeof(bleConfig_t)); // 设置清0 通过配置参数bleConfig_t配置库的内存,时钟,发射功率等参数 cfg.MEMAddr = (uint32_t)MEM_BUF; cfg.MEMLen = (uint32_t)BLE_MEMHEAP_SIZE; cfg.BufMaxLen = (uint32_t)BLE_BUFF_MAX_LEN; cfg.BufNumber = (uint32_t)BLE_BUFF_NUM; cfg.TxNumEvent = (uint32_t)BLE_TX_NUM_EVENT; cfg.TxPower = (uint32_t)BLE_TX_POWER; #if(defined(BLE_SNV)) && (BLE_SNV == TRUE) cfg.SNVAddr = (uint32_t)BLE_SNV_ADDR; cfg.readFlashCB = Lib_Read_Flash; cfg.writeFlashCB = Lib_Write_Flash; #endif #if(CLK_OSC32K) cfg.SelRTCClock = (uint32_t)CLK_OSC32K; #endif cfg.ConnectNumber = (PERIPHERAL_MAX_CONNECTION & 3) | (CENTRAL_MAX_CONNECTION


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有