[原创] Da14683学习日志(一) -- Central Demo例程学习总结

懒猫爱飞   2018-8-7 09:56 楼主
此内容由EEWORLD论坛网友懒猫爱飞原创,如需转载或用于商业用途需征得作者同意并注明出处 概述 DA14683是Dialog公司推出的针对智能家居、工业和可穿戴设备的单芯片蓝牙IC。它是32bit ARM Cortex-M0内核,支持蓝牙5及蓝牙mesh,并且支持无限的外部闪存以获得最大的设计灵活性。其主要特性如下所示:
  • 低功耗,仅30uA/MHz
  • 可动态地控制时钟频率,从32KHz到96MHz
  • 高达84 Dhrystone MIPS
  • 具有16KB高速缓存RAM存储器的4路相联高速缓存控制器
  • 专用应用处理器硬件加密引擎
  • 0dBm Tx输出功率和-93dBm Rx灵敏度
  • 3.4/3.1mA Tx/Rx @3V
  • 集成的换衡器(balun)
  • 50Ω匹配的单线天线接口
  • 集成的降压DCDC转换器
  • VBat 电源电压范围1.7V-4.75V
  • 用于外部器件的3个电源引脚
  • 支持锂聚合物电池、锂离子电池、纽扣电池、镍氢电池及碱性电池
  • 电池充电器(高达5.0V),具有可编程充电曲线
  • 高精度充电状态电量计
  • 可编程阈值的掉电检测
  • USB充电检测和保护
  • 37(AQFN)或21(WL-CSP)通用I/O,具有可编程电压电平
  • Quad-SPI闪存接口
  • 双UART,其中一个具有硬件流控
  • 双SPI+接口
  • 双I2C总线接口 @100KHz、400KHz
  • 三轴正交解码器
  • 带硬件采样率转换器的PDM接口(2个麦克风或2个扬声器)
  • I2S/PCM主从接口,多达8个通道
  • 具有消抖功能的键盘扫描仪
  • 红外(IR)接口(PWM)
  • USB全速(FS-Full speed)设备接口
  • 8通道10bit ADC,平均能力达到11.5ENOB(Effective Number of Bits )
  • 三个匹配的白色LED驱动器
  • 温度传感器
开发环境 DA14683用到的集成开发环境是Dialog公司自己开发的SmartSnippets IDE,它是基于Eclipse CDT开发的,需要配置一下其它插件用以开发。先安装SmartSnippets,然后再安装其它软件,用以配置插件,需要安装的软件主要有以下几个:
软件名称 软件描述
SmartSnippets_Studio_v1.6.3_windows.zip Dialog开的的集成开发环境
DA1468x_DA15xxx_SDK_1.0.12.1078.zip Dialog的SDK
gcc-arm-none-eabi-7-2018-q2-update-win32.exe GCC编译器,用来编译代码的
JLink_Windows_V632g.exe JLink驱动,用于下载程序
Ozone_Setup_Windows_V256r_x86.exe 用于仿真的
Setup_SystemView_V252a.exe 用于仿真分析及监视数据的
有需要的还是直接下载PDF吧,这论坛的编辑格式不太好用-_-
DA14683学习日志(1) - Central 工程学习总结.pdf (1.28 MB)
(下载次数: 116, 2018-8-7 10:04 上传)
本帖最后由 懒猫爱飞 于 2018-8-7 10:09 编辑
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void

回复评论 (10)

