文档库 最新最全的文档下载
当前位置:文档库 › STM32- nRF51822蓝牙低功耗(BLE)系统解决方案

STM32- nRF51822蓝牙低功耗(BLE)系统解决方案

STM32- nRF51822蓝牙低功耗(BLE)系统解决方案
STM32- nRF51822蓝牙低功耗(BLE)系统解决方案

AN4605

应用笔记

STM32- nRF51822蓝牙低功耗(BLE)系统解决方案

介绍

本应用笔记介绍了蓝牙低功耗(BLE)嵌入式软件(X-CUBE-nRF51DRV)实现对STM32L0系列和nRF51822,并解释如何界面自己的应用程序,并创建BLE服务。

在X-CUBE-nRF51DRV主要特点如下:

?与北欧提供的BLE型材兼容性

?应用程序集成就绪

?易于附加在STM32L0系列低功耗解决方案BLE

?极低STM32L0 CPU负载(HRS 1秒更新率0.127%)

?没有对STM32L0系列延迟要求

?小STM32L0内存占用

在X-CUBE-nRF51DRV软件是基于STM32CubeL0 HAL驱动程序(见第2节)。

同时提供了使用北欧BLE服务于客户STM32L0应用实例。

该参考硬件平台是STM32-nRF51822基于STM32Nucleo / 64上和Wavetek公司蓝牙LE与盾北欧BLE模块nRF51822。

注:X-CUBE-nRF51DRV可以移植到其它STM32系列。

目录

1引用。。。。。。。。。。7

2 STM32Cube概述。。。。。。。。。。。。。。。。。。。8

3,嵌入式软件的定义。。。。。。。。。。。。。。。。。。。。9 4入门。。。。。。。。。。。11

4.1 BLE系统描述。。。。。。。。。。。。。。。。。。。0.11

4.2特性。。。。。。。。。。。。。。。。。0.11

4.3硬件/软件的快速设置。。。。。12

5参考平台。。。。。。。。。。。。。。。。。。。。。。。13 5.1接口描述。。。。。。。。。。。。。。。。。。。。。。13 5.2 UART 4线接口。。。。。。。。。14

5.3重置系统。。。。。。。。。。。。。14

5.3.1上电复位。。。。。。。。。。。。。15

5.3.2系统复位。。。。。。。15

5.4器件编程。。。。。。。。。。。16

6嵌入式软件的描述。。。。。。。18

6.1 UART接口。。。。。。。。18

6.1.1 BLE SD FW模块。。。。。。。。19

6.1.2低功耗经理。。。。。。20

6.1.3中断。。。。。。。。。。。。。20

6.1.4语境经理。。。。。。。。。。。20

6.1.5配置。。。。。。。。。。。。。。。21

当BLE功能使用

6.1.6 STM32资源需求。。。。。。。。。。21

6.1.7集成。。。。。。。。。。。。。。。。22

6.1.8可移植性。。。。。。。。。。。。。。。。。。22

6.2定时器接口。。。。。。。。。。。。。。。23

6.2.1 BLE SD FW模块。。。。。。。。。。25

6.2.2初始化。。。。。。。。。。。。。。。。。25

6.2.3用户模块。。。。。。。。。。。。。。。。。26

6.2.4中断。。。。。。。。。。4

6.2.5语境经理。。。。。。。。26

6.2.6配置。。。。。。。。。。。。。。。。27

6.2.7集成。。。。。。。。。。。。。。。。。。。27

6.2.8可移植性。。。。。。。。。。。。。。。。。。。。。27 6.3 NVM接口。。。。。。。。。。。。。。。。。。28

6.3.1 BLE SD FW模块。。。。。。。。。。。。31

6.3.2初始化。。。。。。。。。。。。。。。。。31

6.3.3操作。。。。。。。。。。。。。。。。。。。31

6.3.4低功耗经理。。。。。。。。。。。。32

6.3.5中断。。。。。。。。。。。。。。。。。。。。32

6.3.6配置。。。。。。。。。。。。。。。32

6.3.7集成。。。。。。。。。。。。。。。。。。32

6.3.8可移植性。。。。。。。。。。。。。。。。。。32

6.4低功耗管理器界面。。。。。。。33

6.4.1 API。。。。。。。。。。。。。35

6.4.2配置。。。。。。35

6.4.3集成。。。。。。。。。35

6.4.4可移植性。。。。。。。35

6.5 BLE SD FW模块固件应用集成。。。。。。。36

6.5.1 BLE启动。。。。。。。。。。。。。36

与BLE SD FW模块6.5.2通信。。。。。。。。。。36

6.6可移植性。。。。。。。。。。。。。。。37

7 BLE应用程序配置。。。。。。。38

7.1架构。。。。。。。。。。。。。。。38

7.2直考模式的应用程序。。。。。。。。。。。。。。39

