社区导航

 
查看: 285|回复: 9

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

[复制链接]

352

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-8-7 09:56:37 | 显示全部楼层 |阅读模式
本帖最后由 懒猫爱飞 于 2018-8-7 10:09 编辑

此内容由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, 下载次数: 4)
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: 422240210


回复

使用道具 举报

352

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-7 09:56:52 | 显示全部楼层
本帖最后由 懒猫爱飞 于 2018-8-7 10:15 编辑

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中的全部例程,在其开发文档中,描述的不是太详细,需要读者自己看代码摸索。另外可配合<sdk_root_directory>/doc/html/index.html文件,该文件对API有详细的说明。
要想快速上手SDK一般要从两个例程下手,1)ble_central  2) ble_peripheral是的一个是主机例程,一个是从机例程,掌握好这两个例程,SDK的基本框架就会明了,再看其它例程就会很快上手。
因为近一段时间一直在折腾usb_hid_dongle工程,所以对central摸索的比较多,下面先以ble_cntral工程进行分析总结,后面会对ble_peripheral例程做一篇学习笔记,如果时间允许,等做完ble_peripheral的笔记,笔者会对其它例程逐一进行整理,这是后话,下面就central的例程做一下整理。
占楼备用
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: 422240210


回复

使用道具 举报

352

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-7 09:57:29 | 显示全部楼层
本帖最后由 懒猫爱飞 于 2018-8-7 10:00 编辑

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的设置类似,这里不再赘述占楼备用
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: 422240210


回复

使用道具 举报

352

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-7 09:57:45 | 显示全部楼层
本帖最后由 懒猫爱飞 于 2018-8-7 10:01 编辑

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的应用,后面会单独写一篇学习日志,这里暂且不详细描述。

占楼备用
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: 422240210


回复

使用道具 举报

352

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-7 09:59:52 | 显示全部楼层
本帖最后由 懒猫爱飞 于 2018-8-7 10:02 编辑

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文档上传到这里


回复

使用道具 举报

352

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-7 10:02:26 | 显示全部楼层
本帖最后由 懒猫爱飞 于 2018-8-7 10:18 编辑

先占个座,后面可能会补充内容^_^
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: 422240210


回复

使用道具 举报

7967

TA的帖子

128

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2018-8-7 13:55:35 来自手机 | 显示全部楼层
版主此文甚好

点评

下载PDF看吧,论坛的格式整理起来太麻烦,而用world粘贴的方式,格式又乱掉了,希望网站相关技术人员能做一下改进  详情 回复 发表于 2018-8-7 14:00


回复

使用道具 举报

352

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-8-7 14:00:09 | 显示全部楼层
本帖最后由 懒猫爱飞 于 2018-8-7 14:03 编辑
微信截图_20180807140207.png
我在world中格式都整理好了,自认为看起来还比较舒服。


所以下载PDF看吧,论坛的格式整理起来太麻烦,而用world粘贴的方式,格式又乱掉了,希望网站相关技术人员能做一下改进

点评

嗯嗯,确实这个编辑器不是太好用。他跟word的编码是不一样的。所以贴过来可能会有点乱。我们后面打算寻找个其他编辑器啦。  详情 回复 发表于 2018-8-7 18:10
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: 422240210


回复

使用道具 举报

7967

TA的帖子

128

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2018-8-7 18:10:47 | 显示全部楼层
懒猫爱飞 发表于 2018-8-7 14:00
我在world中格式都整理好了,自认为看起来还比较舒服。


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

嗯嗯,确实这个编辑器不是太好用。他跟word的编码是不一样的。所以贴过来可能会有点乱。我们后面打算寻找个其他编辑器啦。


回复

使用道具 举报

169

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 前天 09:15 | 显示全部楼层
这款应该是支持蓝牙5.0的吧。现在的SDK还是像以前那样凌乱吗,有没有好转。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-8-16 23:36 , Processed in 0.298034 second(s), 18 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表