SDK简介 DA14683的SDK中包括ble_central,ble_peripheral,ble_usbhid等例程。看前面芯片的介绍,芯片功能确实很强大,但实际的例程并没有全面覆盖,所以会增加一些开发的难度,这也是大部分新推IC的通病,为了抢占市场,仓促上阵。
文件夹名称
例程
例程描述
ble_profiles
关于Profile相关的例程
ancs Apple Notification Center Service (ANCS) client Demo application
blp_sensor Blood Pressure Profile (BLP) Demo application
bms Bond Management Service Demo application
cscp_collector Cycling Speed And Cadence collector Demo application
hogp_device HOGP Device Demo application
hogp_host HOGP Host Demo application
hrp_collector Heart Rate collector Demo application
hrp_sensor Heart Rate Sensor Demo application
htp_thermometer Health Thermometer Profile (HTP) Demo application
wsp_weightscale Weight Scale Profile Demo
Demos 关于广播,功耗等的一些例程 ble_adv BLE ADV demo application
ble_external_host BLE External Host Demo application
ble_multi_link BLE multi-link demo application
peripherals_demo Peripherals demo application
power_demo Power Demo application
pxp_reporter Proximity Reporter Demo application
Features 一些特色的例程 ble_central BLE central role device Demo implementation
ble_peripheral BLE peripheral Demo application
ble_suota_client This application is a SUOTA 1.2 client implementation and allows to update SUOTA-enabled devicesover the air, using simple serial console interface.
ble_usbhid Include usb device and usb dongle
coex_test This application tests the COEX/Arbiter subsystem
extended_sleep Deep sleep application
ftdf_test_phy_api Ping-pong test program for the FTDF driver. "Bare metal" version
generic_winusb The FreeRTOS_Generic_WinUSB project
kbscn_demo Keyboard scanner demo
rf_tools_cli RF Tools CLI application
suousb_loader This is an application for Software Update over the USB CDC (SUOUSB)
usb_cdc This application is an example app about how to implement USB CDC.
usb_cdc_smsd This application is an example app about how to implement USB CDC and SmartMSD at the same time.
reference_designs plt_fw PLT FW reference design
Templates 模块例程 freertos_retarget FreeRTOS template application with retarget
freertos_rtt FreeRTOS template application with SEGGER RTT
以上32个例程就是SDK中的全部例程,在其开发文档中,描述的不是太详细,需要读者自己看代码摸索。另外可配合/doc/html/index.html文件,该文件对API有详细的说明。 要想快速上手SDK一般要从两个例程下手,1)ble_central 2) ble_peripheral是的一个是主机例程,一个是从机例程,掌握好这两个例程,SDK的基本框架就会明了,再看其它例程就会很快上手。 因为近一段时间一直在折腾usb_hid_dongle工程,所以对central摸索的比较多,下面先以ble_cntral工程进行分析总结,后面会对ble_peripheral例程做一篇学习笔记,如果时间允许,等做完ble_peripheral的笔记,笔者会对其它例程逐一进行整理,这是后话,下面就central的例程做一下整理。 占楼备用 本帖最后由 懒猫爱飞 于 2018-8-7 10:15 编辑
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
点赞  2018-8-7 09:56
ble_central工程工程结构 ble_central工程包括以下几个文件夹
Binaries 存放的是生成的elf文件
Include 包含头文件路径及头文件
config 工程配置及系统配置相关的文件
App 用户应用层相关源文件(这个是我后面建的,原DEMO中没有)
misc 关于内在地址的一些配置,不需要改动
sdk adapters 存放的是系统应用层的驱动接口源文件,包括电池,i2c,uart等
ble BLE协议栈相关的源文件,一般情况下不需要修改
ble_service 存放的是蓝牙服务相关的源代码
bsp_include 存放的是底层相关的一些头文件
config 存放的是配置相关的头文件,一般情况下不需要修改
cpm 存放的是系统相关的一些应用文件,一般情况下不需要修改
FreeRTOS 存放的是FreeRTOS相关的一条源文件,一般情况下不需要修改
Idscripts 链接相关的一些文件,不需要修改
memory 关于外部FLASH相关的源文件,换外部FALSH时可能要修改,目前没仔细研究
osal 系统相关的源文件,一般情况下不需要修改
peripherals 芯片外设相关的驱动,在适当的时候调用或者配合系统调用
startup 关于芯片底层的一些配置文件,暂时不需要改动
用户应用相关源文件 1) main.c 该文件是一些初始化函数,启动蓝牙协议栈,启动相关任务,主程序入口函数等。 函数列表该文件中主要包括以下几个函数:
? static void system_init( void*pvParameters ) – 系统初始化函数,包括系统时钟初始化,硬件接口初始化,蓝牙协议栈初始化,central_task启动等
? int main( void ) – 主程序入口,主要是建立初始化任务,启动系统等功能
? static void periph_init(void)– 外设驱动初始化,这里主要是串口引脚初始化
? static void prvSetupHardware(void ) – 硬件初始化相关
? voidvApplicationMallocFailedHook( void ) – 动态分配内存失败的钩子函数
? void vApplicationIdleHook(void ) – 空闲应用钩子函数
? voidvApplicationStackOverflowHook( OS_TASK pxTask, char *pcTaskName ) – 栈溢出钩子函数
? void vApplicationTickHook(void ) – 滴答应用钩子函数
函数简介下面对这几个关键函数做一下简单的注释,以方便理解:
函数名称 : system_init 函数描述 : 系统初始化,包括时钟初始化,硬件接口初始化等 入口参数 : *pvParameters – 入口参数,系统需要,目前暂时没有用到 出口参数 : None 函数备注 : None 函数名称 : periph_init 函数描述 : 外设驱动初始化,Dmo中初始化是的灯,这里我改成了串口引脚初始化 入口参数 : None 出口参数 : None 函数备注 : None 函数名称 : main 函数描述 :主程序入口 入口参数 : None 出口参数 : None 函数备注 :包括各种初始化,建立任务,启动任务等 函数名称 : prvSetupHardware 函数描述 :硬件初始化 入口参数 : None 出口参数 : None 函数备注 : None
关于硬件初始化方面,需要根据硬件设计做局部调整,这与其它MCU的设置类似,这里不再赘述占楼备用 本帖最后由 懒猫爱飞 于 2018-8-7 10:00 编辑
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
点赞  2018-8-7 09:57
1) ble_central_task.c 该源文件涉及到整个central角色的处理逻辑,所以需要好好理一下。下面结合相关函数,逐一总结。 函数列表源文件中涉及到函数如下所示:
? static const char*format_bd_address(const bd_address_t *addr) – 将MAC地址转换在字符串
? static const char*format_uuid(const att_uuid_t *uuid) – 将UUID转换成字符串
? static const char*format_properties(uint8_t properties) – 将属性值转换成字符串
? static voidformat_value(uint16_t length, const uint8_t *value) – 将数值转换成字符串
? static void scan_dev_evt(boolsw) – 启动/停止扫描
? static voidhandle_evt_gap_adv_report(ble_evt_gap_adv_report_t *evt) – 处理广播数据包及应答数据包
? static voidhandle_evt_gap_connected(ble_evt_gap_connected_t *evt) – 连接回调函数
? static voidhandle_evt_gap_disconnected(ble_evt_gap_disconnected_t *evt) – 断开连接回调函数
? static voidhandle_evt_gap_security_request(ble_evt_gap_security_request_t *evt) – 配对请求回调函数
? static voidhandle_evt_gap_pair_completed(ble_evt_gap_pair_completed_t *evt) – 配对完成回调函数
? static voidhandle_evt_gattc_browse_svc(ble_evt_gattc_browse_svc_t *evt) – 通过句柄扫描指定服务
? static voidhandle_evt_gattc_browse_completed(ble_evt_gattc_browse_completed_t *evt) – 服务扫描完成回调函数
? static voidhandle_evt_gattc_discover_desc(ble_evt_gattc_discover_desc_t *evt) – 发现描述回调
? static void handle_evt_gattc_discover_completed(ble_evt_gattc_discover_completed_t*evt) – 发现完成回调函数
? static voidhandle_evt_gattc_read_completed(ble_evt_gattc_read_completed_t *evt) – 读取参数完成回调
? static voidhandle_evt_gattc_write_completed(ble_evt_gattc_write_completed_t *evt) – 写参数完成回调
? static voidhandle_evt_gattc_notification(ble_evt_gattc_notification_t *evt) – 接收到notify回调
? static voidhandle_evt_gattc_indication(ble_evt_gattc_indication_t *evt) – 接收到inidication回调
? void ble_central_task(void*params) – cnetral的逻辑执行任务

