FR3068E-C是富 芮 坤一款接 口 丰 富 的 高 性 能 双 核 蓝 牙MCU,具有如下主要特点
• RF:BT5.3 BLE+BR/EDR协议认证
• MCU core:MC1(Cortex-M33) 156MHz+32bit MCU 48MHz
• 大容量Memory、丰富的外设接口、Security内置硬件加密单元内置、硬件加速器
• 蓝牙连接性能:支持BLE/BT蓝牙网关功能,支持20条以上BLE连接
本次试用这个开发板主要是被其高主频、丰富接口和蓝牙多连接这几个方面吸引,并且支持LVGL GUI系统,可以拓展很多之前无法覆盖的场景,并且可以将MCU和蓝牙芯片合二为一,简化系统和降低成本。 FR3068E-C开发部的总体结构如下:


开发板的资料文档和之前接触过的富芮坤芯片资料风格一致,全面,逻辑性强,条理清晰,对开发者非常友好。

编译环境需要安装 MDK5.36 以上版本,并且需要安装python用于烧录文件生成脚本的运行,具体在“FR306x系统编程说明V1.0.pdf”文档中有详细说明。
本篇主要记录验证调试蓝牙主从一体多连接功能开发调试过程,实现在FR3068E-C实现蓝牙主从机共存,通过蓝牙连接的多个设备控制同一个LED的功能。
具体结构如下:
FR3068E-C作为蓝牙主机,主动扫描并连接另一个FR8016从机设备,FR8016上按键按下时通过蓝牙给FR3068E-C发送控制命令,控制LED的输出状态翻转,相当于一个无线开关的作用;
FR3068E-C作为蓝牙从机,可被手机连接,接收手机发来的数据和命令,也可控制控制LED的输出状态翻转;
FR3068E-C开发板上的按键也可以控制控制LED的输出状态翻转,最终实现三端都可以控制LED的效果。
理论上可以连接更多设备,本次先验证同时连接一个从机和一个主机的效果。

代码基于application\ble_simple_central例程基础上开发,添加主从一体功能、按键检测和主从蓝牙连接收发数据的处理。
蓝牙主机和从机功能初始化:
<pre><font size="4">void app_ble_master_init(void)
{
printf("app_ble_init\r\n");
/* set GAP event callback*/
gap_set_cb_func(gap_callback);
/* set security param */
struct gap_security_param smp_param;
smp_param.mitm = true;
smp_param.secure_connection = false;
smp_param.bond = true;
smp_param.rsp_mode = ENABLE_AUTO_RSP;
smp_param.oob_used = GAP_OOB_AUTH_DATA_NOT_PRESENT;
smp_param.io_cap = GAP_IO_CAP_NO_INPUT_NO_OUTPUT;
gap_security_param_init(&smp_param);
/* add client profile, The GAP callback event is GATT_EVT_PROFILE_ADDED*/
app_ble_add_client();
}
void app_ble_slave_init(void)
{
printf("app_ble_init\r\n");
/* set GAP event callback*/
gap_set_cb_func(gap_callback);
/* set security param */
struct gap_security_param smp_param;
smp_param.mitm = false;
smp_param.secure_connection = false;
smp_param.bond = true;
smp_param.rsp_mode = ENABLE_AUTO_RSP;
smp_param.oob_used = GAP_OOB_AUTH_DATA_NOT_PRESENT;
smp_param.io_cap = GAP_IO_CAP_NO_INPUT_NO_OUTPUT;
gap_security_param_init(&smp_param);
/* add service profile, The GAP callback event is GATT_EVT_PROFILE_ADDED*/
app_ble_add_service();
// ota_gatt_add_service();
}</font></pre>
复制代码主从机对象分别通过gatt_add_client()和gatt gatt_add_service()添加到gatt层,每个添加的对象中有gatt_msg_handler回调函数来处理对应的gatt事件,比如接收到对属性的读写等。
主从机gap事件,比如CONNECT和DISCONNECT事件、扫描和连接结果等事件,都在gap_callback()中处理。
开发板上的按键为PMU_GPIO,本项目中使用KEY1即PP0引脚作为控制按键,通过中断方式检测按键动作,每按一下按键翻转LED的输出状态;
<pre><font size="4">int app_led_control_init()
{
GPIO_InitTypeDef GPIO_Handle;
//按键输入IO:PP0
// pmu_gpio_int_init(PMU_PIN_0, PMU_GPIO_PULL_UP, 1);
pmu_port_wakeup_func_set(PMU_PIN_0|PMU_PIN_2|PMU_PIN_3);
pmu_enable_isr(PMU_GPIO_PMU_INT_MSK_BIT);
NVIC_SetPriority(PMU_IRQn, 4);
NVIC_EnableIRQ(PMU_IRQn);
//LED输出IO:PD14,PD15
GPIO_Handle.Pin = GPIO_PIN_14|GPIO_PIN_15;
GPIO_Handle.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_Handle.Pull = GPIO_PULLUP;
gpio_init(GPIOD, &GPIO_Handle);
gpio_write_pin(GPIOD, GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_CLEAR);
}</font></pre><pre><font size="4">
</font></pre><pre><font size="4">void PMU_GPIO_PMU_IRQHandler(void)
{
uint16_t data = ool_read16(PMU_REG_PIN_DATA);
uint16_t result = ool_read16(PMU_REG_PIN_XOR_RESULT);
/* update last value with latest data */
ool_write16(PMU_REG_PIN_LAST_V, data);
/* clear last XOR result */
ool_write16(PMU_REG_PIN_XOR_CLR, result);
// printf("PMU IO: 0x%04x, 0x%04x\r\n", data, result);
if (result & PMU_PIN_0) {
if (!(data & PMU_PIN_0)) {
printf("Button Key1 press!\r\n");
control_led_output_reversal();
}
}
else if (result & PMU_PIN_2) {
printf("Button Key2 press!\r\n");
}
else if (result & PMU_PIN_3) {
printf("Button Key3 press!\r\n");
}
}</font></pre>
复制代码详细代码见附件\examples\application\ble_simple_central。
运行效果如下:
从芯片资料中看,FR3068E-C可以支持多达20个的多连接,目前手上没有太多设备,以后有机会再做多连接方面进一步的开发,进而实现作为蓝牙网关和10个甚至20个设备的同时连接,应用在更多的场景中。

热门活动
全部回复 0