7.3心率监测/健康温度计应用。。。。。。。。。。。。。。40

7.3.1广告的应用程序。。。。。。。。。。。。。。40

7.3.2心率的应用程序。。。。。。。。。。。。40

7.3.3卫生thermomether应用。。。。。。。。。42

8性能结果。。。。。。。。。。。。。。。。。。43

8.1静态功耗。。。。。。。。。。。43

8.2 SD命令交换机的功耗曲线。。。。。。。。。43

8.3连接的平均功耗。。。。。。。。。。。。。。。44

8.4数据吞吐量。。。46

9系统的局限性。。。。。。。。。。。。47

10修订历史。。。。。48

表一览

表1. STM32的内存占用(HRS应用程序)。。。。。。。。。9

表STM32和nRF51822 2之间的接口。。。。。。13

表STM32和Wavetek公司董事会之间3.接口。。。。。。。。。。。13

表4.配置BLE应用。。。。。。40

表5. HRS简介平均功耗。。。。。。。。。。。。。。。46

表6.最大数据吞吐量L2CAP平均功耗。。。。。。。。。46

表7.文档修订历史记录。。。。。。。。。。。48

附图说明

图1. STM32 + nRF51822系统架构。。。。。。。。。。。10

图2. STM32 + nRF51822人力资源管理在Android上。。。。。。。12

图3.硬件平台堆叠(Arduino的信号)。。。。。。。13

图4. nRF51822 - STM32通讯接口UART 4线。。。。。。。。。14

图5. STM32编程与ST-LINK工具。。。。。。。。。。。。。。。16

图6. nRF51822器件编程。。。。。。。。。。。。。。。。。。。。17 图7.嵌入式软件概述API。。。。。。。。。。。。18

图8. UART接口的概述。。。。。。。。。。。。。。。。。。。19 图9.定时器接口概述。。。。。。。。。。。。。。。。。。24

图10.定时器设计概述。。。。。。。。。。。。。25

图11. NVM接口概述。。。。。。。。。。。。29

图12. NVM设计概述。。。。。。。。。。。。。。。。三十

图13.低功耗管理器接口的概述。。。。。。。。。。。。。。33

图14.低功耗设计经理介绍。。。。。。。。34

图15.调度执行。。。。。。。。。。。。。。。。37

图16.应用程序概述。。。。。。。。。。。。。。。。。。。。38 图17.应用DTM访问。。。。。。。。。39

图18. RxSD命令交流功耗。。。。。。。。。。。。。。43

图19. TxSD命令交流功耗。。。。。。。。。。。。。。。。。。44

图20. STM32心脏率监测移动的通知。。。。。。。。。。。。。45

参考文献1

[1] nRF51822软设备规格,北欧:

https://www.wendangku.net/doc/443835443.html,/

[2] nRF51822参考手册,北欧:

https://www.wendangku.net/doc/443835443.html,/

[3] nRF51822产品规格,北欧:

https://www.wendangku.net/doc/443835443.html,/

[4]北欧串行项目的API

https://www.wendangku.net/doc/443835443.html,/

[5] STM32参考手册,ST:

https://www.wendangku.net/doc/443835443.html,/

[6] STM32数据表- 生产数据,ST:

https://www.wendangku.net/doc/443835443.html,/

[7] STM32核蛋白HW用户手册,ST

https://www.wendangku.net/doc/443835443.html,/

[8] Wavetek公司的Arduino蓝牙LE屏蔽UM,Wavetek公司

HTTP://https://www.wendangku.net/doc/443835443.html,STM32Cube概述AN4605

2 STM32Cube概述

STMCubeTM倡议最初由意法半导体以缓解开发商的生活降低了开发力度,时间和成本。STM32Cube涵盖STM32产品组合。

STM32Cube 1.x版包括:

?该STM32CubeMX,一个图形化的软件配置工具,它允许生成C

使用图形向导初始化代码。

?全面的嵌入式软件平台,每个系列的交付(如

STM32CubeL0为STM32L0系列)

- 该STM32Cube HAL,一个STM32抽象层嵌入式软件,确保

整个STM32系列的便携性最大化

- 一套一致的中间件组件,如RTOS,USB,TCP / IP协议,

图像

- 所有的嵌入式软件实用程序即将拥有全套examples.

3嵌入式软件定义

以下软件组件用于:

?x立方体-nRF51DRV:STM BLE的应用解决方案,包括BLE SD FW模块

基于STM32CubeL0(见第2节:STM32Cube概述)。

?nRF51822 S110 SoftDevice二进制(见参考文献北欧)

?nRF51822从北欧的连接解决方案连载(见参考北欧

文档)

表1. STM32的内存占用(HRS应用程序)

ROM(字节)RAM(字节)

BLE SD FW模块25.7 2.6