以上19个函数就是central的所有逻辑应用函数,用它们可以完成基本的Central程序。为了构建自己的特有的逻辑应用,可以在此基础上添加其它逻辑应用程序,比如过滤广播包,比如加

函数简介下面对函数做一下简单的注释,以方便理解:
函数名称 : format_bd_address 函数描述 : 把MAC地址转换成字符串,主要是方便调试打印用的 入口参数 : *add – 要转换的MAC地址 出口参数 : 返回转换后的字符串指针 函数备注 : None 函数名称 : format_uuid 函数描述 : 把UUID转换成字符串,主要是方便调试打印用的 入口参数 : properties – 要转换的属性值 出口参数 : 返回转换后的字符串指针 函数备注 : None 函数名称 : format_properties 函数描述 : 把参数属性转换成字符串,主要是方便调试打印用的 入口参数 : *uuid – 要转换的UUID 出口参数 : 返回转换后的字符串指针 函数备注 : None 函数名称 : format_value 函数描述 : 把参数值转换成字符串,主要是方便调试打印用的 入口参数 : length – 要转换的数据长度 *value – 要转换的值 出口参数 : 返回转换后的字符串指针 函数备注 : None 函数名称 : scan_dev_evt 函数描述 : 启动或停止扫描 入口参数 : sw – true启动扫描 false停止扫描 出口参数 : 返回转换后的字符串指针 函数备注 : None 函数名称 : handle_evt_gap_adv_report 函数描述 : 扫描到应该数据广播包的回调函数 入口参数 : *evt – 广播包或应答数据 出口参数 : None 函数备注 : 如果需要过滤广播包或应答数据包可以在该函数中处理 函数名称 : handle_evt_gap_connected 函数描述 : 连接回调函数 入口参数 : *evt – 连接相关参数 出口参数 : None 函数备注 : 如果有其它逻辑处理程序可以在该函数中调用,比如发起配对,发起握手通信等 函数名称 : handle_evt_gap_connected 函数描述 : 连接回调函数 入口参数 : *evt – 连接相关参数 出口参数 : None 函数备注 : 如果有其它逻辑处理程序可以在该函数中调用,比如启动扫描服务,发起配对,发起握手通信等 函数名称 : handle_evt_gap_disconnected 函数描述 : 断开连接回调函数 入口参数 : *evt –相关参数 出口参数 : None 函数备注 : 断开连接后需要执行的动作可以在该函数中调用,比如闪灯,重新连接等 函数名称 : handle_evt_gap_security_request 函数描述 : 配对请求回调函数 入口参数 : *evt –相关参数 出口参数 : None 函数备注 : 接收到从机发来的配对请求,需要执行的动作可以在该函数中调用,比如触发配对等 函数名称 : handle_evt_gap_pair_completed 函数描述 : 配对完成回调函数 入口参数 : *evt –相关参数 出口参数 : None 函数备注 : 配对完成后需要执行的动作可以在该函数中执行,比如熄灭相指示灯,发起相关通信等 函数名称 : handle_evt_gattc_browse_svc 函数描述 : 通过handle值扫描指定的服务 入口参数 : *evt –相关参数 出口参数 : None 函数备注 : 会扫描到指定的服务,包括character,descriptor等 函数名称 : handle_evt_gattc_browse_completed 函数描述 : 服务发现完成的回调函数 入口参数 : *evt –相关参数 出口参数 : None 函数备注 : None 函数名称 : handle_evt_gattc_discover_desc 函数描述 : 发现特征值描述回调 入口参数 : *evt –相关参数 出口参数 : None 函数备注 : None 函数名称 : handle_evt_gattc_discover_completed 函数描述 : 完成发现所有服务回调 入口参数 : *evt –相关参数 出口参数 : None 函数备注 : None 函数名称 : handle_evt_gattc_read_completed 函数描述 : 读参数完成回调 入口参数 : *evt –相关参数 出口参数 : None 函数备注 : 执行读character动作,有返回值时会进入该回调函数,如果需要进行数据处理可以在该回调中调用。 函数名称 : handle_evt_gattc_write_completed 函数描述 : 写参数完成回调 入口参数 : *evt –相关参数 出口参数 : None 函数备注 : 执行完成写character动作后,会进入该回调函数,如果需要进行数据处理可以在该回调中调用。 函数名称 : handle_evt_gattc_notification 函数描述 : 接收到notify数据回调函数 入口参数 : *evt –相关参数 出口参数 : None 函数备注 : 收到notify数据后,会进入该回调函数,如果需要数据处理,请在该回调中调用。 函数名称 : handle_evt_gattc_notification 函数描述 : 接收到notify数据回调函数 入口参数 : *evt –相关参数 出口参数 : None 函数备注 : 收到notify数据后,会进入该回调函数,如果需要数据处理,请在该回调中调用。 函数名称 : handle_evt_gattc_indication 函数描述 : 接收到indication数据回调函数 入口参数 : *evt –相关参数 出口参数 : None 函数备注 : 收到indication数据后,会进入该回调函数,如果需要数据处理,请在该回调中调用。 函数名称 : ble_central_task 函数描述 : BLE任务函数,主要是启动BLE,执行相关回调任务等 入口参数 : * params –任务参数 出口参数 : None 函数备注 : None
一般要用到的回调就是handle_evt_gap_adv_report, handle_evt_gattc_notification,

