今年的春节已经接近尾声了,由于新型冠状病毒肺炎疫情还在影响着我们的出行,中国人拜年不再串门聚会,电话视频拜年匆匆而过,周围的环境显得格外安静、异常。近几日死亡人数不断攀升,疫情不容乐观,不管怎么样,大家众志成城,齐心协力,相信黎明就在不远的前方。祝愿在前线支援的白衣天使们,身体健康,阖家欢乐;元宵佳节,称心如意。
今天我给大家分享一下SDK中的从机工程中的音频检测体验。该工程的所在SDK中的目录是“FR801xH-SDK-master\examples\dev1.0\ble_simple_peripheral”,在该工程中,可以测试FR8016HA对音频文件的解码能力。使用Keil将工程打开,我们可以清晰的看到工程归纳整洁,platform平台机制管理,各应用层文件,驱动层文件,协议栈库文件分类明确,让开发人员更好更快得读懂该实例工程。在蓝牙初始化之前执行的是user_entry_before_ble_init()函数,该函数实现了设置电源供电模式为BUCK,使能串口设置。用户入口函数是user_entry_after_ble_init(),顺藤摸瓜,我们可以跟踪得知创建了speaker任务,周期性定时器,初始化了气压计,温湿度传感器,加速度传感器模块。
全编译后,将生成的“ble_simple_peripheral.bin”文件烧写进开发板中,至于如何烧写,可以回看本人发的初次体验贴
。烧写完该从机工程后,将安卓手机安装“Fr8010loadsbc_v16.apk”应用软件,然后使用手机搜索蓝牙设备,截图如下:
然后点击Simple Peripheral,能够顺利地进入连接状态。如果手机界面一直显示在“正在连接”而未连接成功,可以尝试将手机的蓝牙重启后再搜索,再连接开发板就能顺利连接了。连接之后手机app显示如下
由此可以得知,该主机端可以将一个指定的文件发送给从机开发板。开发板自启动开始,建立连接串口打印信息如下
然后根据工程源码中的代码指示,可以得知按键K1与PC5关联,K2与PD6关联,喇叭功放与PA1关联,因此增加三个跳线帽,将PC5与K1短接,PD6与K2短接,PA1与PASD短接,并将喇叭接口处连接一个小喇叭。
- <div>void simple_peripheral_init(void)
// set local device name
uint8_t local_name[] = "Simple Peripheral";
gap_set_dev_name(local_name, sizeof(local_name));
// Initialize security related settings.
gap_security_param_t param =
{
.mitm = false,
.ble_secure_conn = false,
.io_cap = GAP_IO_CAP_NO_INPUT_NO_OUTPUT,
.pair_init_mode = GAP_PAIRING_MODE_WAIT_FOR_REQ,
.bond_auth = true,
.password = 0,
};
gap_security_param_init(¶m);
gap_set_cb_func(app_gap_evt_cb);
gap_bond_manager_init(0x7e000,0x7f000,8,true);
gap_bond_manager_delete_all();
mac_addr_t addr;
gap_address_get(&addr);
co_printf("Local BDADDR: 0x%2X%2X%2X%2X%2X%2X\r\n", addr.addr[0], addr.addr[1], addr.addr[2], addr.addr[3], addr.addr[4], addr.addr[5]);
// Adding services to database
sp_gatt_add_service();
speaker_gatt_add_service();
pmu_set_pin_pull(GPIO_PORT_D, (1<<GPIO_BIT_6), true);
pmu_set_pin_pull(GPIO_PORT_C, (1<<GPIO_BIT_5), true);
pmu_port_wakeup_func_set(GPIO_PD6|GPIO_PC5);
button_init(GPIO_PD6|GPIO_PC5);
demo_LCD_APP();
demo_CAPB18_APP();
demo_SHT3x_APP();
gyro_dev_init();
//OS Timer
os_timer_init(&timer_refresh,timer_refresh_fun,NULL);
os_timer_start(&timer_refresh,1000,1);
}
- <div>void speaker_init(void)
pmu_codec_power_enable();
audio_speaker_codec_init();
i2s_init(I2S_DIR_TX,8000,1);
NVIC_SetPriority(I2S_IRQn, 2); //Setting the I2S interrupt priority
co_printf("speaker_init\r\n");
PA_init_pins(); //Initialize PA enable pin
}
void PA_init_pins(void)
{
system_set_port_mux(GPIO_PORT_A, GPIO_BIT_1, PORTA1_FUNC_A1);
system_set_port_pull(GPIO_PA1, true);
gpio_set_dir(GPIO_PORT_A, GPIO_BIT_1, GPIO_DIR_OUT);
}
然后我们可以通过按键来切换检测项目,K1可实现三种状态的切换,按下第一次,如下图所示,这里未对气压计,温湿度传感器进行驱动配置,因此显示error,串口打印与液晶屏显示同步。
当第二次按下K1时,液晶屏显示请按K2进行音频测试的对话提示语,同时串口输出信息如下
当第三次按下K1时,液晶屏上显示图片更新的模式,同时串口输出信息如下
当K1第二次按下时,再按K2进行音频功能的检测,短按一下K2,就能播放出高亢激昂的音乐了,当然这是对“FR801xH-SDK-master\examples\dev1.0\ble_simple_peripheral\files”下的“music_8k_new.wav”文件进行解码,如果更改替换成相似大小的wav音频文件,重新编译烧写进flash中,就能对该音频文件进行解码了,解码成功将顺利地播放出美妙乐谱。执行播放音乐时串口打印信息如下:
此次分享就到这里,蓝牙主从连接还是挺快的,音频文件解码顺畅,无卡顿现象。从机操作演示
请移步观看,今天是元宵佳节了,真心地祝愿大家身心健康,重返岗位,疫情早日结束,开创2020新篇章!