NVM驱动程序,服务器的定时器,UART驱动,低

电源管理器

系统解决方案(STM32 + nRF51822)提供2-芯片BLE解决方案,其中的STM32操作为主机设备和nRF51822是连接部分。整个BLE堆栈位于nRF51822装置,它与STM32通过UART 接口上。

该BLE SD FW模块,UART,定时器,NVM和客户应用都是建立在STM32平台。客户应

用可以是一个专用的简单BLE应用程序或在其BLE连接的是增加了一个更广泛的应用:

下面的模块需要一个BLE连接添加到STM32:

?个人资料服务管理

的BLE服务在nRF51822系统上运行,并且该模块被提供实施建议的STM32侧管理每个支持BLE服务。虽然实施方案准备好被使用时,用户可实现它自己的服务管理。

?BLE SD FW模块

预计不会被用户修改此模块。它提供了一个接口的应用程序发送和接收与所述nRF51822系统消息。它需要STM32的平台计时器,一个UART和NVM。

?定时器服务器

定时器服务器是一个模块的实施方案,可以提供多个虚拟计时器所有共享RTC唤醒。该模块BLE得到一个计时器从模块进行操作,但用户可以实现其自己的定时器机制是连接到BLE模块。

?NVM司机

所述非易失性存储器驱动器是一个非常具体的实施方案,使用EEPROM中,适合用来由BLE SD固件模块。它提供了一个高效机制,以尽量减少写在所需的高延迟的性能影响EEPROM 中。可以实现其自身的NVM驱动用户连接到BLE

SD FW模块。

?UART驱动:

UART驱动程序实现了一个专有的低功耗通信协议在STM32的和nRF51822系统之间的UART。尽管用户可以实施其自己的驱动程序,强烈建议使用目前的执行情况已预先集成,以便它已准备好被使用。

?低功耗经理:

UART和NVM驱动程序使动态上的可用性要求HS时钟。在此之上,该应用程序可具有某些模块可能需要不同低功率模式随时间。低功耗管理提供了一个一个简单的界面实施建议收到有关电源的所有要求管理和计算的最低功耗模式,系统可以进入。用户可以实现其自身的低功耗管理。

在nRF51822系统上的详细描述可在北欧的网站。

该STM32 + nRF51822 BLE体系架构给出如下图所示。

图1. STM32 + nRF51822系统架构

4入门

4.1 BLE系统说明

默认情况下,目标MCU和ST-LINK MCU之间的UART通信已启用为了支持SB13和SB14 ON,SB62和SB63关闭虚拟COM端口。

作为目标MCU和屏蔽或扩展板之间的通信是必需的,

SB62和SB63应为开,SB13和SB14应该关闭。

该解决方案由下列嵌入式软件项目的:

?意法半导体BLE FW包:三个预编译的应用程序

- stm_dtm_app.hex

- stm_hrs_app.hex

- stm_hts_app.hex