handle_evt_gap_connected及handle_evt_gap_disconnected,如果需要什么逻辑处理,则需要开发者自己写相应的逻辑函数,然后再结合FreeRTOS设置定时事件,建立任务,发送消息等,关于FreeRTOS的应用,后面会单独写一篇学习日志,这里暂且不详细描述。

占楼备用 本帖最后由 懒猫爱飞 于 2018-8-7 10:01 编辑
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
点赞  2018-8-7 09:57
BLE协议栈相关源文件 与逻辑应用相关的BLE协议栈源文件主要存储在:工程/sdk/ble/config, 工程/sdk/ble/src, 工程/sdk/ble/include,其它主要涉及的源文件有以下一些
序号 文件名称 文件描述
1
ble_config.h 主要是一些BLE的设置,包括角色设置,连接个数,绑定个数等
2
ble_gap.c ble_gap.h Gap层应用API,及一些BLE设置项,这两个源文件 一般不需要更改
3
ble_gattc.c ble_gattc.h Gatt层相关的API及一些设置项
4
ble_gatts.c ble_gatts.h Gatt层server相关的一些API,相关数据类型可以在ble_gatts.h查看
5
ble_gatts.c ble_gatts.h Gatt层client相关的一些API,相关数据类型可以在ble_gattc.h查看
6
ble_common.c ble_common.h BLE通用的一些API,在ble_common.h文件中可以查看HCI error code
7
ble_gattc_util.c ble_gattc_util.h Gatt相关的一些API
8
ble_uuid.c ble_uuid.h 关于UUID的一些操作的API
以上这些源文件一般情况下不需要修改,只需要在使用时直接调用即可,而对应的头文件中,关于函数的声明也有详细的注释,这里不再重复赘述。另外关于BLE的配置,一定要在ble_config.h中设置,否则可能会出现问题。 硬件驱动相关源文件 底层驱动相关的源文件都存放在:工程—>sdk-->peripherals。关于底层驱动需要配合MCU的数据册来看,目前笔者只用到了UART还有USB这两块,其它的驱动模块还没有用到,所以这里关于驱动模块不做详细记录,在用到时再作学习总结。 下面把涉及到的底层驱动的源文件罗列一下:
序号
文件名称
文件描述
1
hw_aes_hash.c hw_aes_hash.h 这两个源文件是关于AES加密相关的
2
hw_coex.c hw_coex.h 关于仲裁调试机制的驱动,暂时还没有用过
3
hw_cpm.c hw_cpm.h 时钟与电源管理驱动
4
hw_crypto.c hw_crypto.h Implementation of interrupt handling for the AES/Hash and ECC Engines.
5
hw_dma.c hw_dma.h DMA相关的底层驱动
6
hw_ecc_curves.c hw_ecc_curves.h ECC Engine curves parameters.
7
hw_ecc_ucode.c hw_ecc_ucode.h ECC Engine microcode.
8
hw_ecc.c hw_ecc.h Implementation of the ECC Engine Low Level Driver.
9
hw_fem_sky66112-11.c hw_fem_sky66112-11.h FEM Driver for SKYWORKS SKY66112-11 Radio module
10
hw_gpadc.c hw_gpadc.h Implementation of the GPADC Low Level Driver.
11
hw_gpio.c hw_gpio.h 关于端口操作相关的API,这个可能用的比较多
12
hw_hard_fault.c hw_hard_fault.h HardFault handler.
13
hw_i2c.c hw_i2c.h 硬件iic底层驱动
14
hw_irgen.c hw_irgen.h 关于红外的底层驱动
15
hw_keyboard_scanner.c hw_keyboard_scanner.h 按键扫描相关的底层驱动
16
hw_otpc.c hw_otpc.h Implementation of the OTP Controller Low Level Driver.
17
hw_qspi.c hw_qspi.h Implementation of the QSPI Low Level Driver.
18
hw_quad.c hw_quad.h 正交编码的驱动
19
hw_rf.c hw_rf.h 射频模块驱动
20
hw_soc.c hw_soc.h Implementation of the SOC Low Level Driver.
21
hw_spi.c hw_spi.h SPI底层驱动,这个与qspi不一样,qspi是高速SPI接口
22
hw_tempsens.c hw_tempsens.h 温度传感器驱动
23
hw_timer0.c hw_timer0.h 定时器0底层驱动
24
hw_timer1.c hw_timer1.h 定时器1底层驱动
25
hw_timer2.c hw_timer2.h 定时器2底层驱动
26
hw_trng.c hw_trng.h 随机数生成器
27
hw_uart.c hw_uart.h 串口底层驱动
28
hw_usb_charger.c hw_usb_charger.h USB充电管理模块驱动
29
hw_usb.c hw_usb.h USB底层驱动,这个只是底层驱动,要实现USB传输,还要配合USB协议来定,USB协议栈用的是segger公司 的协议栈。
30
hw_watchdog.c hw_watchdog.h 看门狗相关驱动
31
hw_wkup.c hw_wkup.h Implementation of the Wakeup timer Low Level Driver.
32
sys_tcs.c sys_tcs.h TCS HAndler
目前这颗IC用的比较少,所以底层驱动有到的也比较少,因为调试需要,所以串口有用到,USB驱动也有用到,因为USB涉及的内容比较多,这里暂时先不详述,后面会单独开一篇去总结。关于串口,为了打印方面,添加了一下可以输入任意参数的打印函数,类似pritf(…),也就是支持可变参数的输入。函数的添加方法如下所示:

