6626常问问题不支持任意映射,这个需要按照我们的pinmux映射表来进行配置,每个pin脚可以映射为哪些外设脚,除了在datasheet上可以看到之外,还可以在drv_pinmux.h中可以找到。 drv_pmu_pin_io13_reset_mode_enable 1、倍频:
drv_pmu_xtal32m_x2_startup
drv_rcc_clock_set (RCC_CLK_CPU, 1))
2、keil中不再使用 MicroLIB
3、关键重复性的代码放在ram中
4、使用更高优化等级 1、以simple工程为例,默认是只有一个广播的,这个配置是在:
Projects_OM6626\hal\device\om6626\rom_lib\current\config\autoconf_preset_ble_1peripheral.h中有一个宏进行控制
#define CONFIG_LE_HOST_ADV_SET_NUM 1
2、如果是ble_app_multilink工程的话,默认是可以开4个广播,这个配置在:
Projects_OM6626\hal\device\om6626\rom_lib\current\config\autoconf_preset_ble_full.h中有一个宏进行控制
#define CONFIG_LE_HOST_ADV_SET_NUM 4
其实不同工程加载的配置可以在kei→魔术棒→Asm→Define中看到对应的宏配置,一般:
单连接是CONFIG_LIB_PRESET_BLE_1PERIPHERAL
多连接是CONFIG_LIB_PRESET_BLE_FULL
通过控制上面的宏,在
Projects_OM6626\hal\device\include\autoconf_preset.h中决定加载哪个.h文件,目前有以下几部分:
1、CONFIG_LIB_PRESET_NO_BLE
2、CONFIG_LIB_PRESET_BLE_FULL
3、CONFIG_LIB_PRESET_BLE_1PERIPHERAL 比如simple工程用的就是这个,这个就是只支持1个广播
4、CONFIG_LIB_PRESET_BLE_MESH
5、CONFIG_PROJECT_ROM_BOOT
上面5个会选择其中一个进行加载。 这个不能,多广播只能在主从例程里面,simple工程属于单从例程,这个只能有一个广播,这个设置的位置是在
autoconf_preset_ble_1peripheral.h里面设置的,可以看到#define CONFIG_LE_HOST_ADV_SET_NUM 1是1,这里
即使改为 2,也是不能设置多个广播的,设置第二个广播会显示未知原因(reason = 5)关闭第二个广播。 目前来看不同的shell指令使用的都是下面路径下的.c文件:
Projects_OM6626\components\shell 这个是由于 6626的dfu服务改变了uuid所致,可以自己修改uuid如下:
void service_onmicro_dfu_init(void)
{
static const uint8_t serv_dfu[2] = {0x59, 0xFE};
static const uint8_t char1[16] = {0x50, 0xEA, 0xDA, 0x30, 0x88, 0x83, 0xB8, 0x9F, 0x60, 0x4F, 0x15, 0xF3, 0x01, 0x00, 0xC9, 0x8E};
static const uint8_t char2[16] = {0x50, 0xEA, 0xDA, 0x30, 0x88, 0x83, 0xB8, 0x9F, 0x60, 0x4F, 0x15, 0xF3, 0x02, 0x00, 0xC9, 0x8E};
static const uint8_t char3[2] = {0x03, 0x00};
static const ob_gatt_item_t atts_dfu[] = {
{ ob_att_char_def, OB_UUID_16BIT, OB_ATT_PROP_READ },
{ char1, OB_UUID_128BIT, OB_ATT_PROP_NTF | OB_ATT_PROP_WRITE },
{ ob_att_cccd_def, OB_UUID_16BIT, OB_ATT_PROP_READ | OB_ATT_PROP_WRITE },
{ ob_att_char_def, OB_UUID_16BIT, OB_ATT_PROP_READ },
{ char2, OB_UUID_128BIT, OB_ATT_PROP_WRITE_CMD },
{ ob_att_char_def, OB_UUID_16BIT, OB_ATT_PROP_READ },
{ char3, OB_UUID_16BIT, OB_ATT_PROP_READ | OB_ATT_PROP_WRITE | OB_ATT_PROP_NTF },
{ ob_att_cccd_def, OB_UUID_16BIT, OB_ATT_PROP_READ | OB_ATT_PROP_WRITE },
};
static const ob_gatt_serv_t att_serv_dfu = {
serv_dfu, OB_UUID_16BIT,
sizeof(atts_dfu) / sizeof(atts_dfu[0]), atts_dfu
};
ob_gatts_add_service(&att_serv_dfu, &m_start_handle);
} /**
* @brief Change xtal 32m params
*
* @param[in] load_capacitance load capacitance, range:0~63, default:32, step:0.379pF(<20ppm), max:23.877pF
*
* @note load_capacitance will effect xtal 32m precision and frequency offset.
*
* @return None
**/
void drv_pmu_xtal32m_change_param(int load_capacitance)
{
if(load_capacitance >= 0)
{
REGSW(&OM_PMU->CLK_CTRL_2, MASK_STEP(PMU_CLK_CTRL_2_CT_XTAL32M, load_capacitance), false/*should_update*/, 10/*delay_us*/);
}
} 比如,在连接的时候,会有OB_GAP_EVT_CONNECTED事件,这个是每个事件回调都会进入,所以只要你有
相关if的判断,那么就会执行该逻辑,所以,如何区分服务属性,只能通过句柄的方式自己判断,底层
不会帮我们做这个判断的。
eg:
if (req->att_hdl == m_tspp_start_handle + IDX_TSPP_NOTIFY_DESC)
由于每个服务的m_tspp_start_handle这个都是静态的,所以每个服务的这个起始句柄也是不一样的,再
搭配上每个服务独有的特性列表,即可找到蓝牙通信对应的服务属性。 这个实际上就是注释宏,然后重编译:
1、在 hal/device/om6626/rom_lib/current/config/RTE_om6626.h中,设置宏 RTE_{XXX}_USING_ROM_SYMBOL 为 0
2、添加一个新驱动到工程中,并重新写这个驱动 6626的adc精度是多少?
6626发射功率函数是哪个?
drv_rf_tx_power_set(),这个在drv_radio.c文件内
我们可以在app_adv.c中的app_adv_event_cb函数内的evt_id == OB_GAP_EVT_CONNECTED分支内发起连接参数更新请求。
注:一般蓝牙连接之前(比如广播,扫描,连接,配对等 ),以及断连之后的蓝牙接口操作都在omble_gap.h中。连接之后的服务通信接口函数都在omble_gatt.h(从机接口)中,如果是做主机则在app_gatt_client.c文件内 广播讲个单位是0.625ms,连接间隔的单位是1.25ms,从设备延时的单位是连接间隔的个数,超时时间的单位是 10ms
|