?nRF51822 SoftDevice二进制(https://www.wendangku.net/doc/443835443.html,)

?s110_nrf51822_6.0.0_softdevice.hex

?从北欧nRF51822系列化解决方案(https://www.wendangku.net/doc/443835443.html,)

- ble_app_connectivity.hex

作为参考平台上运行以前的软件以下硬件项目使用:

?1个STM32Nucleo / 64板与REVC STM32L053R8(NRF ..- ..

看到核蛋白REV C硬件用户手册[7]更多细节

?1个Wavetek公司的Arduino屏蔽与北欧BLE模块nRF51822

看到Wavetek公司屏蔽用户手册[8]更多细节

Android手机上运行的STM32 BLE工具箱可以作为演示工具。

?与解决方案交付STM32_BLE_Toolbox.apk

4.2产品特点

以下几点BLE服务与系统解决方案提供支持:

?与电池监控心率服务

?健康服务的温度计

?直接测试模式进入

?广告only

4.3硬件/软件快速设置

通过Arduino的?插头Wavetek公司蓝牙LE盾STM32Nucleo / 64板

连接器。

?STM32的核白/ 64板与USB电缆未连接到PC(USB线提供)

?该PWD LED2应亮起

?作为前置条件,对nRF51822 S110软设备二进制文件必须进行编程。请参阅北欧快速入门指南文档。(这部分不能与ST-编程LINK)

?nRF51822需要与“连接序列”应用进行编程。

?要设定“连接连载”通过ST-LINK

- ST-LINK CN2跳线关闭

- Wavetek公司蓝牙LE屏蔽RST J5和J6跳线关闭

- 连接SWDCLK接口引脚

STM32Nucleo / 64 ST-LINK SWD CN4引脚2 Wavetek公司蓝牙LE盾P1 / JLINK SWDCLK PIN4

- 连接SWDIO接口引脚

STM32Nucleo / 64 ST-LINK SWD CN4管脚4到Wavetek公司蓝牙LE盾J6.1

- 装载“连接”二进制的nRF51822使用Keil?或其他工具

?为STM_ble_app“应用程序选择功能BLE

- 打开“STM_ble_app”项目,由MDK-ARM微控制器开发工具包凯尔?或其他工具

- 开放app_conf.h来配置你的项目和编译。

?程序的STM32与“STM_ble_app”应用

- 删除STM32Nucleo / 64 ST-LINK之间SWD接口连接W A VETEK蓝牙LE盾

- ST-LINK CN2跳线是

- 装载“STM_ble_app”二进制STM32上使用Keil?或其他工具(STM32 ST-LINK实用程序)?复位与核蛋白板复位按钮B2系统。

?BLE状态是广告

?使用Android或iPhone应用程序来验证广告商包

图2. STM32 + nRF51822 在Android上的HRM

5参考平台

5.1接口描述

该STM32 + nRF51822系统硬件平台将包括一个STM32Nucleo / 64板从意法半导体与堵塞

nRF51822 Wavetek公司Arduino的盾与BLE模块nRF51822从北欧。

此外,还有可能通过一个添加的应用程序模块的系统的顶扩展Arduino的盾牌。

图3.硬件平台堆叠(Arduino的信号)

STM32的和nRF51822之间的接口包括以下Arduino的信号:

STM32和Wavetek公司董事会之间的附加应用程序接口包含的以下Arduino的信号:

注意:默认情况下,Wavetek公司蓝牙LE盾未配置为使用按钮和指示灯

在黑板上。

下面焊领域已接近:

SF8:SW1-Button1的

SF7:SW2,将Button2

SF6:SW3-按钮3

SF5:LED1

SF4:LED2

SF3:LED3

5.2 UART 4线接口

在UART 4线接口用于在2个设备之间的通信。硬件CTS / RTS流量控制信号也被用于低功率控制。

5.3系统复位

复位系统可以分为以下功能:

?上电复位

?系统复位

nRF51822盾(Wavetek公司)跳线复位J1应关闭。

图4. nRF51822 - STM32通讯接口UART 4线

5.3.1上电复位

无论是STM32和nRF51822有自己的集成上电复位检测这些将保证,无论是STM32和nRF51822器件复位上正确应用能力。

5.3.2系统复位

系统复位按钮连接到STM32。系统复位STM32这随后将生成的GPIO复位脉冲复位nRF51822。这将保证,无论是STM32和nRF51822器件复位系统复位。

为了让STM32通过GPIO复位nRF51822,Wavetek公司蓝牙LE屏蔽跳线J5复位

&J6应关如果D9和n重设(J6.1)通过电缆连接。

另一种选择是使系统复位由STM32Nucleo / 64系统复位,跳线J5应

关和跳线J6应。如果电缆不connected.Reference平台

5.4器件编程

该系统解决方案,通过ST-LINK同时为STM32提供FW可能性下载和nRF51822序列化的应用程序。(该nRF51822“软设备”不能装载与在ST-LINK)。

请参阅如何编程的嵌入式软件STM32Nucleo / 64 HW用户手册。

编程与ST-LINK / V2 STM32的溶液,下面的过程必须是尊敬的:

?删除SWD电缆连接

?STM32Nucleo / 64 CN2跳线

?请参阅使用STM32 ST-LINK实用程序完成的示例中STM32上编程

STM32Nucleo / 64板

- 连接ST-LINK实用工具选项:连接复位下

- 打开“STM_ble_app.hex”

- 计划

图5. STM32编程与ST-LINK utility

编程与ST-LINK的nRF51822解决方案,下面的过程必须是尊敬的:

?STM32Nucleo / 64 CN2跳线关闭

?Wavetek公司蓝牙LE屏蔽RST J5和J6跳线关- n重设与STM32之间nRF51822没有连接?连接JTCK

- STM32Nucleo / 64的ST-LINK SWD CN4 PIN2码Wavetek公司蓝牙LE盾JLINK SWDCLK PIN4

?连接SWDI0

- STM32Nucleo / 64的ST-LINK SWD CN4管脚4到Wavetek公司蓝牙LE盾J6 PIN1

或JLINK SWDIO PIN2

?请参阅使用Keil完成的示例中nRF51822上Wavetek公司蓝牙LE编程盾

- 使用ST-Link的调试器

- 选择调试端口SW

- 选择编程算法nRF51xxx

图6. nRF51822设备programmingEmbedded软件说明

6嵌入式软件介绍

本节提供的不同的块中示出的接口的描述

图7:

?(UART的BLE SD FW模块与STM32外设之间的接口,定时器,NVM)

?的BLE SD固件模块和应用程序之间的接口

?与低功耗管理器界面

?该项目结构的文件夹。它描述了BLE SD FW模块之间的分裂使得它不需要由应用程序的任何修改和所需要的文件要由应用进行调整。

图7.嵌入式软件API概述

6.1 UART接口

该BLE模块发送和通过UART接口接收数据。UART驱动程序提供了一个简单的接口来发送和接收消息并实现了一个专有协议通知应用程序时,UART可能会被禁用进入低功耗模式。

图8. UART接口概述

6.1.1 BLE SD FW模块

下列接口必须被映射到该BLE模块。它们不使用的应用程序:

?LPPUART_uart_open()

?LPPUART_send_data()

?LPPUART_receive_data()

作为映射不依赖于该应用程序,但只对BLE SD固件模块

界面,默认的实现是在文件ble_uart.c完成。

没有必要为应用程序进行任何修改。

6.1.2低功耗经理

?LPPUART_HSclkRequest()

此API通知应用程序时在HS时钟可以被停止,当它应保持启用。此外,应用程序可开关ON DMA的时钟与UART使用时,HS时钟请求并关闭的时钟DMA中的HS当主频不是必需的。这将节省额外的电源时,进入休眠模式。设置在实施例中的默认实现保持DMA时钟使所有的时间,因为这对系统电源边际影响消耗。

6.1.3中断

?LPPUART_wcts_handler()

该中断处理程序应当由EXTI中断处理程序的应用程序调用相关的IO引脚,其中的CTS已在文件中定义stm32yyxx_lppuart_configuration.h。这种处理器需要清除所有状态的护理需要UART外设标志。

?LPPUART_uart_handler()

该中断处理程序应由UART的中断处理程序的应用程序调用用于与NRF装置的通信和定义的文件中stm32yyxx_lppuart_configuration.h。这种处理器需要清除所有状态的护理需要UART外设标志。

?LPPUART_dma_rx_handler()

该中断处理程序应当由DMA中断处理程序的应用程序调用与UART使用的外设(如在参考手册中定义的[5]),连接到救国阵线设备。该处理器采用清零DMA所需的所有状态标志的护理外围。

6.1.4上下文经理

?LPPUART_Msg_Handler()

该API通知在UART的事件发生的BLE SD固件模块接口。默认情况下,所有的消息都在UART中断上下文处理时从STM32和由STM32收到当DMA中断上下文中发送。该应用程序可以实现一个操作系统来改变环境优先其中BLE消息可能被处理。的信号到BLE任务可以由发送这个API通知一个完整的消息已经收到或以上版本UART.

6.1.5配置

UART驱动程序是完全配置在文件stm32yyxx_lppuart_configuration.h。

?应用程序可以选择UART外设连接到NRF装置和UART IO映射的引脚。

?应用程序可以改变UART波特率。然而,建议保持默认设置为1Mbits功耗优化。当UART 波特率改变,这一规定的STM32和NRF设备上完成。

?UART驱动程序使用DMA,UART和EXTI中断。优先级的设置NVIC可以改变,以允许应用程序就选择最佳优先现有的中断和时序要求。UART驱动程序能够运行良好任何优先级。建议保持相同的次序作为默认配置提供了UART最好的延迟。默认顺序是DMA(在最高),UART和EXTI(最低)。

?UART驱动程序使用的关键部分,以避免腐败的环境。实现这一点

与宏LPPUART_ENTER_CRITICAL_SECTION和LPPUART_EXIT_CRITICAL_SECTION。默认实现屏蔽所有STM32中断与CortexM CPU的PRIMASK位。它是可以使用的BASEPRI 在CortexM CPU的寄存器允许不断高优先级的中断一些。在那情况下,用户应确保BLE时启用和UART驱动关键部分输入的:

- 该GPIO和外围EXTI不访问。

- UART的中断处理程序被屏蔽

- 不从BLE SD固件模块调用的API的应用程序(发送

命令,等...)

6.1.6 STM32资源需求时,BLE功能用于

UART驱动程序需要将之前提供一些硬件资源启用BLE功能。这些硬件资源,应保持启用,只要BLE功能被启用。该应用程序应该关掉所有这些硬件资源当BLE被禁用,以节省电力。有关的硬件资源包括:

?DMA的时钟与连接到NRF设备的使用UART应提供

RUN和睡眠模式。

?SRAM时钟的应在休眠模式下可用

?该SYSCFG外设时钟应在运行模式下可用

?在PWR外设时钟应可运行模式

?连接到NRF设备的UART的时钟将在运行中可用,休眠模式

?该GPIO时钟上的UART映射应在运行modeEmbedded软件描述

6.1.7集成

要使用SD BLE FW,包括在现有的应用程序中的UART低功耗驱动申请应:

1.实现文件stm32xx_lppuart_conf.h它应包括stm32xx_lppuart_interfaces.h和所有头文件提供从专用HAL所需的API(参见STM32L0xx实施例如提供)

2.设置配置所需(USART,内部监督办公室,波特率,唤醒引脚和中断优先级)在文件stm32yyxx_lppuart_configuration.h

3.在项目中包含的文件stm32xx_lppuart.c。(根据平台和上使用时,可能需要STM32Cube 版本一些其他文件如在下面描述章)

4.地图上HAL UART驱动的UART接口BLE(这一步已经在做在文件ble_uart.c封装实现。该应用程序可能只是包括在该文件中项目)

5.实现API LPPUART_HSclkRequest()来处理HS时钟要求并根据低功率UART驱动活动DMA时钟。

6.更新EXTI中断处理程序调用API LPPUART_wcts_handler()的时候CTS线触发中断。特API LPPUART_wcts_handler()不得所谓如果CTS行不触发EXTI中断处理程序时,这个源一个是与其他iOS中断能力由应用程序设置共享。

7.更新UART的中断处理程序调用API LPPUART_uart_handler()

8.更新DMA中断处理程序调用API LPPUART_dma_rx_handler()

9.当操作系统时,该LPPUART_Msg_Handler()可以用于与相关联的参数发出一个信号,处理该消息中的不同背景比UART中断。此API中的UART中断执行理器方面。

6.1.8可移植性

目前交付支持STM32L0家庭,但全面实施STM32Cube兼容,这意味着它可以很容易地在任何其他STM32系列移植。

当不支持交付所需的STM32系列,用户应执行所需的API,因为这已经做了STM32L0家庭。

所有特定于一个家庭所需的API来实现位于同一文件夹(STM32L0xx为STM32L0家庭)。用户应该实现配置文件(config文件夹)中,MSP文件(在MSP文件夹中)和HAL特定的API(STM32yyxx_HAL_LPPUART_Drivers文件夹- STM32L0xx_HAL_LPPUART_Drivers 为STM32L0xx家庭)。

?配置文件

该stm32yyxx_lppuart_driver_definition.h包含之间的映射关系所使用的软件和平台定义宏定义中所描述的参考手册。

该stm32yyxx_lppuart_configuration.h包含的用户configuratipn UART驱动。它是基于stm32yyxx_lppuart_driver_definition.h文件。

?MSP文件

该stm32yyxx_lppuart_msp.c包含DMA初始化可能是不同STM32系列之间。该文件应在整合过程中包括在项目

?HAL特定的API

该STM32yyxx_HAL_LPPUART_Drivers文件夹包含所有HAL API是不在STM32Cube交货

的一部分。所需的API的列表来实现可根据STM32Cube的版本中改变。所需要的任何文件关于该STM32Cube实施期间应包括在该项目集成。

6.2定时器接口

该BLE SD FW模块使用定时器超时连接参数进行谈判

与远程设备。为了节省功耗,此计时器应该运行在无论是LSI或LSE LPO时钟。计时器服务器提供了以下功能:

?最多255个虚拟计时器(或RAM限制较少,由于)

?单次和重复模式

?停止虚拟定时器和一个不同的超时值重新启动

?删除计时器

?从1到65535蜱超时

计时器服务器提供多个虚拟共享的定时器唤醒定时器。每个虚拟定时器可被定义为一个单触发定时器或重复定时器。当重复计时器过去时,通知用户与虚拟定时器具有相同的自动重新启动暂停。当一个单次定时器流逝,通知用户与该虚拟定时器被设置为挂起状态。用户可以停止虚拟计时器和一个不同的超时重新启动它值。当不需要一个虚拟计时器了,用户应该将其删除以释放槽在定时器

图9.定时器接口概述

图10.定时器设计概述

6.2.1 BLE SD FW模块

从BLE SD固件模块下列接口必须被映射到该定时器服务器:

?ble_timer_create()

?ble_timer_start()

?ble_timer_stop()

默认映射到定时器服务器在文件ble_timer.c完成。

没有必要为应用程序进行任何修改。

6.2.2初始化

?TIMER_Init()

此API应由应用任何计时器被请求定时器之前被调用服务器。它配置RTC的模块被连接到LSI的输入时钟。

6.2.3用户模块

?TIMER_Create()

用户应调用此API来创建一个定时器。一旦创建,定时器被保留到模块,直到它已被删除。当创建一个定时器,用户应指定模式(单次或重复),当定时器期满被通知回调和一个模块ID来识别在定时器中断处理程序的模块而言。作为回报,用户得到一个计时器ID来处理它。?TIMER_Start()

此API将用于启动计时器。超时值被指定,可能是每次都不同。当计时器是在单张拍摄模式,它会移动到挂起状态时,它过期。用户可以在任何时间使用不同的超时值重新启动当计时器是在重复模式,它总是停留在运行状态。当计时器到期,则用相同的超时值被重新启动。这个API不得叫上正在运行的定时器。

?TIMER_Stop()

此API可用于停止正在运行的定时器。这是停止计时器是移动到悬而未决的状态。挂起的定时器可在任何时候重新启动了不同的超时值,但模式不能改变。

?TIMER_Delete()

当未由用户不再需要一个计时器此API应该被使用。已删除定时器从由计时器服务器管理

的定时器列表中删除。它不能被重新启动再次。用户如果有需要的创建一个新的计时器去可能会得到一个不同的定时器ID。

6.2.4中断

?TIMER_RTC_Wakeup_Handler()

此中断处理程序,由在RTC的中断处理程序的应用程序调用。该处理器采用清零RTC和EXTI所需的所有状态标志的护理外设。

6.2.5上下文经理

?TIMER_Notification()

这个API通知一个定时器超时的应用程序。这个API在RTC的运行唤醒中断上下文。该应用程序可以实现一个操作系统,改变那里的计时器回调可处理的范围内优先级。这个API 提供模块ID来识别模块而言,并允许发送所述信息到正确的任务。

6.2.6配置

定时器服务器的某些参数可能在文件stm32xx_timerserver.h进行配置。

?MAX_NBR_CONCURRENT_TIMER:用户可以定义的最大数目

虚拟计时器支持。它应不超过255默认配置是8

?NVIC_UART_RTC_W AKEUP_IT_PRIORITY:用户可以定义在该优先在RTC_WKUP的NVIC中断处理程序,用来管理唤醒定时器。默认配置为3。

?eHAL_TIMER_ModuleID_t:用户应确定模块ID列表计时器服务器应支持。

?该TimerServer驱动程序使用的关键部分,以避免腐败的环境。这是取得与宏TIMER_ENTER_CRITICAL_SECTION和TIMER_EXIT_CRITICAL_SECTION。默认实现屏蔽所有STM32中断与CortexM CPU的PRIMASK位。它是可以使用的BASEPRI在CortexM CPU的寄存器允许不断高优先级的中断一些。在那情况下,用户应确保当计时器临界区输入,没有TimerServer API调用。运行计时器服务器之前,应用程序应该:

?配置RTC的输入时钟和时钟分频器。这是定义定时器勾选。在目前的实现中,计时器滴答等于LSI的输入时钟分16(432us)。它可以提供一个超时值最多28秒。

?定时器服务器运行时保持访问始终可用的RTC寄存器

?保持禁用在RTC模块的写保护定时器服务器运行时

6.2.7集成

要包括定时器服务器在现有的应用程序,该应用程序应:

1.实现文件stm32xx_timerserver_conf.h

它应包括stm32xx_timerserver.h和所有头文件提供所需的API从专用HAL(请参阅提供的STM32L0xx实现示例)

2.在项目中包含的文件stm32xx_timerserver.c

3.地图定时器服务器上的计时器BLE接口(该步骤已在完成在文件ble_timer.c封装实现。该应用程序可能只是包括文件在项目中)

4.当一个操作系统时,所述TIMER_Notification()可以被用来发送与相关参数信号处理回调在不同的上下文比RTC的唤醒中断。这个API是RTC唤醒中断中执行处理器方面。此API由应用来实现。

5.更新RTC中断处理程序调用API TIMER_RTC_Wakeup_Handler()

注:由BLE SD FW模块创建的计时器上断开事件被删除。该申请应先断开开关断开NRF 设备以确保之前的链接为BLE保留定时器被删除。

6.2.8可移植性

目前交付支持STM32L0家庭,但全面实施STM32Cube兼容,这意味着它可以很容易地在任何其他STM32系列移植。

当不支持交付所需的STM32系列,用户应执行所需的API,因为这已经做了STM32L0家庭。

所有特定于一个家庭所需的API来实现位于同一文件夹(STM32L0xx为STM32L0家庭)。用户应落实具体的HAL API(在该文件夹STM32yyxx_HAL_TimerServer_Drivers - STM32L0xx_HAL_TimerServer_Drivers为STM32L0家庭)。

?HAL特定的API

该STM32yyxx_HAL_TimerServer_Drivers文件夹包含所有HAL API不属于部分的STM32Cube交付。所需的API要实现的列表可能会改变根据STM32Cube的版本。这要求以实现任何文件关于STM32Cube应包括在积分期间的项目。

6.3 NVM接口

在BLE SD固件模块需要存储一些参数在一个非易失性存储器。而嵌入式软件正在运行,则BLE SD固件模块保持一个拷贝在RAM内存。此副本在RAM中上传的BLE初始化从NVM 数据。

当一个参数被更新,存储到NVM请求。有对没有读访问从NVM除了在初始的BLE SD FW 模块。总是BLE SD FW模块读取从RAM复制的参数。该NVM驱动程序的设计特别适合BLE行为。由于高上写入数据在NVM,司机存储在队列中的操作延迟(写或擦除)要求并释放CPU以继续运行代码。该NVM驱动程序写入在NVM数据,并等待完成中断。在每次中断时,司机NVM写入新的数据,直到没有更多的数据要写入。

作为NVM司机仅存储操作来执行和数据的参考,这些数据应保留在RAM存储器。没有反馈到完成操作的应用。

在NVM的编程,HS时钟应保留。该NVM司机通知在启动应用程序结束编程的最低功耗模式的结束支持。

图11. NVM接口概述

图12. NVM设计概述

6.3.1 BLE SD FW模块

从BLE SD固件模块下列接口必须被映射到NVM中的驱动程序:

?pstorage_register()

?pstorage_block_identifier_get()

?pstorage_store()

?pstorage_load()

?pstorage_clear()

?pstorage_init()

默认映射到定时器服务器在文件ble_nvm.c完成。

没有必要为应用程序进行任何修改。

6.3.2初始化

?NVM_Init()

这个API将被称为前的任何请求被做了NVM驱动程序。

6.3.3操作

?NVM_Register()

此API保留在NVM所需尺寸的块,并返回该基址给用户。

?NVM_Operation()

这个API是用来写或擦除在NVM数据。

当请求“写”操作时,用户须提供数据的地址被复制,NVM中的目的地址和数据量将被写入。数据应保留在任何时间,从源地址为NVM驱动程序不制作临时副本。

当请求的“擦除”操作,用户应当提供在基地址数据NVM要被擦除和数据量来擦除。源地址当请求的“擦除”操作不受NVM中驾驶员考虑参数并可以被设置为任何值。

?NVM_Read()

此API用于读取从NVM数据的量。

用户应在何处复制提供NVM起始地址,目的地址数据和数据量进行复制。

该NVM驱动程序不检查部分从NVM读是否可能在操作队列被写入或没有。它是应用程序的责任

不读一段,如果它可能是在路上被written.Embedded软件说明

6.3.4低功耗经理

?NVM_HSclkRequest()

此API通知时在HS时钟可以被停止的应用程序,并当它应保持启用。NVM中的驱动程序发送通知当操作队列获取一个命令和在操作队列是空的。不存在通知给应用程序已完成每个命令,但是该API也可以使用,以及确保所有命令(写入/擦除)已发送到NVM中的驱动程序已完成。

6.3.5中断

?NVM_Flash_Interrupt_handler()

该中断处理程序应当由FLASH中断处理程序的应用程序调用。

该处理器采用清零FLASH外围所需的所有状态标志的照顾。

6.3.6配置

NVM中的驱动程序的某些参数可能在文件stm32xx_nvm.h进行配置。

?NVM_OPERATION_QUEUE_SIZE:用户可以定义的最大数目操作被排队。它应不超过255默认配置是30

?NVM_BASE_ADDRESS:用户可以从限定在NVM基址其中NVM驾驶员可能分配块给用户。没有块大小的限制检查的NVM驱动程序。默认配置为0x08080460(第1120个字节对于BLE操作被保留。0x08080000是数据EEPROM基址STM32L0x3装置)。

?NVM_IT_PRIORITY:用户可以定义在FLASH的NVIC优先

中断处理程序是用于通知的NVM驱动编程结束。默认配置为3。

6.3.7集成

要包括NVM驱动程序,应用程序应该:

1.实现文件stm32xx_nvm_conf.h

它应包括stm32xx_nvm.h和所有头文件提供从所需的API专用HAL(请参阅提供的STM32L0xx实现示例)

2.设置文件stm32xx_nvm.h所需的配置

3.在项目中包含的文件stm32xx_nvm.c

4.地图上HAL NVM司机pstorage BLE接口(这一步已经完成中在文件ble_nvm.c包装来实现。该应用程序可能只是包括在项目文件)

5.实现API NVM_HSclkRequest()来处理HS时钟要求根据NVM司机活性。

6.更新Flash中断处理程序调用API NVM_Flash_Interrupt_handler()

6.3.8可移植性

该NVM驱动器上STM32Cube之上全面实施。

没有移动到任何STM32程序所需的更新

6.4低功耗管理器界面

当BLE功能时,它需要得到支持UART和NVM驱动程序。两司机对HS时钟的可用性一些要求。提出请求异步应用程序。此外,该申请有一定的要求在HS时钟的可用性会来以及异步两个UART和NVM驱动程序请求。有需要的应用程序来实现的模块将采取的所有这些要求的关心和计算的最低功耗模式系统可以随时进入。

低功耗管理提供了一个简单的接口来接收不同用户的输入(最多32个),并计算的最低功耗模式,系统可进入。它提供以及钩到应用程序之前进入或在低功耗模式退出。

图13.低功耗管理器接口概述

相关文档