在源文件hw_uart.c中添加以下头文件:

/************************************************************************************ * 函数名称 : * 函数描述 : 发送一串数据 * 入口参数 : uart - 端口号HW_UART1/HW_UART2 * *data - 要发送的数据 * len - 要发送的数据的字节数 * 出口参数 : None * 函数备注 : None *************************************************************************************/ #if (DEBUG_PRINT_EN == TRUE) // 最多可以打印128个字符 #define DEBUG_PRINT_BUF_LEN (128)
int Debug_Printf(const char *fmt, ...)
{
uint32 ulLen = 0;
va_list ap;
// 开辟缓冲区
char *pBuf = (char *)OS_MALLOC(DEBUG_PRINT_BUF_LEN);
// char *pBuf = (char *)malloc(DEBUG_PRINT_BUF_LEN);
va_start(ap,fmt);
if(pBuf != NULL)
{
// 用虚拟打印函数实现
ulLen = vsprintf(pBuf,fmt,ap);
va_end(ap);
// 从串口输出
hw_uart_write_buffer( CONFIG_RETARGET_UART, (uint8 *)pBuf, ulLen );
// 释放存储空间
OS_FREE(pBuf);
//free(pBuf);
}
return ulLen;
} #else int Debug_Printf(HW_UART_ID uart,const char *fmt, ...) { return 0; } #endif /* DEBUG_PRINT_EN */ // 以下这个宏在custom_config_qspi.h中有定义,用以定义从哪个串口输出打印信息 #define CONFIG_RETARGET_UART HW_UART2
有了以上这个函数,以后想打印什么信息就可以按下面的方式输入: J 单独打印字符串

