基于富芮坤的FR801 BLE芯片开发
基于富芮坤的FR801 BLE芯片开发
前言:本篇主要讲解如何利用官方的SDK和ble 协议栈知识开发所需的功能
注意:因为官方是每个工程都导入同一个底层…所以一旦修改了components ,全部工程受影响,所以建议copy一份出来.自己乱改都没事…
文章目录
- 基于富芮坤的FR801 BLE芯片开发
- 一 欲练神功,必先备其资料
- 二 基本的外设驱动(GPIO,FLASH等)
- 三 BLE开发(广播内容 GATT服务)
- (1) 广播部分
- (2) 睡眠低功耗
- (3) 蓝牙连接
- (4) 数据通讯
- (5) notify
- 四 OTA
一 欲练神功,必先备其资料
1.这部分的学习需要使用到官方的SDK.在上节的资料中并没有SDK资料.因此我需要在官网的github or gitee 下载 上链接(gitee快速下载):
FR801xH-SDK
简单介绍文件内容
components:官方给的底层文件和API.
docs: 教程文档,特别是SDK用户手册,.非常关键好用…API
examples 官方给的例子.主要看none_evm.(这里推荐看几个例子)
ble_simple_peripheral 从机通讯.我主要在这个改的…
ble_drivers_demo 外设驱动.第二部分基本看这个例子就基本可以了…
tools 顾名思义就是开发过程可能用到的工具,我就用到了一个ota app和 下载工具…
二 基本的外设驱动(GPIO,FLASH等)
这部分.我感觉就看 example里面的 ble_drivers_demo 写的很详细了…
什么串口 i2c spi flash gpio 都给整明白了.实在不行,别忘了有个sdk用户手册.没事看看不亏…
三 BLE开发(广播内容 GATT服务)
蓝牙开发:不过在于,广播的数据 蓝牙的连接以及通讯数据的传输…然后 睡眠低功耗…notify…
这里先推荐几篇文章有关的 :
FR8016H程序运行流程、任务、定时器、串口的使用 非常详细.强烈推荐
GATT学习
正题来了:
(1) 广播部分
通过SDK手册和API说明,我知道了.广播的数据和广播参数设置
gap_set_advertising_param()
gap_set_advertising_data()
因此在文中找到查看对应的结构体并修改即可
adv_param.adv_intv_min = 300;
adv_param.adv_intv_max = 300;
上面对应的是广播的时间间隔.单位0.625ms 1s的广播间隔设置为1600即可…其他类似.看看sdk手册.
(2) 睡眠低功耗
调用API就完事了…
system_sleep_enable(); //使能
system_sleep_disable();//失能
进入低功耗无法进行jlink下载和调试哦.所以使用jlink下载记得延时会…
唤醒的方式很多种.IO中断触发,广播触发…
唤醒后,首先会进入 user_entry_after_sleep_imp()函数
需要在该函数,重新初始化外设,串口.gpio等…
(3) 蓝牙连接
开启广播后,手机APP(这里推荐使用nrf connect,其他也行)或者其他设备就可以搜索当前广播的设备了.在app_gap_evt_cb()处理不同的事件.比如连接,断开连接等…
(4) 数据通讯
这部分内容.需要一点ble协议栈的知识…我默认大家都会了…
profiles ----添加服务…
概念的东西我也不是很懂,我也是小白…我就知道添加服务,就能干活…
修要添加Characteristic 按照格式添加即可.可选读写 notify功能…
我主要讲解的数据通讯的数据处理…
sp_gatt_msg_handler()处理蓝牙的数据接收和发送…具体看代码,有详细的注释…
(5) notify
notify…主动通知…只要打开使能,设备主动向主机(手机app)发送内容,自定义.可以是温度,电池电量…
这里我是使用软件定时器…
这个变量下面的回调函数用到.连接从机的ID
软件定时器回调函数的内容:
//软件定时器回调函数
void temp_up_func(void *arg)
{uint8_t ret;int32_t temperature, humidity;co_printf("temp_up_func\r\n");//定义上报的notify的内容。。。ntf_att结构体。。gatt_ntf_t temp_ntf_att;temp_ntf_att.att_idx = SP_IDX_CHAR1_VALUE;temp_ntf_att.conidx = sp_conidx;temp_ntf_att.svc_id = sp_svc_id;//数据uint8_t show_string[60]={0};ret = sht3x_measure_blocking_read(&temperature, &humidity);//Read temperature humidityif (ret == STATUS_OK){sprintf((char *)show_string,"temperature = %0.1f,humidity = %0.1f\r\n",temperature/1000.0,humidity/1000.0);}else{sprintf((char *)show_string,"temperature = error,humidity = error\r\n");}temp_ntf_att.p_data = (uint8_t *)show_string;temp_ntf_att.data_len = sizeof(show_string);gatt_notification(temp_ntf_att);}
四 OTA
蓝牙OTA也是学习蓝牙必不可少的…在富芮坤中,已经把功能都实现了.我们只需将官方给的代码加入到我们的工程中即可…
首先在自己的工程中导入:\freqchip-FR801xH-SDK-master\FR801xH-SDK\components\ble\profiles\ble_ota目录下的4个文件…
然后在添加服务那里,将加入…就ok了…记住不要改ota的文件…老老实实的用就可以了.
ota_gatt_add_service(); //OTA服务
然后烧录代码…手机端下载tools中的ota.apk…然后修改代码编译生成.bin文件…传入到手机文件夹中…(这样注意哦:要升级和待升级都必须有ota服务…).
就是这么easy…毕竟人家都给我们做好了…
基于富芮坤的FR801 BLE芯片开发相关推荐
- 基于富芮坤fr8016 蓝牙5.0 芯片设计的BLE HID Joystick 游戏摇杆设备
文章目录 ble hid 学习笔记 HID报告描述符与BLE HID profile之间关系 1.HID报告描述符 富芮坤fr8016 设计Joystick例子 1.描述X轴Y轴Z轴 2.描述按钮 3 ...
- 富芮坤蓝牙FR801xH开发环境搭建
富芮坤蓝牙FR801xH方案开发资源包网盘下载链接:网盘 提取码:30qu 搭建过程: 安装Keil开发工具:mdk525.exe 可以从Keil官网下载:http://www.keil.com/fi ...
- 富芮坤FR801xH使用SDK开发蓝牙GATT协议栈教程
文章目录 一.FR801xH蓝牙芯片介绍 1.1 芯片外设资源 1.2 部分参数 1.3 芯片架构 二.开发(验证)板介绍 2.1 开发板资源 2.2 开发板烧录和串口调试方式 三.蓝牙协议栈SDK介 ...
- 富芮坤FR8008A开发环境
1. 富芮坤FR8008A介绍 FR8008A官网有详细介绍 首页-企业官网 2.富芮坤FR8008A开发资料 keil软件: https://www.keil.com/download/produc ...
- 【富芮坤】 RF801xH的rost demo添加 OTA 功能
[富芮坤] RF801xH的rost demo添加 OTA 功能: 官方的rost demo 并没有蓝牙的OTA功能.需要自己修改添加OTA功能进去. 操作步骤 步骤一:修改官方工程配置否则编译不过: ...
- 富芮坤FR8008A 串口驱动之TDS检测芯片BA012
1. TDS检测芯片简介 BA012 双通道水质总溶解性固体(TDS) 和水温检测的专用芯片. 内部集成高精密振荡电路.模数转换电路和浮点运算单元.采用专利电导率-TDS 转换算法和温度校正算法, 快 ...
- 富芮坤FR801xH蓝牙协议栈启动流程和notify实现温度数据主动上传
文章目录 一.蓝牙协议栈启动流程 1.1 初始化代码 1.2 初始化流程 1.3 回调函数里的初始化 二.notify实现 2.1 notify介绍 2.2 notify实现 2.3.1 定义数据 2 ...
- 富芮坤fr8008gp lvgl遇坑和解法:卡死在lvgl定时器中;SWD接口配置;
卡死在lvgl定时器中 官方提供的lvgl的demo在gui_main函数中如下设置定时器并调用window_manager_init函数初始化各个界面: /* Implement and regis ...
- 富芮坤FR801XH作为主机连接SYD8811
SYD8811使用开发板,代码使用的是透传例程:Source Code\SYD8811_ble_peripheral\1.SYD8811_BLE_UART_notifyen_open_power FR ...
最新文章
- ARTS打卡计划第二周-Share-使用java注解对方法计时
- 1951: [Sdoi2010]古代猪文
- php图片缩略图的方法,php生成图片缩略图的方法
- WPF 与Surface 2.0 SDK 亲密接触 - 图形缩放篇
- 0811-按钮操作(加法计算器)(拖控件找控件代码属性名称)(frame center bounds)(上下左右移动button图片)...
- 135、JS和Android交互范例
- 理解 JavaScript 闭包
- 数字滤波器的差分方程和传递函数
- LeetCode(811)——子域名访问计数(JavaScript)
- tcp长连接java_JAVA TCP长连接
- WinEdt LaTex(四)—— 自定义新命令(newcommand、def)
- 什么是FLV视频格式?FLV视频格式是什么意思?
- Spring知识点简介
- MFC实现虚拟桌面(桌面切换)
- 微信小程序跳转至京东店铺首页
- C++ 脚本解释器cint
- 10个视频|AICC芯片创新技术论坛
- 大恒相机sdk二次开发 _c#从0开始新建winform窗体实现相机基础采集功能
- 在php中如何打印粗体字,ps文字加粗在哪里
- python如何将数组里的数提取出来_python [:3] 实现提取数组中的数