Debug_Printf("Systemstart...\r\n");

J 打印字符串及相关参数,用法同printf()

Debug_Printf("%s: hdr->evt_code= %X\r\n",__func__,hdr->evt_code);

后记 关于其它源文件,在开发过程中一般不需要修改,如果有兴趣研究,可以结合源代码来看,这里不再一一列举。在查看源码时,还需要参考FreeRTOS的手册,BT Core5.0等文档来协助理解。在工程目录下的doc文件夹的文档也需要注意查看,还有就是Dialog官网的社区论坛,这里面也可以找到相关问题的答案。 这粘贴功能不太好用,WORD里面编辑的漂亮的格式,粘贴到里毁三观,等下把PDF文档上传到这里 本帖最后由 懒猫爱飞 于 2018-8-7 10:02 编辑
点赞  2018-8-7 09:59
先占个座,后面可能会补充内容^_^ 本帖最后由 懒猫爱飞 于 2018-8-7 10:18 编辑
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
点赞  2018-8-7 10:02
版主此文甚好
点赞  2018-8-7 13:55
引用: okhxyyo 发表于 2018-8-7 13:55 版主此文甚好
微信截图_20180807140207.png 我在world中格式都整理好了,自认为看起来还比较舒服。 所以下载PDF看吧,论坛的格式整理起来太麻烦,而用world粘贴的方式,格式又乱掉了,希望网站相关技术人员能做一下改进 本帖最后由 懒猫爱飞 于 2018-8-7 14:03 编辑
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
点赞  2018-8-7 14:00
引用: 懒猫爱飞 发表于 2018-8-7 14:00
我在world中格式都整理好了,自认为看起来还比较舒服。


所以下载PDF看吧,论坛的格式整理起来太麻烦 ...

嗯嗯,确实这个编辑器不是太好用。他跟word的编码是不一样的。所以贴过来可能会有点乱。我们后面打算寻找个其他编辑器啦。
玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2018-8-7 18:10
这款应该是支持蓝牙5.0的吧。现在的SDK还是像以前那样凌乱吗,有没有好转。
点赞  2018-8-14 09:15
引用: jj1989 发表于 2018-8-14 09:15
这款应该是支持蓝牙5.0的吧。现在的SDK还是像以前那样凌乱吗,有没有好转。

现在格式好多了,只是注释不到位,我都按自己的风格整理了一下^_^
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
点赞  2019-1-7 13:33
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复