[docs] add ble timer usb api & usb demo rst

This commit is contained in:
qqwang 2021-06-25 17:32:01 +08:00
parent 9d3effa295
commit f08e171d6b
165 changed files with 8853 additions and 3541 deletions

View file

@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 5e2136c8889edd21ef4392d0839f5aa1
config: c1a44f4f683944084f04b029ea7630d0
tags: 645f666f9bcd5a90fca523b33c5a78b7

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

View file

@ -1,28 +1,29 @@
API 分层模型
API 概述
=========================
简介
----
------
为了不影响用户应用层代码因为芯片驱动的不同而频繁修改,**bl_mcu_sdk** 的外设 API 采用了 HAL 层的思想,屏蔽了底层硬件的实现。而 HAL 层又分为两大类:
**bl_mcu_sdk** 代码层次结构主要分为以下几层
- 设备驱动管理层:提供一套标准的接口,具体实现由外设驱动适配层实现。
- 外设驱动适配层:实现设备驱动管理层的标准接口,并且拓展自己的独特的接口。
整体的代码分层框架如图所示:
- 应用层:由用户自己编写的代码
- 组件层:开源的一些组件,接口则是调用 HAL 层的接口,使用到无线功能则是调用 Wireless 层的接口
- 为适配不同 MCU 提供的 HAL 层和无线层,其中 HAL 层又分为两层
- 设备驱动管理层:提供一套标准的接口,具体实现由外设驱动适配层实现
- 外设驱动适配层:实现设备驱动管理层的标准接口,并且拓展自己的独特的接口
- 基于寄存器封装的标准驱动层
- 硬件层,也就是寄存器层
.. figure:: img/sw_arch.png
:alt:
code structure
- 应用层是用户自己编写的代码,接口则是调用 hal 层的接口。
- HAL 层提供给应用层接口,底层调用 std 层,不同的芯片调用不同的 std 层。
- STD 层则是对硬件寄存器进行简单封装,由外设驱动适配层进行调用。
设备驱动管理层实现
---------------------
设备驱动管理层主要针对芯片外设实现,目的是不影响用户应用层代码因为芯片驱动的不同而频繁修改。
设备驱动管理层的实现采用了面向对象的思想,首先我们将外设看成是一个设备或者是文件,秉承 **一切皆文件** 的理念,而文件又都具有标准的调用接口:``open``、``close``、``ctrl``、``write``、``read``、``callback``不同文件类别不同比如串口设备、ADC设备、SPI设备并且打开的方式也不同比如轮询、中断、DMA由此我们可以构建出一个对象的基类父类
**基类**

View file

@ -49,396 +49,412 @@ BLE
- 启动协议栈,开始运行
- 等待相关事件及事件处理例如扫描事件从机的Notify事件等等。
API参考
BLE 接口
----------
- API介绍
**ble_controller_init**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``void ble_controller_init(uint8_t task_priority)``
``ble_controller_init`` 主要是对 ble controller 层初始化。
::
.. code-block:: C
/**
* function controller层初始化
* @param[in] task_priority 任务优先级
* @return 空
*/
void ble_controller_init(uint8_t task_priority);
``int hci_driver_init(void)``
- task_priority 任务优先级
::
**hci_driver_init**
^^^^^^^^^^^^^^^^^^^^^^^^
/**
* function HCI接口驱动初始化
* @param[in] 空
* @return 0:成功,!=0:失败
*/
``hci_driver_init`` 主要是对 HCI 接口驱动初始化。
``int bt_enable(bt_ready_cb_t cb)``
.. code-block:: C
::
int hci_driver_init(void);
/**
* function Ble使能
* @param[in] cb如果成功调用回调函数
* @return 0:成功,!=0:失败
*/
**bt_enable**
^^^^^^^^^^^^^^^^^^^^^^^^
``int bt_le_adv_start(const struct bt_le_adv_param *param,const struct bt_data *ad, size_t ad_len,``
``const struct bt_data *sd, size_t sd_len)``
``bt_enable`` 用来使能 ble 。
::
.. code-block:: C
/**
* function 开启BLE广播
*
* @param[in] param: 指向广播配置参数指针
* @param[in] ad: 指向广播包中数据指针
* @param[in] ad_len: 广播包中数据的长度
* @param[in] sd: 指向扫描响应包数据指针
* @param[in] sd_len: 扫描响应包数据的长度
* @return 0:成功,!=0:失败
*/
int bt_enable(bt_ready_cb_t cb);
- cb 注册成功时的回调函数
``int bt_le_adv_update_data(const struct bt_data *ad, size_t ad_len,const struct bt_data *sd, size_t sd_len)``
**bt_le_adv_start**
^^^^^^^^^^^^^^^^^^^^^^^^
``bt_le_adv_start`` 用来开启 BLE 广播。
::
.. code-block:: C
/**
* function 更新BLE广播数据
* @param[in] ad: 指向广播包中数据指针
* @param[in] ad_len: 广播包中数据的长度
* @param[in] sd: 指向扫描响应包数据指针
* @param[in] sd_len: 扫描响应包数据的长度
* @return 0:成功,!=0:失败
*/
int bt_le_adv_start(const struct bt_le_adv_param *param,const struct bt_data *ad, size_t ad_len,
const struct bt_data *sd, size_t sd_len);
``int bt_le_adv_stop(void)``
- param 指向广播配置参数指针
- ad 指向广播包中数据指针
- ad_len 广播包中数据的长度
- sd 指向扫描响应包数据指针
- sd_len 扫描响应包数据的长度
**bt_le_adv_update_data**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
``bt_le_adv_update_data`` 用来更新 BLE 广播数据。
/**
* function 停止BLE广播
* @param[in] 空
* @return 0:成功,!=0:失败
*/
.. code-block:: C
int bt_le_adv_update_data(const struct bt_data *ad, size_t ad_len,const struct bt_data *sd, size_t sd_len);
``int bt_le_scan_start(const struct bt_le_scan_param *param, bt_le_scan_cb_t cb)``
- ad 指向广播包中数据指针
- ad_len 广播包中数据的长度
- sd 指向扫描响应包数据指针
- sd_len 扫描响应包数据的长度
::
**bt_le_adv_stop**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/**
* function 开启BLE扫描
* @param[in] param: 指向扫描参数的指针
* @param[in] cb: 扫描回调函数
* @return 0:成功,!=0:失败
*/
``bt_le_adv_stop`` 用来停止 BLE 广播。
``int bt_le_scan_stop(void)``
.. code-block:: C
::
int bt_le_adv_stop(void);
/**
* function 停止BLE扫描
* @param[in] 空
* @return 0:成功,!=0:失败
*/
**bt_le_scan_start**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``int bt_le_whitelist_add(const bt_addr_le_t *addr)``
``bt_le_scan_start`` 用来开启 BLE 扫描。
::
.. code-block:: C
/**
* function 通过地址添加设备到白名单列表中
* @param[in] addr:指向需要添加设备地址的指针
* @return 0:成功,!=0:失败
*/
int bt_le_scan_start(const struct bt_le_scan_param *param, bt_le_scan_cb_t cb);
``int bt_le_whitelist_rem(const bt_addr_le_t *addr)``
- param 指向扫描参数的指针
- cb 扫描回调函数
::
**bt_le_scan_stop**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``bt_le_scan_stop`` 用来停止 BLE 扫描。
/**
* function 从白名单列表中移除设备
* @param[in] addr:指向需要移除设备地址的指针
* @return 0:成功,!=0:失败
*/
.. code-block:: C
``int bt_le_whitelist_clear(void)``
int bt_le_scan_stop(void);
**bt_le_whitelist_add**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
``bt_le_whitelist_add`` 用来通过地址添加设备到白名单列表中。
/**
* function 清除白名单列表
* @param[in] 空
* @return 0:成功,!=0:失败
*/
.. code-block:: C
``int bt_le_set_chan_map(u8_t chan_map[5])``
int bt_le_whitelist_add(const bt_addr_le_t *addr);
::
- addr 指向需要添加设备地址的指针
/**
* function 设置(LE)通道映射
* @param[in] chan_map通道数组
* @return 0:成功,!=0:失败
*/
**bt_le_whitelist_rem**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``int bt_unpair(u8_t id, const bt_addr_le_t *addr)``
``bt_le_whitelist_rem`` 用来将设备从白名单列表中移除。
::
.. code-block:: C
/**
* function 清除配对信息
* @param[in] id 本地标识(大多只是默认的BT ID)
* @param[in] addr 远端设备地址NULL或者BT_ADDR_LE_ANY清除所有远端设备
* @return 0:成功,!=0:失败
*/
int bt_le_whitelist_rem(const bt_addr_le_t *addr);
``int bt_conn_get_info(const struct bt_conn *conn, struct bt_conn_info *info)``
- addr 指向需要移除设备地址的指针
::
**bt_le_whitelist_clear**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/**
* function 获取当前连接设备的信息
* @param[in] conn 指向当前连接的指针
* @param[in] info 指向当前连接设备信息的指针
* @return 0:成功,!=0:失败
*/
``bt_le_whitelist_clear`` 用来清除白名单列表。
.. code-block:: C
``int bt_conn_get_remote_dev_info(struct bt_conn_info *info)``
int bt_le_whitelist_clear(void);
::
**bt_le_set_chan_map**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/**
* function 获取已连接设备的信息
* @param[in] info 指向当前连接设备信息的指针
* @return 已连接设备的个数
*/
``bt_le_set_chan_map`` 用来设置(LE)通道映射。
``int bt_conn_le_param_update(struct bt_conn *conn,const struct bt_le_conn_param *param)``
.. code-block:: C
::
int bt_le_set_chan_map(u8_t chan_map[5]);
/**
* function 更新连接参数
* @param[in] conn 指向当前连接的指针
* @param[in] param 指向连接参数的指针
* @return 0:成功,!=0:失败
*/
- chan_map 通道数组
``int bt_conn_disconnect(struct bt_conn *conn, u8_t reason)``
**bt_unpair**
^^^^^^^^^^^^^^^^^^^^^^^^
::
``bt_unpair`` 用来清除配对信息。
/**
* function 断开当前连接
* @param[in] conn 指向当前连接的指针
* @param[in] reason断开当前连接的原因
* @return 0:成功,!=0:失败
*/
.. code-block:: C
``struct bt_conn *bt_conn_create_le(const bt_addr_le_t *peer,const struct bt_le_conn_param *param)``
int bt_unpair(u8_t id, const bt_addr_le_t *addr);
::
- id 本地标识(大多只是默认的BT ID)
- addr 远端设备地址NULL或者BT_ADDR_LE_ANY清除所有远端设备
/**
* function 创建连接
* @param[in] peer 需要连接设备地址的指针
* @param[in] param 指向连接参数指针
* @return 成功:有效的连接对象,否则失败
*/
**bt_conn_get_info**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``bt_conn_get_info`` 用来获取当前连接设备的信息。
``int bt_conn_create_auto_le(const struct bt_le_conn_param *param)``
.. code-block:: C
::
int bt_conn_get_info(const struct bt_conn *conn, struct bt_conn_info *info);
/**
* function 自动创建连接白名单列表中的设备
* @param[in] param 指向连接参数指针
* @return 0:成功,!=0:失败
*/
- conn 指向当前连接的指针
- info 指向当前连接设备信息的指针
``int bt_conn_create_auto_stop(void)``
**bt_conn_get_remote_dev_info**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
``bt_conn_get_remote_dev_info`` 用来获取已连接设备的信息。
/**
* function 停止自动创建连接白名单列表中的设备
* @param[in] 空
* @return 0:成功,!=0:失败
*/
.. code-block:: C
``int bt_le_set_auto_conn(const bt_addr_le_t *addr,const struct bt_le_conn_param *param)``
int bt_conn_get_remote_dev_info(struct bt_conn_info *info);
::
- info 指向当前连接设备信息的指针
/**
* function 自动创建连接远端设备
* @param[in] addr 远端设备地址指针
* @param[in] param 指向连接参数指针
* @return 0:成功,!=0:失败
*/
**bt_conn_le_param_update**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``struct bt_conn *bt_conn_create_slave_le(const bt_addr_le_t *peer,const struct bt_le_adv_param *param)``
``bt_conn_le_param_update`` 用来更新连接参数。
::
.. code-block:: C
/**
* function 发起定向的广播包给远端设备
* @param[in] peer 远端设备地址指针
* @param[in] param 指向广播参数的指针
* @return 成功:有效的连接对象,否则失败
*/
int bt_conn_le_param_update(struct bt_conn *conn,const struct bt_le_conn_param *param);
``int bt_conn_set_security(struct bt_conn *conn, bt_security_t sec)``
- conn 指向当前连接的指针
- param 指向连接参数的指针
::
**bt_conn_disconnect**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/**
* function 设置连接安全等级
* @param[in] conn 指向连接对象的指针
* @param[in] sec 安全等级
* @return 0:成功,!=0:失败
*/
``bt_conn_disconnect`` 用来断开当前连接。
``bt_security_t bt_conn_get_security(struct bt_conn *conn)``
.. code-block:: C
::
int bt_conn_disconnect(struct bt_conn *conn, u8_t reason);
/**
* function 获取当前连接的安全等级
* @param[in] conn 指向连接对象的指针
* @return 安全级别
*/
- conn 指向当前连接的指针
- reason 断开当前连接的原因
**bt_conn_create_le**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``u8_t bt_conn_enc_key_size(struct bt_conn *conn)``
``bt_conn_create_le`` 用来创建连接。
::
.. code-block:: C
/**
* function 获取当前连接的加密key的大小
* @param[in] conn 指向连接对象的指针
* @return 加密key的大小
*/
struct bt_conn *bt_conn_create_le(const bt_addr_le_t *peer,const struct bt_le_conn_param *param);
- peer 需要连接设备地址的指针
- param 指向连接参数指针
- return 成功:有效的连接对象,否则失败
``void bt_conn_cb_register(struct bt_conn_cb *cb)``
**bt_conn_create_auto_le**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
``bt_conn_create_auto_le`` 用来自动创建连接白名单列表中的设备。
/**
* function 注册连接回调函数
* @param[in] cb 连接回调函数
* @return 空
*/
.. code-block:: C
``void bt_set_bondable(bool enable)``
int bt_conn_create_auto_le(const struct bt_le_conn_param *param);
::
- param 指向连接参数指针
/**
* function 设置/清除SMP配对请求/响应数据认证需求中的绑定标志
* @param[in] enable 1使能0不使能
* @return 空
*/
**bt_conn_create_auto_stop**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``int bt_conn_auth_cb_register(const struct bt_conn_auth_cb *cb)``
``bt_conn_create_auto_stop`` 用来停止自动创建连接白名单列表中的设备。
::
.. code-block:: C
/**
* function 注册认证回调函数
* @param[in] cb 回调函数指针
* @return 0:成功,!=0:失败
*/
int bt_conn_create_auto_stop(void);
``int bt_conn_auth_passkey_entry(struct bt_conn *conn, unsigned int passkey)``
**bt_le_set_auto_conn**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
``bt_le_set_auto_conn`` 用来自动创建连接远端设备。
/**
* function 用密钥回复对方
* @param[in] conn 连接对象指针
* @param[in] passkey 输入的密钥
* @return 0:成功,!=0:失败
*/
.. code-block:: C
``int bt_conn_auth_cancel(struct bt_conn *conn)``
int bt_le_set_auto_conn(const bt_addr_le_t *addr,const struct bt_le_conn_param *param);
::
- addr 远端设备地址指针
- param 指向连接参数指针
/**
* function 取消认证过程
* @param[in] conn 连接对象指针
* @return 0:成功,!=0:失败
*/
**bt_conn_create_slave_le**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``int bt_conn_auth_passkey_confirm(struct bt_conn *conn)``
``bt_conn_create_slave_le`` 用来发起定向的广播包给远端设备。
::
.. code-block:: C
/**
* function 如果密码匹配,回复对方
* @param[in] conn 连接对象的指针
* @return 0:成功,!=0:失败
*/
struct bt_conn *bt_conn_create_slave_le(const bt_addr_le_t *peer,const struct bt_le_adv_param *param);
``int bt_conn_auth_pincode_entry(struct bt_conn *conn, const char *pin)``
- peer 远端设备地址指针
- param 指向广播参数的指针
- return 成功:有效的连接对象,否则失败
::
**bt_conn_set_security**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/**
* function 用PIN码进行回复对方
* @param[in] conn 连接对象的指针
* @param[in] pin PIN码的指针
* @return 0:成功,!=0:失败
*/
``bt_conn_set_security`` 用来设置连接安全等级。
``int bt_le_read_rssi(u16_t handle,int8_t *rssi)``
.. code-block:: C
::
int bt_conn_set_security(struct bt_conn *conn, bt_security_t sec);
/**
* function 读取对方RSSI值
* @param[in] handle连接的句柄值
* @param[in] rssi rssi的指针
* @return 0:成功,!=0:失败
*/
- conn 指向连接对象的指针
- sec 安全等级
``int bt_get_local_address(bt_addr_le_t *adv_addr)``
**bt_conn_get_security**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
``bt_conn_get_security`` 用来获取当前连接的安全等级。
/**
* function 读取本机的地址
* @param[in] adv_addr 指向地址的指针
* @return 0:成功,!=0:失败
*/
.. code-block:: C
``int bt_set_tx_pwr(int8_t power)``
bt_security_t bt_conn_get_security(struct bt_conn *conn);
::
- conn 指向连接对象的指针
/**
* function 设置本机发射功率
* @param[in] power 功率值
* @return 0:成功,!=0:失败
*/
**bt_conn_enc_key_size**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``bt_conn_enc_key_size`` 用来获取当前连接的加密key的大小。
.. code-block:: C
u8_t bt_conn_enc_key_size(struct bt_conn *conn);
- conn 指向连接对象的指针
- return 加密key的大小
**bt_conn_cb_register**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``bt_conn_cb_register`` 用来注册连接回调函数。
.. code-block:: C
void bt_conn_cb_register(struct bt_conn_cb *cb);
- cb 连接回调函数
**bt_set_bondable**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``bt_set_bondable`` 用来设置/清除SMP配对请求/响应数据认证需求中的绑定标志。
.. code-block:: C
void bt_set_bondable(bool enable);
- enable 1使能0不使能
**bt_conn_auth_cb_register**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``bt_conn_auth_cb_register`` 用来注册认证回调函数。
.. code-block:: C
int bt_conn_auth_cb_register(const struct bt_conn_auth_cb *cb);
- cb 回调函数指针
**bt_conn_auth_passkey_entry**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``bt_conn_auth_passkey_entry`` 用密钥回复对方。
.. code-block:: C
int bt_conn_auth_passkey_entry(struct bt_conn *conn, unsigned int passkey);
- conn 连接对象指针
- passkey 输入的密钥
**bt_conn_auth_cancel**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``bt_conn_auth_cancel`` 用来取消认证过程。
.. code-block:: C
int bt_conn_auth_cancel(struct bt_conn *conn);
- conn 连接对象指针
**bt_conn_auth_passkey_confirm**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``bt_conn_auth_passkey_confirm`` 用来当密码匹配时,回复对方。
.. code-block:: C
int bt_conn_auth_passkey_confirm(struct bt_conn *conn);
- conn 连接对象指针
**bt_conn_auth_pincode_entry**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``bt_conn_auth_pincode_entry`` 用 PIN 码进行回复对方。
.. code-block:: C
int bt_conn_auth_pincode_entry(struct bt_conn *conn, const char *pin);
- conn 连接对象指针
- pin PIN 码的指针
**bt_le_read_rssi**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``bt_le_read_rssi`` 用来读取对方 RSSI 值。
.. code-block:: C
int bt_le_read_rssi(u16_t handle,int8_t *rssi);
- handle 连接的句柄值
- rssi 保存 rssi 的指针
**bt_get_local_address**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``bt_get_local_address`` 用来读取本机的地址。
.. code-block:: C
int bt_get_local_address(bt_addr_le_t *adv_addr);
- adv_addr 保存读取地址的指针
**bt_set_tx_pwr**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``bt_set_tx_pwr`` 用来设置本机发射功率。
.. code-block:: C
int bt_set_tx_pwr(int8_t power);
- power 功率值
数据结构参考
---------------
``bt_le_adv_param``\ 数据结构:
``bt_le_adv_param`` 数据结构:
.. code:: c
@ -528,7 +544,7 @@ API参考
param.interval_min = 0x00a0;
param.interval_max = 0x00f0;
``bt_data``\ 数据结构:
``bt_data`` 数据结构:
.. code:: c
@ -572,7 +588,7 @@ API参考
BT_DATA(BT_DATA_NAME_COMPLETE, "BL602-BLE-DEV", 13),
};
``bt_le_scan_param``\ 数据结构:
``bt_le_scan_param`` 数据结构:
.. code:: c
@ -607,7 +623,7 @@ window扫描窗口。
window=BT_GAP_SCAN_SLOW_WINDOW_1
``bt_le_conn_param``\ 数据结构:
``bt_le_conn_param`` 数据结构:
.. code:: c
@ -636,7 +652,7 @@ timeout连接超时时间。
latency=0
timeout=400
``bt_conn``\ 数据结构:
``bt_conn`` 数据结构:
.. code:: c

View file

@ -0,0 +1,126 @@
Board 配置系统
=======================
为了践行 **一切皆文件** 的思想,我们针对嵌入式应用不同的硬件配置需求,提出了一套 Board 配置系统。 **Board 配置系统** 主要是用于嵌入式应用中的时钟、GPIO 、外设默认配置三个基本元素进行初始化的配置系统。
**Board 配置系统** 包含三个配置文件,以及一个 ``bl_config_wizard`` 图形化配置软件
- clock_config.h 时钟配置头文件
- peripheral_config.h 外设配置头文件
- pinmux_config.h 引脚功能配置头文件
- bl_config_wizard 图形化界面配置上述三类文件
用户只需要修改三个配置文件,系统会自动初始化。从而无需在用户程序中,调用一系列的复杂冗长的初始化函数, Boufflao Lab 为方便用户快速简便的生成项目对应的 board 文件,提供了 ``bl_config_wizard`` 配置软件,但目前正处于开发阶段。
.. figure:: img/config_wizard.png
:alt:
bl_config_wizard 软件预览
Board 配置系统的文件组成
--------------------------
Board 系统主要针对不同的板子来使用,不同的板子创建不同的 board 文件,放在 ``bsp/board`` 目录下,并且一个 board 文件,在 **引脚不冲突** 的情况下,可以共享给不同的 demo 使用,无需再创建多个工程,减少工程文件大小。
.. error:: 如果引脚冲突,并且非要使用一个 board 文件,请自行修改引脚
**board.c**
^^^^^^^^^^^^^^^^^^^^
``board.c`` 主要对时钟、引脚进行初始化
**blxxx_config.h**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``blxxx_config.h`` 主要是包含一些头文件,给 HAL 层驱动使用。
.. hint:: 以上两个文件无需用户更改,并且相同的 MCU 可以直接复制粘贴到自己的 board 目录使用
**clock_config.h**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``clock_config.h`` 主要配置系统和外设的时钟源以及分频系统。
**peripheral_config.h**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``peripheral_config.h`` 主要包含外设的使能以及参数的配置。
.. warning:: 以 ``#define BSP_USING_XXX`` 开头的宏,用来开启外设的配置,如果没有使能宏,则无法使用该外设的所有函数
.. warning:: 以 ``XXX_CONFIG`` 开头的宏,用来初始化外设的配置,后面调用 ``device_open`` 来使用该配置
**pinmux_config.h**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``pinmux_config.h`` 主要配置外设的 GPIO 引脚功能。
.. warning:: 在 mcu sdk 中,所有 demo 共享这个文件,因此有些 demo 是不能使用的,需要频繁修改该文件的引脚功能配置。如果用户已经定好了引脚的分配,则不用频繁修改。
与 STM32CUBEMX 配置工具的区别
------------------------------
STM32CUBEMX 也是一个配置时钟、外设和 GPIO 初始化的工具,最终生成一个完整的工程,初始化都放在 ``main.c`` 的最开始 GPIO 和外设初始化底层会调用到 ``stm32xxx_hal_msp.c`` 中。
.. code-block:: C
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_QUADSPI_Init();
.. code-block:: C
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(huart->Instance==UART5)
{
/* USER CODE BEGIN UART5_MspInit 0 */
/* USER CODE END UART5_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_UART5_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**UART5 GPIO Configuration
PB12 ------> UART5_RX
PB13 ------> UART5_TX
*/
GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF14_UART5;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* UART5 interrupt Init */
HAL_NVIC_SetPriority(UART5_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(UART5_IRQn);
/* USER CODE BEGIN UART5_MspInit 1 */
/* USER CODE END UART5_MspInit 1 */
}
}
.. hint:: stm32 生成的工程都是对一个工程起作用,不能够同时编译多个工程。如果使用多个工程,就要生成多个上述两个文件。在使用多个工程时,会间接增加文件大小,增加重复文件。

View file

@ -6,15 +6,15 @@ ADC 设备
ADC (Analog-to-digital Converter) 是用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备,他可以将外围电路传感器产生的模拟信号转化为机器可识别的数字信号。
博流系列MCU中的ADC设备具有以下特性
- 可以选择 12/14/16 bits转换结果输出
- ADC最大工作时钟为2MHZ
- 支持2.0V,3.2V可选内部参考电压
- 可以选择 12/14/16 bits 转换结果输出
- ADC最大工作时钟为 2MHZ
- 支持2.0V ,3.2V 可选内部参考电压
- 支持DMA将转换结果搬运到内存
- 支持单次单通道转换、连续单通道转换、单次多通道转换和连续多通道转换模式四种模式
- 支持单端与差分两种输入模式
- 12路外部模拟通道
- 2路DAC内部通道
- 1路VBAT/2通道
- 2路 DAC 内部通道
- 1路 VBAT /2通道
ADC 设备结构体定义
@ -33,13 +33,13 @@ ADC 设备结构体定义
} adc_device_t;
- parent 继承父类属性
- clk_div ADC模块时钟内部分频
- vref 参考电压选择 2.0/3.2V可选
- continuous_conv_mode 是否选择为连续模式若为连续模式则一次adc_start操作ADC连续工作直到adc_stop。否则每adc_start一次adc仅转换一次结果。
- clk_div ADC 模块时钟内部分频
- vref 参考电压选择 2.0/3.2V 可选
- continuous_conv_mode 是否选择为连续模式,若为连续模式,则一次 adc_start 操作, ADC 连续工作,直到 adc_stop 。否则,每 adc_start 一次adc 仅转换一次结果。
- differential_mode 选择是否为差分模式,若为差分模式,则可以测量负电压。
- data_width 测量宽度选择ADC实际精度为12bits但是通过OSR多次取平均可以达到14bits/16bits的精度,注意,当选择更高的数据宽度后,频率会因为取平均而下降。详情可参考枚举信息。
- fifo_threshold 此参数影响DMA搬运阈值以及ADC FIFO中断阈值
- gain ADC对输入信号的增益选择
- data_width 测量宽度选择ADC 实际精度为12 bits ,但是通过 OSR 多次取平均可以达到 14bits / 16bits 的精度,注意,当选择更高的数据宽度后,频率会因为取平均而下降。详情可参考枚举信息。
- fifo_threshold 此参数影响 DMA 搬运阈值以及 ADC FIFO 中断阈值
- gain ADC 对输入信号的增益选择
- 其他待补充
ADC 设备参数配置表
@ -82,7 +82,7 @@ ADC 设备接口全部遵循标准设备驱动管理层提供的接口。
**ADC_register**
^^^^^^^^^^^^^^^^^^^^^^^^
``adc_register`` 用来注册一个 ADC 设备,在注册之前需要打开对应 ADC 设备的宏定义。例如定义宏 ``BSP_USING_ADC0`` 方可使用 ``ADC0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``ADC0`` 设备。
``adc_register`` 用来注册一个 ADC 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 ADC 设备的宏定义。例如定义宏 ``BSP_USING_ADC0`` 方可使用 ``ADC0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``ADC0`` 设备。
.. code-block:: C
@ -107,7 +107,7 @@ ADC 设备接口全部遵循标准设备驱动管理层提供的接口。
**device_open**
^^^^^^^^^^^^^^^^
``device_open`` 用于 ADC 设备的打开,``oflag`` 表示以何种方式打开。
``device_open`` 用于 ADC 设备的打开,``oflag`` 表示以何种方式打开。实际调用 ``adc_open``。
.. code-block:: C
@ -131,7 +131,7 @@ ADC 设备接口全部遵循标准设备驱动管理层提供的接口。
**device_close**
^^^^^^^^^^^^^^^^
``device_close`` 用于设备的关闭。
``device_close`` 用于设备的关闭。实际调用 ``adc_close``。
.. code-block:: C
@ -143,7 +143,7 @@ ADC 设备接口全部遵循标准设备驱动管理层提供的接口。
**device_control**
^^^^^^^^^^^^^^^^^^^
``device_control`` 用于根据命令对 ADC 设备进行控制和参数的修改。
``device_control`` 用于根据命令对 ADC 设备进行控制和参数的修改。实际调用 ``adc_control``。
.. code-block:: C
@ -169,37 +169,37 @@ ADC 设备接口全部遵循标准设备驱动管理层提供的接口。
``args`` 根据不同的 ``cmd`` 传入不同,具体如下:
+-----------------------------------+-----------------------+-------------------------------------+
|cmd |args |description |
+===================================+=======================+=====================================+
|DEVICE_CTRL_SET_INT |ADC_it_type |开启ADC设备中断 |
+-----------------------------------+-----------------------+-------------------------------------+
|DEVICE_CTRL_CLR_INT |ADC_it_type |关闭ADC设备中断 |
+-----------------------------------+-----------------------+-------------------------------------+
|DEVICE_CTRL_CONFIG |ADC_param_cfg_t* |修改ADC配置 |
+-----------------------------------+-----------------------+-------------------------------------+
|DEVICE_CTRL_ADC_CHANNEL_CONFIG |adc_channel_cfg_t* |配置ADC通道信息 |
+-----------------------------------+-----------------------+-------------------------------------+
|DEVICE_CTRL_ATTACH_RX_DMA |struct device* |链接接收dma设备 |
+-----------------------------------+-----------------------+-------------------------------------+
|DEVICE_CTRL_ADC_CHANNEL_START |struct device* |开始/继续 ADC转换 |
+-----------------------------------+-----------------------+-------------------------------------+
|DEVICE_CTRL_ADC_CHANNEL_STOP |NULL |停止ADC转换 |
+-----------------------------------+-----------------------+-------------------------------------+
|DEVICE_CTRL_ADC_VBAT_ON |NULL |打开内部VDD测量电路 |
+-----------------------------------+-----------------------+-------------------------------------+
|DEVICE_CTRL_ADC_VBAT_OFF |NULL |关闭内部VDD测量电路 |
+-----------------------------------+-----------------------+-------------------------------------+
|DEVICE_CTRL_ADC_TSEN_ON |NULL |打开内部温度测量电路(需硬件支持) |
+-----------------------------------+-----------------------+-------------------------------------+
|DEVICE_CTRL_ADC_TSEN_OFF |uint32_t* |关闭内部温度测量电路(需硬件支持) |
+-----------------------------------+-----------------------+-------------------------------------+
+--------------------------------+--------------------+----------------------------------+
| cmd | args | description |
+================================+====================+==================================+
| DEVICE_CTRL_SET_INT | ADC_it_type | 开启 ADC 设备中断 |
+--------------------------------+--------------------+----------------------------------+
| DEVICE_CTRL_CLR_INT | ADC_it_type | 关闭 ADC 设备中断 |
+--------------------------------+--------------------+----------------------------------+
| DEVICE_CTRL_CONFIG | ADC_param_cfg_t* | 修改 ADC 配置 |
+--------------------------------+--------------------+----------------------------------+
| DEVICE_CTRL_ADC_CHANNEL_CONFIG | adc_channel_cfg_t* | 配置 ADC 通道信息 |
+--------------------------------+--------------------+----------------------------------+
| DEVICE_CTRL_ATTACH_RX_DMA | struct device* | 链接接收 DMA 设备 |
+--------------------------------+--------------------+----------------------------------+
| DEVICE_CTRL_ADC_CHANNEL_START | struct device* | 开始/继续 ADC 转换 |
+--------------------------------+--------------------+----------------------------------+
| DEVICE_CTRL_ADC_CHANNEL_STOP | NULL | 停止 ADC 转换 |
+--------------------------------+--------------------+----------------------------------+
| DEVICE_CTRL_ADC_VBAT_ON | NULL | 打开内部 VDD 测量电路 |
+--------------------------------+--------------------+----------------------------------+
| DEVICE_CTRL_ADC_VBAT_OFF | NULL | 关闭内部 VDD 测量电路 |
+--------------------------------+--------------------+----------------------------------+
| DEVICE_CTRL_ADC_TSEN_ON | NULL | 打开内部温度测量电路(需硬件支持) |
+--------------------------------+--------------------+----------------------------------+
| DEVICE_CTRL_ADC_TSEN_OFF | uint32_t* | 关闭内部温度测量电路(需硬件支持) |
+--------------------------------+--------------------+----------------------------------+
**device_read**
^^^^^^^^^^^^^^^^
``device_read`` 用于 ADC 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。
``device_read`` 用于 ADC 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。实际调用 ``adc_read``。
.. code-block:: C

View file

@ -213,7 +213,7 @@ DMA 设备接口全部遵循标准设备驱动管理层提供的接口。并且
**dma_register**
^^^^^^^^^^^^^^^^^^^^^^^^
``dma_register`` 用来注册一个 DMA 设备的一个通道,在注册之前需要打开对应 DMA 设备的通道宏定义。例如定义宏 ``BSP_USING_DMA_CH0`` 方可使用 ``DMA`` 设备的 0 通道,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``DMA`` 设备的 0 通道。
``dma_register`` 用来注册一个 DMA 设备的一个通道,注册该设备需要使用的标准接口,在注册之前需要打开对应 DMA 设备的通道宏定义。例如定义宏 ``BSP_USING_DMA_CH0`` 方可使用 ``DMA`` 设备的 0 通道,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``DMA`` 设备的 0 通道。
.. code-block:: C
@ -259,7 +259,7 @@ DMA 设备接口全部遵循标准设备驱动管理层提供的接口。并且
**device_open**
^^^^^^^^^^^^^^^^
``device_open`` 用于设备的打开,``oflag`` 表示以何种方式打开。
``device_open`` 用于设备的打开,``oflag`` 表示以何种方式打开。实际调用 ``dma_open``。
.. code-block:: C
@ -283,7 +283,7 @@ DMA 设备接口全部遵循标准设备驱动管理层提供的接口。并且
**device_close**
^^^^^^^^^^^^^^^^
``device_close`` 用于设备的关闭。
``device_close`` 用于设备的关闭。实际调用 ``dma_close``。
.. code-block:: C
@ -295,7 +295,7 @@ DMA 设备接口全部遵循标准设备驱动管理层提供的接口。并且
**device_control**
^^^^^^^^^^^^^^^^^^^
``device_control`` 用于根据命令对设备进行控制和参数的修改。
``device_control`` 用于根据命令对设备进行控制和参数的修改。实际调用 ``dma_control``。
.. code-block:: C

View file

@ -71,7 +71,7 @@ I2C 设备标准接口当前仅使用 ``device_open`` , 并提供标准的数据
**i2c_register**
^^^^^^^^^^^^^^^^^^^^^^^^
``i2c_register`` 用来注册一个 I2C 设备,在注册之前需要打开对应 I2C 设备的宏定义。例如定义宏 ``BSP_USING_I2C0`` 方可使用 ``I2C0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``I2C0`` 设备。
``i2c_register`` 用来注册一个 I2C 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 I2C 设备的宏定义。例如定义宏 ``BSP_USING_I2C0`` 方可使用 ``I2C0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``I2C0`` 设备。
.. code-block:: C
@ -96,7 +96,7 @@ I2C 设备标准接口当前仅使用 ``device_open`` , 并提供标准的数据
**device_open**
^^^^^^^^^^^^^^^^
``device_open`` 用于设备的打开,``oflag`` 表示以何种方式打开。
``device_open`` 用于设备的打开,``oflag`` 表示以何种方式打开。实际调用 ``i2c_open``。
.. code-block:: C

View file

@ -90,7 +90,7 @@ PWM 设备接口全部遵循标准设备驱动管理层提供的接口。并且
**pwm_register**
^^^^^^^^^^^^^^^^^^^^^^^^
``pwm_register`` 用来注册一个 PWM 设备的一个通道,在注册之前需要打开对应 PWM 设备某个通道的宏定义,例如定义 ``BSP_USING_PWM_CH0`` 方可使用 ``PWM`` 通道0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 PWM 设备。
``pwm_register`` 用来注册一个 PWM 设备的一个通道,注册该设备需要使用的标准接口,在注册之前需要打开对应 PWM 设备某个通道的宏定义,例如定义 ``BSP_USING_PWM_CH0`` 方可使用 ``PWM`` 通道0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 PWM 设备。
.. code-block:: C
@ -127,7 +127,7 @@ PWM 设备接口全部遵循标准设备驱动管理层提供的接口。并且
**device_open**
^^^^^^^^^^^^^^^^
``device_open`` 用于设备的打开,``oflag`` 表示以何种方式打开。
``device_open`` 用于设备的打开,``oflag`` 表示以何种方式打开。实际调用 ``pwm_open``。
.. code-block:: C
@ -151,7 +151,7 @@ PWM 设备接口全部遵循标准设备驱动管理层提供的接口。并且
**device_close**
^^^^^^^^^^^^^^^^
``device_close`` 用于设备的关闭。
``device_close`` 用于设备的关闭。实际调用 ``pwm_close``。
.. code-block:: C
@ -163,7 +163,7 @@ PWM 设备接口全部遵循标准设备驱动管理层提供的接口。并且
**device_control**
^^^^^^^^^^^^^^^^^^^
``device_control`` 用于根据命令对设备进行控制和参数的修改。
``device_control`` 用于根据命令对设备进行控制和参数的修改。实际调用 ``pwm_control``。
.. code-block:: C

View file

@ -133,7 +133,7 @@ SPI 设备接口全部遵循标准设备驱动管理层提供的接口。
**spi_register**
^^^^^^^^^^^^^^^^^^^^^^^^
``spi_register`` 用来注册一个 SPI 设备,在注册之前需要打开对应 SPI 设备的宏定义,例如定义宏 ``BSP_USING_SPI0`` 方可使用 SPI0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 SPI 设备。
``spi_register`` 用来注册一个 SPI 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 SPI 设备的宏定义,例如定义宏 ``BSP_USING_SPI0`` 方可使用 SPI0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 SPI 设备。
.. code-block:: C
@ -158,7 +158,7 @@ SPI 设备接口全部遵循标准设备驱动管理层提供的接口。
**device_open**
^^^^^^^^^^^^^^^^
``device_open`` 用于设备的打开,``oflag`` 表示以何种方式打开。
``device_open`` 用于设备的打开,``oflag`` 表示以何种方式打开。实际调用 ``spi_open``。
.. code-block:: C
@ -182,7 +182,7 @@ SPI 设备接口全部遵循标准设备驱动管理层提供的接口。
**device_close**
^^^^^^^^^^^^^^^^
``device_close`` 用于设备的关闭。
``device_close`` 用于设备的关闭。实际调用 ``spi_close``。
.. code-block:: C
@ -194,7 +194,7 @@ SPI 设备接口全部遵循标准设备驱动管理层提供的接口。
**device_control**
^^^^^^^^^^^^^^^^^^^
``device_control`` 用于根据命令对设备进行控制和参数的修改。
``device_control`` 用于根据命令对设备进行控制和参数的修改。实际调用 ``spi_control``。
.. code-block:: C
@ -242,7 +242,7 @@ SPI 设备除了标准的控制命令,还具有自己特殊的控制命令。
**device_write**
^^^^^^^^^^^^^^^^
``device_write`` 用于 SPI 设备数据的发送发送方式根据打开方式可以是轮询、中断、dma。
``device_write`` 用于 SPI 设备数据的发送发送方式根据打开方式可以是轮询、中断、dma。实际调用 ``spi_write``。
.. code-block:: C
@ -257,7 +257,7 @@ SPI 设备除了标准的控制命令,还具有自己特殊的控制命令。
**device_read**
^^^^^^^^^^^^^^^^
``device_read`` 用于 SPI 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。
``device_read`` 用于 SPI 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。实际调用 ``spi_read``。
.. code-block:: C

View file

@ -0,0 +1,265 @@
TIMER 设备
=========================
简介
------------------------
TIMER 通用定时器,博流系列 MCU 中 TIMER 设备具有以下特性:
- 多种时钟来源选择
- 8-bit 时钟分频器,分频系数为 1-256
- 两组 32-bit 定时器
- 每个定时器包含三组报警值设定,可独立设定每组报警值溢出时报警
- 支持 FreeRun 模式和 PreLoad 模式
- 16-bit 看门狗定时器
- 支持写入密码保护,防止误设定造成系统异常
- 支持中断或复位两种看门狗溢出方式
TIMER 设备结构体定义
------------------------
.. code-block:: C
typedef struct timer_device {
struct device parent;
uint8_t id;
uint8_t ch;
uint8_t clk_div;
timer_cnt_mode cnt_mode;
timer_pl_trig_t pl_trig_src;
} timer_device_t;
- parent 继承父类属性
- id 定时器 id ,使能定时器 0 则 id 为 0 ,使能定时器 1 则 id 为 1 ,以此类推
- ch timer 的通道号
- clk_div 时钟分频系数
- cnt_mode 计数模式
- pl_trig_src 比较器的触发源
``ch`` 提供以下类型
.. code-block:: C
enum timer_index_type {
TIMER_CH0_INDEX,
TIMER_CH1_INDEX,
TIMER_MAX_INDEX
};
``cnt_mode`` 提供以下类型
.. code-block:: C
typedef enum {
TIMER_CNT_PRELOAD,
TIMER_CNT_FREERUN,
} timer_cnt_mode;
``pl_trig_src`` 提供以下类型
.. code-block:: C
typedef enum {
TIMER_PL_TRIG_NONE,
TIMER_PL_TRIG_COMP0,
TIMER_PL_TRIG_COMP1,
TIMER_PL_TRIG_COMP2,
} timer_pl_trig_t;
TIMER 设备参数配置表
------------------------
每一个 TIMER 设备都有一个参数配置宏,宏定义位于 ``bsp/board/xxx`` 目录下 ``peripheral_config.h`` 文件,变量定义位于 ``hal_timer.c`` 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 ``BSP_USING_TIMER_CH0`` ``TIMER_CH0_CONFIG`` 即生效,同时 ``TIMER_CH0_INDEX`` 设备就可以进行注册和使用了。
.. code-block:: C
/*参数配置宏*/
#if defined(BSP_USING_TIMER_CH0)
#ifndef TIMER_CH0_CONFIG
#define TIMER_CH0_CONFIG \
{ \
.id = 0, \
.ch = 0, \
.cnt_mode = TIMER_CNT_PRELOAD, \
.pl_trig_src = TIMER_PL_TRIG_COMP0, \
}
#endif
#endif
#if defined(BSP_USING_TIMER_CH1)
#ifndef TIMER_CH1_CONFIG
#define TIMER_CH1_CONFIG \
{ \
.id = 0, \
.ch = 1, \
.cnt_mode = TIMER_CNT_PRELOAD, \
.pl_trig_src = TIMER_PL_TRIG_COMP2, \
}
#endif
#endif
/*变量定义*/
enum timer_index_type {
#ifdef BSP_USING_TIMER_CH0
TIMER_CH0_INDEX,
#endif
#ifdef BSP_USING_TIMER_CH1
TIMER_CH1_INDEX,
#endif
TIMER_MAX_INDEX
};
.. note:: 上述配置可以通过 ``TIMER_DEV(dev)->xxx`` 进行修改,只能在调用 ``device_open`` 之前使用。
TIMER 设备接口
------------------------
TIMER 设备接口全部遵循标准设备驱动管理层提供的接口。
**timer_register**
^^^^^^^^^^^^^^^^^^^^^^^^
``timer_register`` 用来注册一个 TIMER 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 TIMER 设备的宏定义。例如定义宏 ``BSP_USING_TIMER_CH0`` 方可使用 ``TIMER_CH0_INDEX`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``TIMER_CH0_INDEX`` 设备。
.. code-block:: C
int timer_register(enum timer_index_type index, const char *name, uint16_t flag);
- index 要注册的设备索引
- name 为注册的设备命名
- flag 默认可读可写属性
``index`` 用来选择 TIMER 设备配置,一个 index 对应一个 TIMER 设备配置,比如 ``TIMER_CH0_INDEX`` 对应 ``TIMER_CH0_CONFIG`` 配置,``index`` 有如下可选类型
.. code-block:: C
enum timer_index_type {
#ifdef BSP_USING_TIMER_CH0
TIMER_CH0_INDEX,
#endif
#ifdef BSP_USING_TIMER_CH1
TIMER_CH1_INDEX,
#endif
TIMER_MAX_INDEX
};
**device_open**
^^^^^^^^^^^^^^^^
``device_open`` 用于 TIMER 设备的打开,``oflag`` 表示以何种方式打开。实际调用 ``timer_open``。
.. code-block:: C
int device_open(struct device *dev, uint16_t oflag);
- dev 设备句柄
- oflag 设备的打开方式
- return 错误码0 表示打开成功,其他表示错误
``oflag`` 可以写入以下参数:
.. code-block:: C
#define DEVICE_OFLAG_INT 0x01
#define DEVICE_OFLAG_POLL 0x02
#define DEVICE_CTRL_TIMER_CH_START 0x80
#define DEVICE_CTRL_TIMER_CH_STOP 0x81
#define DEVICE_CTRL_GET_MATCH_STATUS 0x82
**device_close**
^^^^^^^^^^^^^^^^
``device_close`` 用于设备的关闭。实际调用 ``timer_close``。
.. code-block:: C
int device_close(struct device *dev);
- dev 设备句柄
- return 错误码0 表示关闭成功,其他表示错误
**device_control**
^^^^^^^^^^^^^^^^^^^
``device_control`` 用于根据命令对 TIMER 设备进行控制和参数的修改。实际调用 ``timer_control``。
.. code-block:: C
int device_control(struct device *dev, int cmd, void *args);
- dev 设备句柄
- cmd 设备控制命令
- args 控制参数
- return 不同的控制命令返回的意义不同。
TIMER 设备除了标准的控制命令,还具有私有的控制命令。
.. code-block:: C
#define DEVICE_CTRL_TIMER_CH_START 0x80
#define DEVICE_CTRL_TIMER_CH_STOP 0x81
#define DEVICE_CTRL_GET_MATCH_STATUS 0x82
``args`` 根据不同的 ``cmd`` 传入不同,具体如下:
.. list-table:: table1
:widths: 15 10 30
:header-rows: 1
* - cmd
- args
- description
* - DEVICE_CTRL_SET_INT
- NULL
- 开启 TIMER 中断
* - DEVICE_CTRL_CLR_INT
- NULL
- 关闭 TIMER 中断
* - DEVICE_CTRL_RESUME
- NULL
- 开启 TIMER
* - DEVICE_CTRL_SUSPEND
- NULL
- 关闭 TIMER
* - DEVICE_CTRL_TIMER_CH_START
- timer_user_cfg_t
- 开启 TIMER 及其中断
* - DEVICE_CTRL_TIMER_CH_STOP
- timer_user_cfg_t
- 关闭 TIMER 及其中断
* - DEVICE_CTRL_GET_CONFIG
- NULL
- 获取 TIMER 当前的计数值
* - DEVICE_CTRL_GET_MATCH_STATUS
- uint32_t
- 获取 TIMER 比较器的状态
**device_set_callback**
^^^^^^^^^^^^^^^^^^^^^^^^
``device_set_callback`` 用于注册一个 TIMER 中断回调函数。
.. code-block:: C
int device_set_callback(struct device *dev, void (*callback)(struct device *dev, void *args, uint32_t size, uint32_t event));
- dev 设备句柄
- callback 要注册的中断回调函数
- dev 设备句柄
- args 接收发送缓冲区,数据类型为 uint8_t*
- size 传输长度
- event 中断事件类型
TIMER 设备 ``event`` 类型如下
.. code-block:: C
enum timer_event_type {
TIMER_EVENT_COMP0,
TIMER_EVENT_COMP1,
TIMER_EVENT_COMP2,
TIMER_EVENT_UNKNOWN
};

View file

@ -121,7 +121,7 @@ UART 设备接口全部遵循标准设备驱动管理层提供的接口。
**uart_register**
^^^^^^^^^^^^^^^^^^^^^^^^
``uart_register`` 用来注册一个 UART 设备,在注册之前需要打开对应 UART 设备的宏定义。例如定义宏 ``BSP_USING_UART0`` 方可使用 ``UART0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``UART0`` 设备。
``uart_register`` 用来注册一个 UART 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 UART 设备的宏定义。例如定义宏 ``BSP_USING_UART0`` 方可使用 ``UART0`` 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 ``UART0`` 设备。
.. code-block:: C
@ -149,7 +149,7 @@ UART 设备接口全部遵循标准设备驱动管理层提供的接口。
**device_open**
^^^^^^^^^^^^^^^^
``device_open`` 用于 UART 设备的打开,``oflag`` 表示以何种方式打开。
``device_open`` 用于 UART 设备的打开,``oflag`` 表示以何种方式打开。实际调用 ``uart_open``。
.. code-block:: C
@ -173,7 +173,7 @@ UART 设备接口全部遵循标准设备驱动管理层提供的接口。
**device_close**
^^^^^^^^^^^^^^^^
``device_close`` 用于设备的关闭。
``device_close`` 用于设备的关闭。实际调用 ``uart_close``。
.. code-block:: C
@ -185,7 +185,7 @@ UART 设备接口全部遵循标准设备驱动管理层提供的接口。
**device_control**
^^^^^^^^^^^^^^^^^^^
``device_control`` 用于根据命令对 UART 设备进行控制和参数的修改。
``device_control`` 用于根据命令对 UART 设备进行控制和参数的修改。实际调用 ``uart_control``。
.. code-block:: C
@ -237,7 +237,7 @@ UART 设备接口全部遵循标准设备驱动管理层提供的接口。
**device_write**
^^^^^^^^^^^^^^^^
``device_write`` 用于 UART 设备数据的发送发送方式根据打开方式可以是轮询、中断、dma。
``device_write`` 用于 UART 设备数据的发送发送方式根据打开方式可以是轮询、中断、dma。实际调用 ``uart_write``。
.. code-block:: C
@ -252,7 +252,7 @@ UART 设备接口全部遵循标准设备驱动管理层提供的接口。
**device_read**
^^^^^^^^^^^^^^^^
``device_read`` 用于 UART 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。
``device_read`` 用于 UART 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。实际调用 ``uart_read``。
.. code-block:: C

View file

@ -0,0 +1,17 @@
==============
Peripheral
==============
.. toctree::
:maxdepth: 1
时钟树 <api_clock>
GPIO 设备 <api_gpio>
UART 设备 <api_uart>
PWM 设备 <api_pwm>
DMA 设备 <api_dma>
I2C 设备 <api_i2c>
SPI 设备 <api_spi>
ADC 设备 <api_adc>
DAC 设备 <api_dac>
TIMER 设备 <api_timer>

View file

@ -0,0 +1,67 @@
Shell
=======================
Shell 是一个命令行解释器Shell 为用户提供了与设备进行命令行交互的方式,用户通过串口、以太网、无线等方式将命令传输给具有 Shell 功能的设备,设备会解析命令并查找对应的函数进行执行。
当前 Shell 组件具有以下功能:
- 支持标准键盘字符控制
- 支持 TAB 键自动补全
- 支持上下键查看历史命令
- 支持左右键修改命令
- 变量导出
- 支持文件系统操作
Shell 接口
---------------
**shell_init**
^^^^^^^^^^^^^^^^^^^^^^^^
``shell_init`` 用来初始化 shell。
.. code-block:: C
void shell_init(void);
**shell_handler**
^^^^^^^^^^^^^^^^^^^^^^^^
``shell_handler`` 用来对输入的数据进行处理。
.. code-block:: C
void shell_handler(uint8_t data);
- data 接收的数据
**SHELL_CMD_EXPORT**
^^^^^^^^^^^^^^^^^^^^^^^^
``SHELL_CMD_EXPORT`` 用来注册一个命令。
.. c:macro:: SHELL_CMD_EXPORT(command, desc)
- command 注册的函数名,后面输入 command 来运行该函数
- desc 对该函数的描述
**SHELL_CMD_EXPORT_ALIAS**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``SHELL_CMD_EXPORT_ALIAS`` 用来注册一个命令,并对命令取别名。
.. c:macro:: SHELL_CMD_EXPORT_ALIAS(command, alias, desc)
- command 注册的函数名
- alias 函数名的别名,后面输入 alias 来运行该函数
- desc 对该函数的描述
Shell 内置命令
-----------------
.. tip:: ``help`` 用来显示所有注册过的命令列表

View file

@ -0,0 +1,92 @@
USB Stack
=======================
USB Stack 是一个跨平台的、用于嵌入式 MCU 的 USB 协议栈该协议栈对标准设备请求、CLASS 请求、VENDOR 请求规范了一套统一的函数框架,从而对复合设备或者使用自定义设备类时,能够在极短的时间内进行添加和移植。此外,该协议栈代码优美,内存占用小(不使用静态数组),通用性非常高,提供了一套标准的 porting 接口,供给不同的 MCU 使用。其中usb device 协议栈当前具有以下功能:
- 支持 USB2.0 全速和高速设备
- 支持端点中断注册功能porting 给用户自己处理中断里的数据
- 支持复合设备
- 支持 Communication Class (CDC)
- 支持 Human Interface Device (HID)
- 支持 Custom human Interface Device (HID)
- 支持 Mass Storage Class (MSC)
- 支持 USB VIDEO CLASS (UVC)
- 支持 USB AUDIO CLASS (UAC)
- 支持 vendor 类 class
- 支持 WINUSB1.0、WINUSB2.0
.. note:: USB DEVICE 协议栈的代码实现过程参考 `<https://www.bilibili.com/video/BV1Ef4y1t73d>`_
USB Device Porting 接口
------------------------
USB Device Porting 接口在 ``usb_stack/common/usb_dc.h`` 文件中声明,用户根据自己的 MCU 进行实现
**usbd_set_address**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_ep_open**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_ep_close**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_ep_set_stall**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_ep_clear_stall**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_ep_is_stalled**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_ep_write**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_ep_read**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_event_notify_handler**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
USB Device 应用层接口
----------------------
USB Device 控制器接口
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usb_dc_init**
""""""""""""""""""
USB Device 通用接口
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**usbd_desc_register**
""""""""""""""""""""""""""""""""""""
**usbd_msosv1_desc_register**
""""""""""""""""""""""""""""""""""""
**usbd_class_add_interface**
""""""""""""""""""""""""""""""""""""
**usbd_interface_add_endpoint**
""""""""""""""""""""""""""""""""""""
**usb_device_is_configured**
""""""""""""""""""""""""""""""""""""
USB Device CDC 类接口
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
USB Device MSC 类接口
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
USB Device HID 类接口
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
USB Device AUDIO 类接口
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
USB Device VIDEO 类接口
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View file

@ -32,19 +32,12 @@ BL MCU SDK 将为您提供博流 BL70X 系列 MCU 开发的全方位支持。
:caption: API 手册
:numbered:
api_reference/api_structure
api_reference/api_clock
api_reference/api_gpio
api_reference/api_uart
api_reference/api_pwm
api_reference/api_dma
api_reference/api_i2c
api_reference/api_spi
api_reference/api_adc
api_reference/api_dac
.. api_reference/api_ble
api_reference/api_overview
api_reference/board
api_reference/peripheral/index
api_reference/shell/api_shell
api_reference/usb stack/api_usb_stack
api_reference/bluetooth/api_ble
.. toctree::
:maxdepth: 1
@ -69,6 +62,8 @@ BL MCU SDK 将为您提供博流 BL70X 系列 MCU 开发的全方位支持。
samples/advance samples/shell_demo
samples/advance samples/fatfs_demo
samples/advance samples/usb/index
samples/advance samples/lowpower_demo
samples/advance samples/boot2_iap_info
samples/advance samples/ble_scan_demo
samples/advance samples/boot2_iap_info

View file

@ -1,2 +1,2 @@
FATFS 文件系统读写
Fatfs 文件系统读写
====================

View file

@ -1,16 +1,7 @@
SHELL 命令行调试
Shell 命令行调试
====================
为方便用户使用 pc 或者其他控制器对开发板进行功能的调试(非仿真器调试),我们为用户提供了 shell 命令行组件,类似于在 linux 下进行命令行操作。用户在 PC 端或者其他控制端进行命令的发送通过串口、usb、以太网、蓝牙、wifi等方式将数据发送给开发板的 shell 中shell 会读取接收的命令进行解析并对已经注册的内部函数扫描,扫描到与之匹配的函数以后,执行匹配的函数,并实时返回传入的键值和函数执行的结果给 pc or 控制端。其中需要注意,控制器端需要发送标准键盘的键值。
本 demo 将演示如何使用 **shell** 通过串口进行命令行调试。
本 shell 组件有以下功能:
- 支持标准键盘字符控制
- 支持命令自动补全
- 支持上下键查看历史命令
- 支持左右键修改命令
- 支持文件系统、网络系统调试
本 demo 将演示如何使用 shell 通过串口进行命令行调试。
准备工具
-----------------------
@ -137,11 +128,7 @@ shell 移植到串口
SHELL 命令注册
^^^^^^^^^^^^^^^^^^^^
shell 命令注册使用以下两个宏
- **SHELL_CMD_EXPORT**
``SHELL_CMD_EXPORT`` 有两个参数,``command`` 代表需要注册的函数名pc 或者控制器将发送 ``command`` 对设备进行命令控制desc`` 是对该注册函数的描述,
以下两种注册方式任选
.. code-block:: C
:linenos:
@ -150,11 +137,20 @@ shell 命令注册使用以下两个宏
{
MSG("hello World\r\n");
}
int echo(int argc, char *argv[])
{
MSG("%dparameter(s)\r\n", argc);
for (uint8_t i = 1; i < argc; i++) {
MSG("%s\r\n", argv[i]);
}
return 0;
}
SHELL_CMD_EXPORT(hellowd, hellowd test)
- **SHELL_CMD_EXPORT_ALIAS**
``SHELL_CMD_EXPORT_ALIAS`` 有三个参数,``command`` 代表需要注册的函数名,``alias`` 是对该注册函数名重命名pc 或者控制器将发送 ``alias`` 对设备进行命令控制,``desc`` 是对该注册函数的描述,
SHELL_CMD_EXPORT(echo, echo test)
.. code-block:: C
:linenos:
@ -163,7 +159,20 @@ shell 命令注册使用以下两个宏
{
MSG("hello World\r\n");
}
int cmd_echo(int argc, char *argv[])
{
MSG("%dparameter(s)\r\n", argc);
for (uint8_t i = 1; i < argc; i++) {
MSG("%s\r\n", argv[i]);
}
return 0;
}
SHELL_CMD_EXPORT_ALIAS(hellowd, hellwd,hellowd test)
SHELL_CMD_EXPORT_ALIAS(cmd_echo, echo,echo test)
编译和烧录

View file

@ -0,0 +1,12 @@
=================
USB Device 应用
=================
.. toctree::
:maxdepth: 1
CDC - 虚拟串口<usbd_cdc>
MSC - U 盘<usbd_msc>
HID - 键盘&鼠标<usbd_hid>
VIDEO - 摄像头<usbd_video>
AUDIO - 麦克风<usbd_audio>

View file

@ -0,0 +1,2 @@
AUDIO - 麦克风
====================

View file

@ -0,0 +1,2 @@
CDC - 虚拟串口
====================

View file

@ -0,0 +1,2 @@
HID - 键盘&鼠标
====================

View file

@ -0,0 +1,2 @@
MSC - U 盘
====================

View file

@ -0,0 +1,166 @@
VIDEO - 摄像头
====================
本 demo 将演示 USB Device VIDEO 类实现的一个摄像头设备。
通过 usb 外设将其枚举成 VIDEO 类设备,从而可以使用摄像头模块将采集到的数据通过 usb 发送给主机进行显示,这里使用 windows 自带的相机进行显示,支持 usb video 类驱动。发送的数据需要满足一定的格式,这里我们选择 MJPEG从 usb 官方手册中我们可以看到具体的数据头部信息以及传输示例。
.. figure:: img/usb_video.png
:alt:
video stream header
.. figure:: img/video_isoch.png
:alt:
examples for isoch transfer IN
采集数据需要摄像头,我们使用的模块为 gc0308支持 RGB555 或者 YUV 格式输出,这里我们选择输出 YUV 格式。除了摄像头模块我们还需要外设来驱动摄像头BL706 拥有 CAM 外设,可以驱动该摄像头。
准备工具
-----------------------
BL706 AVB + GC0308摄像头模块 + windows 相机
硬件连接
-----------------------------
本 demo 基于 BL706_AVB 开发板,连接方式如下
::
GPIO function GPIO pin
----------------------------------
CAM <--> GPIO0
CAM <--> GPIO1
CAM <--> GPIO2
CAM <--> GPIO3
CAM <--> GPIO4
CAM <--> GPIO5
CAM <--> GPIO6
USB_DP <--> GPIO7
USB_DM <--> GPIO8
CLK_OUT <--> GPIO9
I2C_SCL <--> GPIO11
I2C_SDA <--> GPIO16
CAM <--> GPIO29
CAM <--> GPIO30
CAM <--> GPIO31
软件实现
-----------------------------
- 软件代码见 ``examples/usb/usb_video``
.. code-block:: C
:linenos:
#define BSP_I2C_CLOCK_SOURCE ROOT_CLOCK_SOURCE_BCLK
#define BSP_I2C_CLOCK_DIV 0
#define BSP_CAM_CLOCK_SOURCE ROOT_CLOCK_SOURCE_PLL_96M
#define BSP_CAM_CLOCK_DIV 3
- 使用到的外设时钟源见 ``bsp/board/bl706_avb/clock_config.h``,如有改动,请自行修改
.. code-block:: C
:linenos:
#define CONFIG_GPIO0_FUNC GPIO_FUN_CAM
#define CONFIG_GPIO1_FUNC GPIO_FUN_CAM
#define CONFIG_GPIO2_FUNC GPIO_FUN_CAM
#define CONFIG_GPIO3_FUNC GPIO_FUN_CAM
#define CONFIG_GPIO4_FUNC GPIO_FUN_CAM
#define CONFIG_GPIO5_FUNC GPIO_FUN_CAM
#define CONFIG_GPIO6_FUNC GPIO_FUN_CAM
#define CONFIG_GPIO7_FUNC GPIO_FUN_USB
#define CONFIG_GPIO8_FUNC GPIO_FUN_USB
#define CONFIG_GPIO9_FUNC GPIO_FUN_CLK_OUT
#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO12_FUNC GPIO_FUN_CAM
#define CONFIG_GPIO16_FUNC GPIO_FUN_I2C
#define CONFIG_GPIO29_FUNC GPIO_FUN_CAM
#define CONFIG_GPIO30_FUNC GPIO_FUN_CAM
#define CONFIG_GPIO31_FUNC GPIO_FUN_CAM
- 使用到的 GPIO 配置见 ``bsp/board/bl706_avb/pinmux_config.h``,默认提供了该 demo 的引脚配置
.. note:: ``bsp/board/bl706_avb/pinmux_config.h`` 当前给所有的示例 demo 使用,所以,需要先选定 ``PINMUX_SELECT`` 为 ``PINMUX_UVC``,开启 UVC demo
.. code-block:: C
:linenos:
#define BSP_USING_CAM
#define BSP_USING_I2C0
#define BSP_USING_USB
#define BSP_USING_DMA0_CH2
#if defined(BSP_USING_I2C0)
#ifndef I2C0_CONFIG
#define I2C0_CONFIG \
{ \
.id = 0, \
.mode = I2C_HW_MODE, \
.phase = 15, \
}
#endif
#endif
#if defined(BSP_USING_DMA0_CH2)
#ifndef DMA0_CH2_CONFIG
#define DMA0_CH2_CONFIG \
{ \
.id = 0, \
.ch = 2, \
.direction = DMA_MEMORY_TO_PERIPH, \
.transfer_mode = DMA_LLI_ONCE_MODE, \
.src_req = DMA_REQUEST_NONE, \
.dst_req = DMA_REQUEST_UART1_TX, \
.src_width = DMA_TRANSFER_WIDTH_8BIT, \
.dst_width = DMA_TRANSFER_WIDTH_8BIT, \
}
#endif
#endif
- 使能外设并配置,见 ``bsp/board/bl706_avb/peripheral_config.h`` ,外设配置可以保持默认,在程序中修改,如下
.. code-block:: C
:linenos:
DMA_DEV(dma_ch2)->dst_req = DMA_REQUEST_USB_EP1;
device_open(dma_ch2, 0);
.. code-block:: C
:linenos:
#define FORMAT_SEL UYVY
- gc0308 输出格式选择 ``UYVY``,见 ``bsp/bsp_common/bsp_image_sensor.c``
编译和烧录
-----------------------------
- **CDK 编译**
打开项目中提供的工程文件usb_video.cdkproj
参照 :ref:`windows_cdk_quick_start` 的步骤编译下载即可
- **命令行编译**
.. code-block:: bash
:linenos:
$ cd <sdk_path>/bl_mcu_sdk
$ make BOARD=bl706_avb APP=usb_video
- **烧录**
详见 :ref:`bl_dev_cube`
实验现象
-----------------------------
.. figure:: img/usb_video.gif
:alt:

View file

@ -38,7 +38,7 @@ ADC - 按键检测电压
#define CONFIG_GPIO18_FUNC GPIO_FUN_ADC
- 配置 ``ADC`` 设备复用引脚,见 ``bsp/board/bl706_iot/pinmux_config.h``
- 配置 ``ADC`` 设备复用引脚,见 ``bsp/board/bl706_avb/pinmux_config.h``
.. code-block:: C
:linenos:
@ -60,7 +60,7 @@ ADC - 按键检测电压
#endif
#endif
- 使能 ``BSP_USING_ADC0`` 并配置 ``ADC`` 设备配置,见 ``bsp/board/bl706_iot/peripheral_config.h``
- 使能 ``BSP_USING_ADC0`` 并配置 ``ADC`` 设备配置,见 ``bsp/board/bl706_avb/peripheral_config.h``
.. code-block:: C
:linenos:
@ -120,7 +120,7 @@ ADC - 按键检测电压
:linenos:
$ cd <sdk_path>/bl_mcu_sdk
$ make BOARD=bl706_avb APP=adc_key
$ make BOARD=bl706_avb APP=adc_key SUPPORT_FLOAT=y
- **烧录**

View file

@ -1,6 +1,8 @@
SPI - TFT LCD 显示
====================
本 demo 演示通过 SPI 驱动带 il9431 芯片的TFT 屏显示。
硬件连接
-----------------------------
@ -37,9 +39,7 @@ SPI - TFT LCD 显示
#define CONFIG_GPIO20_FUNC GPIO_FUN_SPI
#define CONFIG_GPIO21_FUNC GPIO_FUN_SPI
- 配置 ``SPI`` 设备复用引脚,见 ``bsp/board/bl706_avb/pinmux_config.h``
.. note:: ``bsp/board/bl706_avb/pinmux_config.h`` 当前给所有的示例demo使用所以需要先选定 ``PINMUX_SELECT`` 为 ``PINMUX_LVGL``,开启其中一个 demo
- 配置 ``SPI`` 设备复用引脚,见 ``bsp/board/bl706_avb/pinmux_config.h``,,如有改动,请自行修改
.. note:: 为适配 bl702_avb 硬件, SPI 的 MOSI 和 MISO 默认进行了调换,如果想要恢复默认,修改 ``drivers/bl702_driver/hal_drv/default_config/spi_config.h`` 中 ``SPI_SWAP_ENABLE`` 为 0

View file

@ -1,6 +1,6 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '0.2',
VERSION: '0.3',
LANGUAGE: 'zh_CN',
COLLAPSE_INDEX: false,
BUILDER: 'html',

View file

@ -1,905 +0,0 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>BLE &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
</a>
<div class="version">
0.2
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dac.html">10. DAC 设备</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">BL_MCU_SDK 开发指南</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li>BLE</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/api_reference/api_ble.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="ble">
<span id="ble-index"></span><h1>BLE<a class="headerlink" href="#ble" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2>概述<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<ul>
<li><dl class="simple">
<dt>BLE支持的特性</dt><dd><ul class="simple">
<li><dl class="simple">
<dt>蓝牙HOST特性</dt><dd><ul>
<li><p>GAP支持的角色Peripheral与CentralObserver与Broadcaster</p></li>
<li><p>GATT支持的角色Server与Client</p></li>
<li><p>支持配对包括蓝牙4.2中的安全连接特性</p></li>
<li><p>支持永久存储蓝牙特定的设置和数据</p></li>
</ul>
</dd>
</dl>
</li>
<li><dl class="simple">
<dt>蓝牙mesh特性</dt><dd><ul>
<li><p>支持Relay, Friend Node, Low-Power Node (LPN) and GATT Proxy角色</p></li>
<li><p>支持两种Provisioning bearers(PB-ADV &amp; PB-GATT)</p></li>
</ul>
</dd>
</dl>
</li>
</ul>
</dd>
</dl>
</li>
<li><dl>
<dt>BLE协议栈的架构</dt><dd><blockquote>
<div><div class="figure align-default">
<img alt="../_images/image1.png" src="../_images/image1.png" />
</div>
</div></blockquote>
<ul class="simple">
<li><dl class="simple">
<dt>总共有3个主要层共同构成了一个完整的蓝牙低能耗协议栈</dt><dd><ul>
<li><p>Host这一层位于应用程序之下,由多个(非实时)网络和传输协议组成,使应用程序能够以标准和互操作的方式与对等设备通信。</p></li>
<li><p>Controller控制器实现了链路层(LE LL)这是一种低层次的实时协议它与无线电硬件一起提供了空中通信的标准互操作。LL处理包的接收和传输保证数据的传递并处理所有LL控制程序。</p></li>
<li><p>Radio Hardware实现所需的模拟和数字基带功能块允许链路层固件在频谱的2.4GHz波段发送和接收。</p></li>
</ul>
</dd>
</dl>
</li>
</ul>
</dd>
</dl>
</li>
<li><dl>
<dt>主控Host</dt><dd><blockquote>
<div><div class="figure align-default">
<img alt="../_images/image2.png" src="../_images/image2.png" />
</div>
</div></blockquote>
<ul class="simple">
<li><dl class="simple">
<dt>蓝牙Host层实现了所有高级协议和配置文件最重要的是它为应用程序提供了高级API</dt><dd><ul>
<li><p>HCI:Host与controller接口</p></li>
<li><p>L2CAP:逻辑链路控制和适应协议</p></li>
<li><p>GATT:通用属性配置层Generic Attribute Profile</p></li>
<li><p>GAP:通用访问配置层Generic Access Profile</p></li>
<li><p>SMP:安全管理器配置层Security Manager Specification</p></li>
</ul>
</dd>
</dl>
</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="simple">
<dt>应用Application</dt><dd><ul class="simple">
<li><dl class="simple">
<dt>应用层是用户开发实际蓝牙应用的地方,包含必要的协议栈参数设置,以及各种功能函数的调用。我们分别从蓝牙从机和蓝牙主机两种设备来分析。</dt><dd><ul>
<li><dl class="simple">
<dt>蓝牙从机</dt><dd><ul>
<li><p>相关硬件和基础服务初始化</p></li>
<li><p>设置广播参数:广播数据,广播间隔,扫描回应等参数或者数据</p></li>
<li><p>设置Profile添加从机服务、特征值还有设置回调函数用于接收主机数据等</p></li>
<li><p>设置配对参数(可选)</p></li>
<li><p>启动广播,开始运行</p></li>
<li><p>等待相关事件,及事件处理,例如收到主机发来的数据,被链接等等</p></li>
</ul>
</dd>
</dl>
</li>
<li><dl class="simple">
<dt>蓝牙主机</dt><dd><ul>
<li><p>相关硬件和基础服务初始化</p></li>
<li><p>设置扫描参数</p></li>
<li><p>设置连接参数</p></li>
<li><p>设置配对参数(可选)</p></li>
<li><p>启动协议栈,开始运行</p></li>
<li><p>等待相关事件及事件处理例如扫描事件从机的Notify事件等等。</p></li>
</ul>
</dd>
</dl>
</li>
</ul>
</dd>
</dl>
</li>
</ul>
</dd>
</dl>
</li>
</ul>
</div>
<div class="section" id="api">
<h2>API参考<a class="headerlink" href="#api" title="永久链接至标题"></a></h2>
<ul class="simple">
<li><p>API介绍</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">void</span> <span class="pre">ble_controller_init(uint8_t</span> <span class="pre">task_priority)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function controller层初始化
* @param[in] task_priority 任务优先级
* @return 空
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">hci_driver_init(void)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function HCI接口驱动初始化
* @param[in] 空
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_enable(bt_ready_cb_t</span> <span class="pre">cb)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function Ble使能
* @param[in] cb如果成功调用回调函数
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_le_adv_start(const</span> <span class="pre">struct</span> <span class="pre">bt_le_adv_param</span> <span class="pre">*param,const</span> <span class="pre">struct</span> <span class="pre">bt_data</span> <span class="pre">*ad,</span> <span class="pre">size_t</span> <span class="pre">ad_len,</span></code></dt><dd><p><code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">struct</span> <span class="pre">bt_data</span> <span class="pre">*sd,</span> <span class="pre">size_t</span> <span class="pre">sd_len)</span></code></p>
</dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 开启BLE广播
*
* @param[in] param: 指向广播配置参数指针
* @param[in] ad: 指向广播包中数据指针
* @param[in] ad_len: 广播包中数据的长度
* @param[in] sd: 指向扫描响应包数据指针
* @param[in] sd_len: 扫描响应包数据的长度
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_le_adv_update_data(const</span> <span class="pre">struct</span> <span class="pre">bt_data</span> <span class="pre">*ad,</span> <span class="pre">size_t</span> <span class="pre">ad_len,const</span> <span class="pre">struct</span> <span class="pre">bt_data</span> <span class="pre">*sd,</span> <span class="pre">size_t</span> <span class="pre">sd_len)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 更新BLE广播数据
* @param[in] ad: 指向广播包中数据指针
* @param[in] ad_len: 广播包中数据的长度
* @param[in] sd: 指向扫描响应包数据指针
* @param[in] sd_len: 扫描响应包数据的长度
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_le_adv_stop(void)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 停止BLE广播
* @param[in] 空
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_le_scan_start(const</span> <span class="pre">struct</span> <span class="pre">bt_le_scan_param</span> <span class="pre">*param,</span> <span class="pre">bt_le_scan_cb_t</span> <span class="pre">cb)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 开启BLE扫描
* @param[in] param: 指向扫描参数的指针
* @param[in] cb: 扫描回调函数
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_le_scan_stop(void)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 停止BLE扫描
* @param[in] 空
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_le_whitelist_add(const</span> <span class="pre">bt_addr_le_t</span> <span class="pre">*addr)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 通过地址添加设备到白名单列表中
* @param[in] addr:指向需要添加设备地址的指针
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_le_whitelist_rem(const</span> <span class="pre">bt_addr_le_t</span> <span class="pre">*addr)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 从白名单列表中移除设备
* @param[in] addr:指向需要移除设备地址的指针
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_le_whitelist_clear(void)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 清除白名单列表
* @param[in] 空
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_le_set_chan_map(u8_t</span> <span class="pre">chan_map[5])</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 设置(LE)通道映射
* @param[in] chan_map通道数组
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_unpair(u8_t</span> <span class="pre">id,</span> <span class="pre">const</span> <span class="pre">bt_addr_le_t</span> <span class="pre">*addr)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 清除配对信息
* @param[in] id 本地标识(大多只是默认的BT ID)
* @param[in] addr 远端设备地址NULL或者BT_ADDR_LE_ANY清除所有远端设备
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_conn_get_info(const</span> <span class="pre">struct</span> <span class="pre">bt_conn</span> <span class="pre">*conn,</span> <span class="pre">struct</span> <span class="pre">bt_conn_info</span> <span class="pre">*info)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 获取当前连接设备的信息
* @param[in] conn 指向当前连接的指针
* @param[in] info 指向当前连接设备信息的指针
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_conn_get_remote_dev_info(struct</span> <span class="pre">bt_conn_info</span> <span class="pre">*info)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 获取已连接设备的信息
* @param[in] info 指向当前连接设备信息的指针
* @return 已连接设备的个数
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_conn_le_param_update(struct</span> <span class="pre">bt_conn</span> <span class="pre">*conn,const</span> <span class="pre">struct</span> <span class="pre">bt_le_conn_param</span> <span class="pre">*param)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 更新连接参数
* @param[in] conn 指向当前连接的指针
* @param[in] param 指向连接参数的指针
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_conn_disconnect(struct</span> <span class="pre">bt_conn</span> <span class="pre">*conn,</span> <span class="pre">u8_t</span> <span class="pre">reason)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 断开当前连接
* @param[in] conn 指向当前连接的指针
* @param[in] reason断开当前连接的原因
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">bt_conn</span> <span class="pre">*bt_conn_create_le(const</span> <span class="pre">bt_addr_le_t</span> <span class="pre">*peer,const</span> <span class="pre">struct</span> <span class="pre">bt_le_conn_param</span> <span class="pre">*param)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 创建连接
* @param[in] peer 需要连接设备地址的指针
* @param[in] param 指向连接参数指针
* @return 成功:有效的连接对象,否则失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_conn_create_auto_le(const</span> <span class="pre">struct</span> <span class="pre">bt_le_conn_param</span> <span class="pre">*param)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 自动创建连接白名单列表中的设备
* @param[in] param 指向连接参数指针
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_conn_create_auto_stop(void)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 停止自动创建连接白名单列表中的设备
* @param[in] 空
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_le_set_auto_conn(const</span> <span class="pre">bt_addr_le_t</span> <span class="pre">*addr,const</span> <span class="pre">struct</span> <span class="pre">bt_le_conn_param</span> <span class="pre">*param)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 自动创建连接远端设备
* @param[in] addr 远端设备地址指针
* @param[in] param 指向连接参数指针
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">bt_conn</span> <span class="pre">*bt_conn_create_slave_le(const</span> <span class="pre">bt_addr_le_t</span> <span class="pre">*peer,const</span> <span class="pre">struct</span> <span class="pre">bt_le_adv_param</span> <span class="pre">*param)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 发起定向的广播包给远端设备
* @param[in] peer 远端设备地址指针
* @param[in] param 指向广播参数的指针
* @return 成功:有效的连接对象,否则失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_conn_set_security(struct</span> <span class="pre">bt_conn</span> <span class="pre">*conn,</span> <span class="pre">bt_security_t</span> <span class="pre">sec)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 设置连接安全等级
* @param[in] conn 指向连接对象的指针
* @param[in] sec 安全等级
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">bt_security_t</span> <span class="pre">bt_conn_get_security(struct</span> <span class="pre">bt_conn</span> <span class="pre">*conn)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 获取当前连接的安全等级
* @param[in] conn 指向连接对象的指针
* @return 安全级别
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">u8_t</span> <span class="pre">bt_conn_enc_key_size(struct</span> <span class="pre">bt_conn</span> <span class="pre">*conn)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 获取当前连接的加密key的大小
* @param[in] conn 指向连接对象的指针
* @return 加密key的大小
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">void</span> <span class="pre">bt_conn_cb_register(struct</span> <span class="pre">bt_conn_cb</span> <span class="pre">*cb)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 注册连接回调函数
* @param[in] cb 连接回调函数
* @return 空
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">void</span> <span class="pre">bt_set_bondable(bool</span> <span class="pre">enable)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 设置/清除SMP配对请求/响应数据认证需求中的绑定标志
* @param[in] enable 1使能0不使能
* @return 空
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_conn_auth_cb_register(const</span> <span class="pre">struct</span> <span class="pre">bt_conn_auth_cb</span> <span class="pre">*cb)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 注册认证回调函数
* @param[in] cb 回调函数指针
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_conn_auth_passkey_entry(struct</span> <span class="pre">bt_conn</span> <span class="pre">*conn,</span> <span class="pre">unsigned</span> <span class="pre">int</span> <span class="pre">passkey)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 用密钥回复对方
* @param[in] conn 连接对象指针
* @param[in] passkey 输入的密钥
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_conn_auth_cancel(struct</span> <span class="pre">bt_conn</span> <span class="pre">*conn)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 取消认证过程
* @param[in] conn 连接对象指针
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_conn_auth_passkey_confirm(struct</span> <span class="pre">bt_conn</span> <span class="pre">*conn)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 如果密码匹配,回复对方
* @param[in] conn 连接对象的指针
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_conn_auth_pincode_entry(struct</span> <span class="pre">bt_conn</span> <span class="pre">*conn,</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*pin)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 用PIN码进行回复对方
* @param[in] conn 连接对象的指针
* @param[in] pin PIN码的指针
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_le_read_rssi(u16_t</span> <span class="pre">handle,int8_t</span> <span class="pre">*rssi)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 读取对方RSSI值
* @param[in] handle连接的句柄值
* @param[in] rssi rssi的指针
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_get_local_address(bt_addr_le_t</span> <span class="pre">*adv_addr)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 读取本机的地址
* @param[in] adv_addr 指向地址的指针
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">bt_set_tx_pwr(int8_t</span> <span class="pre">power)</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>/**
* function 设置本机发射功率
* @param[in] power 功率值
* @return 0:成功,!=0:失败
*/
</pre></div>
</div>
</div>
<div class="section" id="id2">
<h2>数据结构参考<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<p><code class="docutils literal notranslate"><span class="pre">bt_le_adv_param</span></code>数据结构:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cm">/** LE Advertising Parameters. */</span>
<span class="k">struct</span> <span class="nc">bt_le_adv_param</span> <span class="p">{</span>
<span class="cm">/** Local identity */</span>
<span class="n">u8_t</span> <span class="n">id</span><span class="p">;</span>
<span class="cm">/** Bit-field of advertising options */</span>
<span class="n">u8_t</span> <span class="n">options</span><span class="p">;</span>
<span class="cm">/** Minimum Advertising Interval (N * 0.625) */</span>
<span class="n">u16_t</span> <span class="n">interval_min</span><span class="p">;</span>
<span class="cm">/** Maximum Advertising Interval (N * 0.625) */</span>
<span class="n">u16_t</span> <span class="n">interval_max</span><span class="p">;</span>
<span class="cp">#if defined(CONFIG_BT_STACK_PTS)</span>
<span class="n">u8_t</span> <span class="n">addr_type</span><span class="p">;</span>
<span class="cp">#endif</span>
<span class="p">};</span>
</pre></div>
</div>
<p>此数据结构用来配置广播参数包括本地识别id、广播选项位域、广播间隙等其中广播选项位域有如下枚举类型参数可选:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">enum</span> <span class="p">{</span>
<span class="cm">/** Convenience value when no options are specified. */</span>
<span class="n">BT_LE_ADV_OPT_NONE</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="cm">/** Advertise as connectable. Type of advertising is determined by</span>
<span class="cm"> * providing SCAN_RSP data and/or enabling local privacy support.</span>
<span class="cm"> */</span>
<span class="n">BT_LE_ADV_OPT_CONNECTABLE</span> <span class="o">=</span> <span class="n">BIT</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span>
<span class="cm">/** Don&#39;t try to resume connectable advertising after a connection.</span>
<span class="cm"> * This option is only meaningful when used together with</span>
<span class="cm"> * BT_LE_ADV_OPT_CONNECTABLE. If set the advertising will be stopped</span>
<span class="cm"> * when bt_le_adv_stop() is called or when an incoming (slave)</span>
<span class="cm"> * connection happens. If this option is not set the stack will</span>
<span class="cm"> * take care of keeping advertising enabled even as connections</span>
<span class="cm"> * occur.</span>
<span class="cm"> */</span>
<span class="n">BT_LE_ADV_OPT_ONE_TIME</span> <span class="o">=</span> <span class="n">BIT</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span>
<span class="cm">/** Advertise using the identity address as the own address.</span>
<span class="cm"> * @warning This will compromise the privacy of the device, so care</span>
<span class="cm"> * must be taken when using this option.</span>
<span class="cm"> */</span>
<span class="n">BT_LE_ADV_OPT_USE_IDENTITY</span> <span class="o">=</span> <span class="n">BIT</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span>
<span class="cm">/** Advertise using GAP device name */</span>
<span class="n">BT_LE_ADV_OPT_USE_NAME</span> <span class="o">=</span> <span class="n">BIT</span><span class="p">(</span><span class="mi">3</span><span class="p">),</span>
<span class="cm">/** Use low duty directed advertising mode, otherwise high duty mode</span>
<span class="cm"> * will be used. This option is only effective when used with</span>
<span class="cm"> * bt_conn_create_slave_le().</span>
<span class="cm"> */</span>
<span class="n">BT_LE_ADV_OPT_DIR_MODE_LOW_DUTY</span> <span class="o">=</span> <span class="n">BIT</span><span class="p">(</span><span class="mi">4</span><span class="p">),</span>
<span class="cm">/** Enable use of Resolvable Private Address (RPA) as the target address</span>
<span class="cm"> * in directed advertisements when CONFIG_BT_PRIVACY is not enabled.</span>
<span class="cm"> * This is required if the remote device is privacy-enabled and</span>
<span class="cm"> * supports address resolution of the target address in directed</span>
<span class="cm"> * advertisement.</span>
<span class="cm"> * It is the responsibility of the application to check that the remote</span>
<span class="cm"> * device supports address resolution of directed advertisements by</span>
<span class="cm"> * reading its Central Address Resolution characteristic.</span>
<span class="cm"> */</span>
<span class="n">BT_LE_ADV_OPT_DIR_ADDR_RPA</span> <span class="o">=</span> <span class="n">BIT</span><span class="p">(</span><span class="mi">5</span><span class="p">),</span>
<span class="cm">/** Use whitelist to filter devices that can request scan response</span>
<span class="cm"> * data.</span>
<span class="cm"> */</span>
<span class="n">BT_LE_ADV_OPT_FILTER_SCAN_REQ</span> <span class="o">=</span> <span class="n">BIT</span><span class="p">(</span><span class="mi">6</span><span class="p">),</span>
<span class="cm">/** Use whitelist to filter devices that can connect. */</span>
<span class="n">BT_LE_ADV_OPT_FILTER_CONN</span> <span class="o">=</span> <span class="n">BIT</span><span class="p">(</span><span class="mi">7</span><span class="p">),</span>
<span class="p">};</span>
</pre></div>
</div>
<p>如果需要发送一个广播包,配置可以如下:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">param</span><span class="p">.</span><span class="n">id</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">param</span><span class="p">.</span><span class="n">options</span> <span class="o">=</span> <span class="p">(</span><span class="n">BT_LE_ADV_OPT_CONNECTABLE</span> <span class="o">|</span> <span class="n">BT_LE_ADV_OPT_USE_NAME</span> <span class="o">|</span> <span class="n">BT_LE_ADV_OPT_ONE_TIME</span><span class="p">);</span>
<span class="n">param</span><span class="p">.</span><span class="n">interval_min</span> <span class="o">=</span> <span class="mh">0x00a0</span><span class="p">;</span>
<span class="n">param</span><span class="p">.</span><span class="n">interval_max</span> <span class="o">=</span> <span class="mh">0x00f0</span><span class="p">;</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">bt_data</span></code>数据结构:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="nc">bt_data</span> <span class="p">{</span>
<span class="n">u8_t</span> <span class="n">type</span><span class="p">;</span>
<span class="n">u8_t</span> <span class="n">data_len</span><span class="p">;</span>
<span class="k">const</span> <span class="n">u8_t</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span>
<span class="p">};</span>
</pre></div>
</div>
<p>此数据结构用来填充广播包中的数据,具体的数据包类型可以参考如下:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">Service</span> <span class="n">UUID</span>
<span class="n">Local</span> <span class="n">Name</span>
<span class="n">Flags</span>
<span class="n">Manufacturer</span> <span class="n">Specific</span> <span class="n">Data</span>
<span class="n">TX</span> <span class="n">Power</span> <span class="n">Level</span>
<span class="n">Secure</span> <span class="n">Simple</span> <span class="n">Pairing</span> <span class="n">OOB</span>
<span class="n">Security</span> <span class="n">Manager</span> <span class="n">OOB</span>
<span class="n">Security</span> <span class="n">Manager</span> <span class="n">TK</span> <span class="n">Value</span>
<span class="n">Slave</span> <span class="n">Connection</span> <span class="n">Interval</span> <span class="n">Range</span>
<span class="n">Service</span> <span class="n">Solicitation</span>
<span class="n">Service</span> <span class="n">Data</span>
<span class="n">Appearance</span>
<span class="n">Public</span> <span class="n">Target</span> <span class="n">Address</span>
<span class="n">Random</span> <span class="n">Target</span> <span class="n">Address</span>
<span class="n">Advertising</span> <span class="n">Interval</span>
<span class="n">LE</span> <span class="n">Bluetooth</span> <span class="n">Device</span> <span class="n">Address</span>
<span class="n">LE</span> <span class="n">Role</span>
<span class="n">Uniform</span> <span class="n">Resource</span> <span class="n">Identifier</span>
<span class="n">LE</span> <span class="n">Supported</span> <span class="n">Features</span>
<span class="n">Channel</span> <span class="n">Map</span> <span class="n">Update</span> <span class="n">Indication</span>
</pre></div>
</div>
<p>用该数据结构配置一个广播包数据,如下所示:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="nc">bt_data</span> <span class="n">ad_discov</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">BT_DATA_BYTES</span><span class="p">(</span><span class="n">BT_DATA_FLAGS</span><span class="p">,</span> <span class="p">(</span><span class="n">BT_LE_AD_GENERAL</span> <span class="o">|</span> <span class="n">BT_LE_AD_NO_BREDR</span><span class="p">)),</span>
<span class="n">BT_DATA</span><span class="p">(</span><span class="n">BT_DATA_NAME_COMPLETE</span><span class="p">,</span> <span class="s">&quot;BL602-BLE-DEV&quot;</span><span class="p">,</span> <span class="mi">13</span><span class="p">),</span>
<span class="p">};</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">bt_le_scan_param</span></code>数据结构:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cm">/** LE scan parameters */</span>
<span class="k">struct</span> <span class="nc">bt_le_scan_param</span> <span class="p">{</span>
<span class="cm">/** Scan type (BT_LE_SCAN_TYPE_ACTIVE or BT_LE_SCAN_TYPE_PASSIVE) */</span>
<span class="n">u8_t</span> <span class="n">type</span><span class="p">;</span>
<span class="cm">/** Bit-field of scanning filter options. */</span>
<span class="n">u8_t</span> <span class="n">filter_dup</span><span class="p">;</span>
<span class="cm">/** Scan interval (N * 0.625 ms) */</span>
<span class="n">u16_t</span> <span class="n">interval</span><span class="p">;</span>
<span class="cm">/** Scan window (N * 0.625 ms) */</span>
<span class="n">u16_t</span> <span class="n">window</span><span class="p">;</span>
<span class="p">};</span>
</pre></div>
</div>
<p>此数据结构用来填充扫描参数,
type为扫描类型有2种类型BT_LE_SCAN_TYPE_ACTIVE0x01、BT_LE_SCAN_TYPE_PASSIVE(0x00)。
filter_dup0x00,除定向广告外接受所有广播和扫描响应0x01,只接收白名单列表中设备的广播和扫描响应。
interval扫描间隙。
window扫描窗口。</p>
<p>如果开启扫描请求,可以配置如下:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">scan_param</span><span class="p">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">BT_LE_SCAN_TYPE_PASSIVE</span>
<span class="n">scan_param</span><span class="p">.</span><span class="n">filter_dup</span> <span class="o">=</span> <span class="mh">0x00</span>
<span class="n">interval</span><span class="o">=</span><span class="n">BT_GAP_SCAN_SLOW_INTERVAL_1</span>
<span class="n">window</span><span class="o">=</span><span class="n">BT_GAP_SCAN_SLOW_WINDOW_1</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">bt_le_conn_param</span></code>数据结构:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cm">/** Connection parameters for LE connections */</span>
<span class="k">struct</span> <span class="nc">bt_le_conn_param</span> <span class="p">{</span>
<span class="n">u16_t</span> <span class="n">interval_min</span><span class="p">;</span>
<span class="n">u16_t</span> <span class="n">interval_max</span><span class="p">;</span>
<span class="n">u16_t</span> <span class="n">latency</span><span class="p">;</span>
<span class="n">u16_t</span> <span class="n">timeout</span><span class="p">;</span>
<span class="cp">#if defined(CONFIG_BT_STACK_PTS)</span>
<span class="n">u8_t</span> <span class="n">own_address_type</span><span class="p">;</span>
<span class="cp">#endif</span>
<span class="p">};</span>
</pre></div>
</div>
<p>此数据结构用来填充连接参数interval_min连接间隙最少值0x0018interval_max连接间隙最大值(0x0028)
latency指定为连接事件数的连接允许的最大从延迟。
timeout连接超时时间。</p>
<p>配置该数据结构,如下:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">interval_min</span><span class="o">=</span><span class="n">BT_GAP_INIT_CONN_INT_MIN</span><span class="p">(</span><span class="mh">0x0018</span><span class="p">)</span>
<span class="n">interval_max</span><span class="o">=</span><span class="n">BT_GAP_INIT_CONN_INT_MAX</span><span class="p">(</span><span class="mh">0x0028</span><span class="p">)</span>
<span class="n">latency</span><span class="o">=</span><span class="mi">0</span>
<span class="n">timeout</span><span class="o">=</span><span class="mi">400</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">bt_conn</span></code>数据结构:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="nc">bt_conn</span> <span class="p">{</span>
<span class="n">u16_t</span> <span class="n">handle</span><span class="p">;</span>
<span class="n">u8_t</span> <span class="n">type</span><span class="p">;</span>
<span class="n">u8_t</span> <span class="n">role</span><span class="p">;</span>
<span class="n">ATOMIC_DEFINE</span><span class="p">(</span><span class="n">flags</span><span class="p">,</span> <span class="n">BT_CONN_NUM_FLAGS</span><span class="p">);</span>
<span class="cm">/* Which local identity address this connection uses */</span>
<span class="n">u8_t</span> <span class="n">id</span><span class="p">;</span>
<span class="cp">#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR)</span>
<span class="n">bt_security_t</span> <span class="n">sec_level</span><span class="p">;</span>
<span class="n">bt_security_t</span> <span class="n">required_sec_level</span><span class="p">;</span>
<span class="n">u8_t</span> <span class="n">encrypt</span><span class="p">;</span>
<span class="cp">#endif </span><span class="cm">/* CONFIG_BT_SMP || CONFIG_BT_BREDR */</span><span class="cp"></span>
<span class="cm">/* Connection error or reason for disconnect */</span>
<span class="n">u8_t</span> <span class="n">err</span><span class="p">;</span>
<span class="n">bt_conn_state_t</span> <span class="n">state</span><span class="p">;</span>
<span class="n">u16_t</span> <span class="n">rx_len</span><span class="p">;</span>
<span class="k">struct</span> <span class="nc">net_buf</span> <span class="o">*</span><span class="n">rx</span><span class="p">;</span>
<span class="cm">/* Sent but not acknowledged TX packets with a callback */</span>
<span class="n">sys_slist_t</span> <span class="n">tx_pending</span><span class="p">;</span>
<span class="cm">/* Sent but not acknowledged TX packets without a callback before</span>
<span class="cm"> * the next packet (if any) in tx_pending.</span>
<span class="cm"> */</span>
<span class="n">u32_t</span> <span class="n">pending_no_cb</span><span class="p">;</span>
<span class="cm">/* Completed TX for which we need to call the callback */</span>
<span class="n">sys_slist_t</span> <span class="n">tx_complete</span><span class="p">;</span>
<span class="k">struct</span> <span class="nc">k_work</span> <span class="n">tx_complete_work</span><span class="p">;</span>
<span class="cm">/* Queue for outgoing ACL data */</span>
<span class="k">struct</span> <span class="nc">k_fifo</span> <span class="n">tx_queue</span><span class="p">;</span>
<span class="cm">/* Active L2CAP channels */</span>
<span class="n">sys_slist_t</span> <span class="n">channels</span><span class="p">;</span>
<span class="n">atomic_t</span> <span class="n">ref</span><span class="p">;</span>
<span class="cm">/* Delayed work for connection update and other deferred tasks */</span>
<span class="k">struct</span> <span class="nc">k_delayed_work</span> <span class="n">update_work</span><span class="p">;</span>
<span class="k">union</span> <span class="p">{</span>
<span class="k">struct</span> <span class="nc">bt_conn_le</span> <span class="n">le</span><span class="p">;</span>
<span class="cp">#if defined(CONFIG_BT_BREDR)</span>
<span class="k">struct</span> <span class="nc">bt_conn_br</span> <span class="n">br</span><span class="p">;</span>
<span class="k">struct</span> <span class="nc">bt_conn_sco</span> <span class="n">sco</span><span class="p">;</span>
<span class="cp">#endif</span>
<span class="p">};</span>
<span class="cp">#if defined(CONFIG_BT_REMOTE_VERSION)</span>
<span class="k">struct</span> <span class="nc">bt_conn_rv</span> <span class="p">{</span>
<span class="n">u8_t</span> <span class="n">version</span><span class="p">;</span>
<span class="n">u16_t</span> <span class="n">manufacturer</span><span class="p">;</span>
<span class="n">u16_t</span> <span class="n">subversion</span><span class="p">;</span>
<span class="p">}</span> <span class="n">rv</span><span class="p">;</span>
<span class="cp">#endif</span>
<span class="p">};</span>
</pre></div>
</div>
<p>此数据结构为当前连接数据结构其中包括BLE蓝牙连接相关的参数连接成功后该数据结构可以被用户调用。</p>
</div>
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>
&#169; 版权所有 2021, BouffaloLab Co., Ltd.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View file

@ -1,307 +0,0 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2. 时钟树 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="3. GPIO 设备" href="api_gpio.html" />
<link rel="prev" title="1. API 分层模型" href="api_structure.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
</a>
<div class="version">
0.2
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">2. 时钟树</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id2">2.1. 简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">2.2. 时钟频率获取接口</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#system-clock-get">2.2.1. <strong>system_clock_get</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#peripheral-clock-get">2.2.2. <strong>peripheral_clock_get</strong></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dac.html">10. DAC 设备</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">BL_MCU_SDK 开发指南</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">2. </span>时钟树</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/api_reference/api_clock.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="id1">
<h1><span class="section-number">2. </span>时钟树<a class="headerlink" href="#id1" title="永久链接至标题"></a></h1>
<div class="section" id="id2">
<h2><span class="section-number">2.1. </span>简介<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<p>博流系列芯片拥有丰富的时钟源选择,为方便用户配置,提供了时钟树配置表,不需要用户手动调用时钟设置接口,用户只需要关心最终的系统时钟和外设时钟频率即可。时钟配置表位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx_board</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">xxx_clock_config.h</span></code> 文件。</p>
</div>
<div class="section" id="id3">
<h2><span class="section-number">2.2. </span>时钟频率获取接口<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<div class="section" id="system-clock-get">
<h3><span class="section-number">2.2.1. </span><strong>system_clock_get</strong><a class="headerlink" href="#system-clock-get" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">system_clock_get</span></code> 用来获取系统时钟频率。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">uint32_t</span> <span class="nf">system_clock_get</span><span class="p">(</span><span class="k">enum</span> <span class="n">system_clock_type</span> <span class="n">type</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>type 获取的系统时钟频率类型</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">type</span></code> 提供以下几种类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">enum</span> <span class="n">system_clock_type</span>
<span class="p">{</span>
<span class="n">SYSTEM_CLOCK_ROOT_CLOCK</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">SYSTEM_CLOCK_FCLK</span><span class="p">,</span>
<span class="n">SYSTEM_CLOCK_BCLK</span><span class="p">,</span>
<span class="n">SYSTEM_CLOCK_XCLK</span><span class="p">,</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
<div class="section" id="peripheral-clock-get">
<h3><span class="section-number">2.2.2. </span><strong>peripheral_clock_get</strong><a class="headerlink" href="#peripheral-clock-get" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">peripheral_clock_get</span></code> 用来获取外设时钟频率。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">uint32_t</span> <span class="nf">peripheral_clock_get</span><span class="p">(</span><span class="k">enum</span> <span class="n">peripheral_clock_type</span> <span class="n">type</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>type 获取的外设时钟频率类型</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">type</span></code> 提供以下几种类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">enum</span> <span class="n">peripheral_clock_type</span>
<span class="p">{</span>
<span class="n">PERIPHERAL_CLOCK_UART</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">PERIPHERAL_CLOCK_SPI</span><span class="p">,</span>
<span class="n">PERIPHERAL_CLOCK_I2C</span><span class="p">,</span>
<span class="n">PERIPHERAL_CLOCK_ADC</span><span class="p">,</span>
<span class="n">PERIPHERAL_CLOCK_DAC</span><span class="p">,</span>
<span class="n">PERIPHERAL_CLOCK_I2S</span><span class="p">,</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_gpio.html" class="btn btn-neutral float-right" title="3. GPIO 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_structure.html" class="btn btn-neutral float-left" title="1. API 分层模型" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; 版权所有 2021, BouffaloLab Co., Ltd.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View file

@ -1,268 +0,0 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>10. DAC 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="1. GPIO 示例" href="../samples/basic%20samples/gpio/index.html" />
<link rel="prev" title="9. ADC 设备" href="api_adc.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
</a>
<div class="version">
0.2
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">10. DAC 设备</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">10.1. 简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">10.2. DAC 设备结构体定义</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">10.3. DAC 设备参数配置表</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">10.4. DAC 设备接口</a></li>
</ul>
</li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">BL_MCU_SDK 开发指南</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">10. </span>DAC 设备</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/api_reference/api_dac.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="dac">
<h1><span class="section-number">10. </span>DAC 设备<a class="headerlink" href="#dac" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2><span class="section-number">10.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
</div>
<div class="section" id="id2">
<h2><span class="section-number">10.2. </span>DAC 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
</div>
<div class="section" id="id3">
<h2><span class="section-number">10.3. </span>DAC 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
</div>
<div class="section" id="id4">
<h2><span class="section-number">10.4. </span>DAC 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../samples/basic%20samples/gpio/index.html" class="btn btn-neutral float-right" title="1. GPIO 示例" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_adc.html" class="btn btn-neutral float-left" title="9. ADC 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; 版权所有 2021, BouffaloLab Co., Ltd.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>1. API 分层模型 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>1. API 概述 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -39,7 +39,7 @@
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="2. 时钟树" href="api_clock.html" />
<link rel="next" title="2. Board 配置系统" href="board.html" />
<link rel="prev" title="5. 硬件连接指南" href="../get_started/connecting_hardware.html" />
</head>
@ -64,7 +64,7 @@
<div class="version">
0.2
0.3
</div>
@ -99,7 +99,7 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">1. API 分层模型</a><ul>
<li class="toctree-l1 current"><a class="current reference internal" href="#">1. API 概述</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">1.1. 简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">1.2. 设备驱动管理层实现</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">1.3. 设备驱动管理层标准接口</a><ul>
@ -117,15 +117,11 @@
<li class="toctree-l2"><a class="reference internal" href="#id4">1.4. 外设驱动适配层实现</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -140,11 +136,12 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
@ -193,13 +190,13 @@
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">1. </span>API 分层模型</li>
<li><span class="section-number">1. </span>API 概述</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/api_reference/api_structure.rst.txt" rel="nofollow"> View page source</a>
<a href="../_sources/api_reference/api_overview.rst.txt" rel="nofollow"> View page source</a>
</li>
@ -213,27 +210,32 @@
<div itemprop="articleBody">
<div class="section" id="api">
<h1><span class="section-number">1. </span>API 分层模型<a class="headerlink" href="#api" title="永久链接至标题"></a></h1>
<h1><span class="section-number">1. </span>API 概述<a class="headerlink" href="#api" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2><span class="section-number">1.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>为了不影响用户应用层代码因为芯片驱动的不同而频繁修改,<strong>bl_mcu_sdk</strong> 的外设 API 采用了 HAL 层的思想,屏蔽了底层硬件的实现。而 HAL 层又分为两大类:</p>
<p><strong>bl_mcu_sdk</strong> 代码层次结构主要分为以下几层</p>
<ul class="simple">
<li><p>设备驱动管理层:提供一套标准的接口,具体实现由外设驱动适配层实现。</p></li>
<li><p>外设驱动适配层:实现设备驱动管理层的标准接口,并且拓展自己的独特的接口。</p></li>
<li><p>应用层:由用户自己编写的代码</p></li>
<li><p>组件层:开源的一些组件,接口则是调用 HAL 层的接口,使用到无线功能则是调用 Wireless 层的接口</p></li>
<li><dl class="simple">
<dt>为适配不同 MCU 提供的 HAL 层和无线层,其中 HAL 层又分为两层</dt><dd><ul>
<li><p>设备驱动管理层:提供一套标准的接口,具体实现由外设驱动适配层实现</p></li>
<li><p>外设驱动适配层:实现设备驱动管理层的标准接口,并且拓展自己的独特的接口</p></li>
</ul>
</dd>
</dl>
</li>
<li><p>基于寄存器封装的标准驱动层</p></li>
<li><p>硬件层,也就是寄存器层</p></li>
</ul>
<p>整体的代码分层框架如图所示:</p>
<div class="figure align-default" id="id5">
<img alt="" src="../_images/sw_arch.png" />
<p class="caption"><span class="caption-text">code structure</span><a class="headerlink" href="#id5" title="永久链接至图片"></a></p>
</div>
<ul class="simple">
<li><p>应用层是用户自己编写的代码,接口则是调用 hal 层的接口。</p></li>
<li><p>HAL 层提供给应用层接口,底层调用 std 层,不同的芯片调用不同的 std 层。</p></li>
<li><p>STD 层则是对硬件寄存器进行简单封装,由外设驱动适配层进行调用。</p></li>
</ul>
</div>
<div class="section" id="id2">
<h2><span class="section-number">1.2. </span>设备驱动管理层实现<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<p>设备驱动管理层主要针对芯片外设实现,目的是不影响用户应用层代码因为芯片驱动的不同而频繁修改。</p>
<p>设备驱动管理层的实现采用了面向对象的思想,首先我们将外设看成是一个设备或者是文件,秉承 <strong>一切皆文件</strong> 的理念,而文件又都具有标准的调用接口:<code class="docutils literal notranslate"><span class="pre">open</span></code><code class="docutils literal notranslate"><span class="pre">close</span></code><code class="docutils literal notranslate"><span class="pre">ctrl</span></code><code class="docutils literal notranslate"><span class="pre">write</span></code><code class="docutils literal notranslate"><span class="pre">read</span></code><code class="docutils literal notranslate"><span class="pre">callback</span></code>不同文件类别不同比如串口设备、ADC设备、SPI设备并且打开的方式也不同比如轮询、中断、DMA由此我们可以构建出一个对象的基类父类</p>
<p><strong>基类</strong></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="nc">device</span>
@ -481,7 +483,7 @@
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_clock.html" class="btn btn-neutral float-right" title="2. 时钟树" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="board.html" class="btn btn-neutral float-right" title="2. Board 配置系统" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="../get_started/connecting_hardware.html" class="btn btn-neutral float-left" title="5. 硬件连接指南" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,379 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2. Board 配置系统 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="3. Peripheral" href="peripheral/index.html" />
<link rel="prev" title="1. API 概述" href="api_overview.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
</a>
<div class="version">
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="api_overview.html">1. API 概述</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">2. Board 配置系统</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">2.1. Board 配置系统的文件组成</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#board-c">2.1.1. <strong>board.c</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#blxxx-config-h">2.1.2. <strong>blxxx_config.h</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#clock-config-h">2.1.3. <strong>clock_config.h</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#peripheral-config-h">2.1.4. <strong>peripheral_config.h</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#pinmux-config-h">2.1.5. <strong>pinmux_config.h</strong></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#stm32cubemx">2.2. 与 STM32CUBEMX 配置工具的区别</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">BL_MCU_SDK 开发指南</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">2. </span>Board 配置系统</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/api_reference/board.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="board">
<h1><span class="section-number">2. </span>Board 配置系统<a class="headerlink" href="#board" title="永久链接至标题"></a></h1>
<p>为了践行 <strong>一切皆文件</strong> 的思想,我们针对嵌入式应用不同的硬件配置需求,提出了一套 Board 配置系统。 <strong>Board 配置系统</strong> 主要是用于嵌入式应用中的时钟、GPIO 、外设默认配置三个基本元素进行初始化的配置系统。</p>
<p><strong>Board 配置系统</strong> 包含三个配置文件,以及一个 <code class="docutils literal notranslate"><span class="pre">bl_config_wizard</span></code> 图形化配置软件</p>
<ul class="simple">
<li><p>clock_config.h 时钟配置头文件</p></li>
<li><p>peripheral_config.h 外设配置头文件</p></li>
<li><p>pinmux_config.h 引脚功能配置头文件</p></li>
<li><p>bl_config_wizard 图形化界面配置上述三类文件</p></li>
</ul>
<p>用户只需要修改三个配置文件,系统会自动初始化。从而无需在用户程序中,调用一系列的复杂冗长的初始化函数, Boufflao Lab 为方便用户快速简便的生成项目对应的 board 文件,提供了 <code class="docutils literal notranslate"><span class="pre">bl_config_wizard</span></code> 配置软件,但目前正处于开发阶段。</p>
<div class="figure align-default" id="id2">
<img alt="" src="../_images/config_wizard.png" />
<p class="caption"><span class="caption-text">bl_config_wizard 软件预览</span><a class="headerlink" href="#id2" title="永久链接至图片"></a></p>
</div>
<div class="section" id="id1">
<h2><span class="section-number">2.1. </span>Board 配置系统的文件组成<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>Board 系统主要针对不同的板子来使用,不同的板子创建不同的 board 文件,放在 <code class="docutils literal notranslate"><span class="pre">bsp/board</span></code> 目录下,并且一个 board 文件,在 <strong>引脚不冲突</strong> 的情况下,可以共享给不同的 demo 使用,无需再创建多个工程,减少工程文件大小。</p>
<div class="admonition error">
<p class="admonition-title">错误</p>
<p>如果引脚冲突,并且非要使用一个 board 文件,请自行修改引脚</p>
</div>
<div class="section" id="board-c">
<h3><span class="section-number">2.1.1. </span><strong>board.c</strong><a class="headerlink" href="#board-c" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">board.c</span></code> 主要对时钟、引脚进行初始化</p>
</div>
<div class="section" id="blxxx-config-h">
<h3><span class="section-number">2.1.2. </span><strong>blxxx_config.h</strong><a class="headerlink" href="#blxxx-config-h" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">blxxx_config.h</span></code> 主要是包含一些头文件,给 HAL 层驱动使用。</p>
<div class="admonition hint">
<p class="admonition-title">提示</p>
<p>以上两个文件无需用户更改,并且相同的 MCU 可以直接复制粘贴到自己的 board 目录使用</p>
</div>
</div>
<div class="section" id="clock-config-h">
<h3><span class="section-number">2.1.3. </span><strong>clock_config.h</strong><a class="headerlink" href="#clock-config-h" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">clock_config.h</span></code> 主要配置系统和外设的时钟源以及分频系统。</p>
</div>
<div class="section" id="peripheral-config-h">
<h3><span class="section-number">2.1.4. </span><strong>peripheral_config.h</strong><a class="headerlink" href="#peripheral-config-h" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 主要包含外设的使能以及参数的配置。</p>
<div class="admonition warning">
<p class="admonition-title">警告</p>
<p><code class="docutils literal notranslate"><span class="pre">#define</span> <span class="pre">BSP_USING_XXX</span></code> 开头的宏,用来开启外设的配置,如果没有使能宏,则无法使用该外设的所有函数</p>
</div>
<div class="admonition warning">
<p class="admonition-title">警告</p>
<p><code class="docutils literal notranslate"><span class="pre">XXX_CONFIG</span></code> 开头的宏,用来初始化外设的配置,后面调用 <code class="docutils literal notranslate"><span class="pre">device_open</span></code> 来使用该配置</p>
</div>
</div>
<div class="section" id="pinmux-config-h">
<h3><span class="section-number">2.1.5. </span><strong>pinmux_config.h</strong><a class="headerlink" href="#pinmux-config-h" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">pinmux_config.h</span></code> 主要配置外设的 GPIO 引脚功能。</p>
<div class="admonition warning">
<p class="admonition-title">警告</p>
<p>在 mcu sdk 中,所有 demo 共享这个文件,因此有些 demo 是不能使用的,需要频繁修改该文件的引脚功能配置。如果用户已经定好了引脚的分配,则不用频繁修改。</p>
</div>
</div>
</div>
<div class="section" id="stm32cubemx">
<h2><span class="section-number">2.2. </span>与 STM32CUBEMX 配置工具的区别<a class="headerlink" href="#stm32cubemx" title="永久链接至标题"></a></h2>
<p>STM32CUBEMX 也是一个配置时钟、外设和 GPIO 初始化的工具,最终生成一个完整的工程,初始化都放在 <code class="docutils literal notranslate"><span class="pre">main.c</span></code> 的最开始 GPIO 和外设初始化底层会调用到 <code class="docutils literal notranslate"><span class="pre">stm32xxx_hal_msp.c</span></code> 中。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/* MCU Configuration--------------------------------------------------------*/</span>
<span class="cm">/* Reset of all peripherals, Initializes the Flash interface and the Systick. */</span>
<span class="n">HAL_Init</span><span class="p">();</span>
<span class="cm">/* USER CODE BEGIN Init */</span>
<span class="cm">/* USER CODE END Init */</span>
<span class="cm">/* Configure the system clock */</span>
<span class="n">SystemClock_Config</span><span class="p">();</span>
<span class="cm">/* USER CODE BEGIN SysInit */</span>
<span class="cm">/* USER CODE END SysInit */</span>
<span class="cm">/* Initialize all configured peripherals */</span>
<span class="n">MX_GPIO_Init</span><span class="p">();</span>
<span class="n">MX_USART1_UART_Init</span><span class="p">();</span>
<span class="n">MX_QUADSPI_Init</span><span class="p">();</span>
</pre></div>
</div>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">HAL_UART_MspInit</span><span class="p">(</span><span class="n">UART_HandleTypeDef</span><span class="o">*</span> <span class="n">huart</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">GPIO_InitTypeDef</span> <span class="n">GPIO_InitStruct</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">};</span>
<span class="k">if</span><span class="p">(</span><span class="n">huart</span><span class="o">-&gt;</span><span class="n">Instance</span><span class="o">==</span><span class="n">UART5</span><span class="p">)</span>
<span class="p">{</span>
<span class="cm">/* USER CODE BEGIN UART5_MspInit 0 */</span>
<span class="cm">/* USER CODE END UART5_MspInit 0 */</span>
<span class="cm">/* Peripheral clock enable */</span>
<span class="n">__HAL_RCC_UART5_CLK_ENABLE</span><span class="p">();</span>
<span class="n">__HAL_RCC_GPIOB_CLK_ENABLE</span><span class="p">();</span>
<span class="cm">/**UART5 GPIO Configuration</span>
<span class="cm"> PB12 ------&gt; UART5_RX</span>
<span class="cm"> PB13 ------&gt; UART5_TX</span>
<span class="cm"> */</span>
<span class="n">GPIO_InitStruct</span><span class="p">.</span><span class="n">Pin</span> <span class="o">=</span> <span class="n">GPIO_PIN_12</span><span class="o">|</span><span class="n">GPIO_PIN_13</span><span class="p">;</span>
<span class="n">GPIO_InitStruct</span><span class="p">.</span><span class="n">Mode</span> <span class="o">=</span> <span class="n">GPIO_MODE_AF_PP</span><span class="p">;</span>
<span class="n">GPIO_InitStruct</span><span class="p">.</span><span class="n">Pull</span> <span class="o">=</span> <span class="n">GPIO_NOPULL</span><span class="p">;</span>
<span class="n">GPIO_InitStruct</span><span class="p">.</span><span class="n">Speed</span> <span class="o">=</span> <span class="n">GPIO_SPEED_FREQ_LOW</span><span class="p">;</span>
<span class="n">GPIO_InitStruct</span><span class="p">.</span><span class="n">Alternate</span> <span class="o">=</span> <span class="n">GPIO_AF14_UART5</span><span class="p">;</span>
<span class="n">HAL_GPIO_Init</span><span class="p">(</span><span class="n">GPIOB</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">GPIO_InitStruct</span><span class="p">);</span>
<span class="cm">/* UART5 interrupt Init */</span>
<span class="n">HAL_NVIC_SetPriority</span><span class="p">(</span><span class="n">UART5_IRQn</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
<span class="n">HAL_NVIC_EnableIRQ</span><span class="p">(</span><span class="n">UART5_IRQn</span><span class="p">);</span>
<span class="cm">/* USER CODE BEGIN UART5_MspInit 1 */</span>
<span class="cm">/* USER CODE END UART5_MspInit 1 */</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</div>
<div class="admonition hint">
<p class="admonition-title">提示</p>
<p>stm32 生成的工程都是对一个工程起作用,不能够同时编译多个工程。如果使用多个工程,就要生成多个上述两个文件。在使用多个工程时,会间接增加文件大小,增加重复文件。</p>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="peripheral/index.html" class="btn btn-neutral float-right" title="3. Peripheral" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_overview.html" class="btn btn-neutral float-left" title="1. API 概述" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; 版权所有 2021, BouffaloLab Co., Ltd.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View file

@ -7,12 +7,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>9. ADC 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>3.8. ADC 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
@ -24,23 +24,23 @@
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="10. DAC 设备" href="api_dac.html" />
<link rel="prev" title="8. SPI 设备" href="api_spi.html" />
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.9. DAC 设备" href="api_dac.html" />
<link rel="prev" title="3.7. SPI 设备" href="api_spi.html" />
</head>
<body class="wy-body-for-nav">
@ -54,7 +54,7 @@
<a href="../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
@ -64,14 +64,14 @@
<div class="version">
0.2
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
@ -91,57 +91,66 @@
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">9. ADC 设备</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">9.1. 简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">9.2. ADC 设备结构体定义</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">9.3. ADC 设备参数配置表</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">9.4. ADC 设备接口</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#adc-register">9.4.1. <strong>ADC_register</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-open">9.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-close">9.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-control">9.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-read">9.4.5. <strong>device_read</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-set-callback">9.4.6. <strong>device_set_callback</strong></a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">3. Peripheral</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="api_clock.html">3.1. 时钟树</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_gpio.html">3.2. GPIO 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_uart.html">3.3. UART 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.8. ADC 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.8.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.8.2. ADC 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.8.3. ADC 设备参数配置表</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.8.4. ADC 设备接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#adc-register">3.8.4.1. <strong>ADC_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-open">3.8.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-close">3.8.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-control">3.8.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-read">3.8.4.5. <strong>device_read</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-set-callback">3.8.4.6. <strong>device_set_callback</strong></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
@ -157,7 +166,7 @@
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">BL_MCU_SDK 开发指南</a>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
@ -188,15 +197,17 @@
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">9. </span>ADC 设备</li>
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.8. </span>ADC 设备</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/api_reference/api_adc.rst.txt" rel="nofollow"> View page source</a>
<a href="../../_sources/api_reference/peripheral/api_adc.rst.txt" rel="nofollow"> View page source</a>
</li>
@ -210,25 +221,25 @@
<div itemprop="articleBody">
<div class="section" id="adc">
<h1><span class="section-number">9. </span>ADC 设备<a class="headerlink" href="#adc" title="永久链接至标题"></a></h1>
<h1><span class="section-number">3.8. </span>ADC 设备<a class="headerlink" href="#adc" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2><span class="section-number">9.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.8.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>ADC (Analog-to-digital Converter) 是用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备,他可以将外围电路传感器产生的模拟信号转化为机器可识别的数字信号。
博流系列MCU中的ADC设备具有以下特性</p>
<ul class="simple">
<li><p>可以选择 12/14/16 bits转换结果输出</p></li>
<li><p>ADC最大工作时钟为2MHZ</p></li>
<li><p>支持2.0V,3.2V可选内部参考电压</p></li>
<li><p>可以选择 12/14/16 bits 转换结果输出</p></li>
<li><p>ADC最大工作时钟为 2MHZ</p></li>
<li><p>支持2.0V ,3.2V 可选内部参考电压</p></li>
<li><p>支持DMA将转换结果搬运到内存</p></li>
<li><p>支持单次单通道转换、连续单通道转换、单次多通道转换和连续多通道转换模式四种模式</p></li>
<li><p>支持单端与差分两种输入模式</p></li>
<li><p>12路外部模拟通道</p></li>
<li><p>2路DAC内部通道</p></li>
<li><p>1路VBAT/2通道</p></li>
<li><p>2路 DAC 内部通道</p></li>
<li><p>1路 VBAT /2通道</p></li>
</ul>
</div>
<div class="section" id="id2">
<h2><span class="section-number">9.2. </span>ADC 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.8.2. </span>ADC 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">adc_device</span> <span class="p">{</span>
<span class="k">struct</span> <span class="nc">device</span> <span class="n">parent</span><span class="p">;</span>
<span class="n">adc_clk_div_t</span> <span class="n">clk_div</span><span class="p">;</span>
@ -243,18 +254,18 @@
</div>
<ul class="simple">
<li><p>parent 继承父类属性</p></li>
<li><p>clk_div ADC模块时钟内部分频</p></li>
<li><p>vref 参考电压选择 2.0/3.2V可选</p></li>
<li><p>continuous_conv_mode 是否选择为连续模式若为连续模式则一次adc_start操作ADC连续工作直到adc_stop。否则每adc_start一次adc仅转换一次结果。</p></li>
<li><p>clk_div ADC 模块时钟内部分频</p></li>
<li><p>vref 参考电压选择 2.0/3.2V 可选</p></li>
<li><p>continuous_conv_mode 是否选择为连续模式,若为连续模式,则一次 adc_start 操作, ADC 连续工作,直到 adc_stop 。否则,每 adc_start 一次adc 仅转换一次结果。</p></li>
<li><p>differential_mode 选择是否为差分模式,若为差分模式,则可以测量负电压。</p></li>
<li><p>data_width 测量宽度选择ADC实际精度为12bits但是通过OSR多次取平均可以达到14bits/16bits的精度,注意,当选择更高的数据宽度后,频率会因为取平均而下降。详情可参考枚举信息。</p></li>
<li><p>fifo_threshold 此参数影响DMA搬运阈值以及ADC FIFO中断阈值</p></li>
<li><p>gain ADC对输入信号的增益选择</p></li>
<li><p>data_width 测量宽度选择ADC 实际精度为12 bits ,但是通过 OSR 多次取平均可以达到 14bits / 16bits 的精度,注意,当选择更高的数据宽度后,频率会因为取平均而下降。详情可参考枚举信息。</p></li>
<li><p>fifo_threshold 此参数影响 DMA 搬运阈值以及 ADC FIFO 中断阈值</p></li>
<li><p>gain ADC 对输入信号的增益选择</p></li>
<li><p>其他待补充</p></li>
</ul>
</div>
<div class="section" id="id3">
<h2><span class="section-number">9.3. </span>ADC 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.8.3. </span>ADC 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>每一个 ADC 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,变量定义位于 <code class="docutils literal notranslate"><span class="pre">hal_adc.c</span></code> 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_ADC0</span></code> 即生效,同时 <code class="docutils literal notranslate"><span class="pre">ADC</span></code> 设备就可以进行注册和使用了。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/*参数配置宏*/</span>
<span class="cp">#if defined(BSP_USING_ADC0)</span>
@ -286,11 +297,11 @@
</div>
</div>
<div class="section" id="id4">
<h2><span class="section-number">9.4. </span>ADC 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.8.4. </span>ADC 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<p>ADC 设备接口全部遵循标准设备驱动管理层提供的接口。</p>
<div class="section" id="adc-register">
<h3><span class="section-number">9.4.1. </span><strong>ADC_register</strong><a class="headerlink" href="#adc-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">adc_register</span></code> 用来注册一个 ADC 设备,在注册之前需要打开对应 ADC 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_ADC0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">ADC0</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">ADC0</span></code> 设备。</p>
<h3><span class="section-number">3.8.4.1. </span><strong>ADC_register</strong><a class="headerlink" href="#adc-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">adc_register</span></code> 用来注册一个 ADC 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 ADC 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_ADC0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">ADC0</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">ADC0</span></code> 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">ADC_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">ADC_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div>
</div>
@ -311,8 +322,8 @@
</div>
</div>
<div class="section" id="device-open">
<h3><span class="section-number">9.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于 ADC 设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。</p>
<h3><span class="section-number">3.8.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于 ADC 设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">adc_open</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span>
</pre></div>
</div>
@ -332,8 +343,8 @@
</div>
</div>
<div class="section" id="device-close">
<h3><span class="section-number">9.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。</p>
<h3><span class="section-number">3.8.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">adc_close</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span>
</pre></div>
</div>
@ -343,8 +354,8 @@
</ul>
</div>
<div class="section" id="device-control">
<h3><span class="section-number">9.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对 ADC 设备进行控制和参数的修改。</p>
<h3><span class="section-number">3.8.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对 ADC 设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">adc_control</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span>
</pre></div>
</div>
@ -368,8 +379,8 @@
<table class="docutils align-default">
<colgroup>
<col style="width: 37%" />
<col style="width: 24%" />
<col style="width: 39%" />
<col style="width: 23%" />
<col style="width: 40%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>cmd</p></th>
@ -380,39 +391,39 @@
<tbody>
<tr class="row-even"><td><p>DEVICE_CTRL_SET_INT</p></td>
<td><p>ADC_it_type</p></td>
<td><p>开启ADC设备中断</p></td>
<td><p>开启 ADC 设备中断</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_CLR_INT</p></td>
<td><p>ADC_it_type</p></td>
<td><p>关闭ADC设备中断</p></td>
<td><p>关闭 ADC 设备中断</p></td>
</tr>
<tr class="row-even"><td><p>DEVICE_CTRL_CONFIG</p></td>
<td><p>ADC_param_cfg_t*</p></td>
<td><p>修改ADC配置</p></td>
<td><p>修改 ADC 配置</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_ADC_CHANNEL_CONFIG</p></td>
<td><p>adc_channel_cfg_t*</p></td>
<td><p>配置ADC通道信息</p></td>
<td><p>配置 ADC 通道信息</p></td>
</tr>
<tr class="row-even"><td><p>DEVICE_CTRL_ATTACH_RX_DMA</p></td>
<td><p>struct device*</p></td>
<td><p>链接接收dma设备</p></td>
<td><p>链接接收 DMA 设备</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_ADC_CHANNEL_START</p></td>
<td><p>struct device*</p></td>
<td><p>开始/继续 ADC转换</p></td>
<td><p>开始/继续 ADC 转换</p></td>
</tr>
<tr class="row-even"><td><p>DEVICE_CTRL_ADC_CHANNEL_STOP</p></td>
<td><p>NULL</p></td>
<td><p>停止ADC转换</p></td>
<td><p>停止 ADC 转换</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_ADC_VBAT_ON</p></td>
<td><p>NULL</p></td>
<td><p>打开内部VDD测量电路</p></td>
<td><p>打开内部 VDD 测量电路</p></td>
</tr>
<tr class="row-even"><td><p>DEVICE_CTRL_ADC_VBAT_OFF</p></td>
<td><p>NULL</p></td>
<td><p>关闭内部VDD测量电路</p></td>
<td><p>关闭内部 VDD 测量电路</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_ADC_TSEN_ON</p></td>
<td><p>NULL</p></td>
@ -426,8 +437,8 @@
</table>
</div>
<div class="section" id="device-read">
<h3><span class="section-number">9.4.5. </span><strong>device_read</strong><a class="headerlink" href="#device-read" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_read</span></code> 用于 ADC 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。</p>
<h3><span class="section-number">3.8.4.5. </span><strong>device_read</strong><a class="headerlink" href="#device-read" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_read</span></code> 用于 ADC 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。实际调用 <code class="docutils literal notranslate"><span class="pre">adc_read</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_read</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span>
</pre></div>
</div>
@ -440,7 +451,7 @@
</ul>
</div>
<div class="section" id="device-set-callback">
<h3><span class="section-number">9.4.6. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.8.4.6. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 用于注册一个ADC阈值中断回调函数。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_set_callback</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">callback</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">event</span><span class="p">));</span>
</pre></div>
@ -477,8 +488,8 @@
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_dac.html" class="btn btn-neutral float-right" title="10. DAC 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_spi.html" class="btn btn-neutral float-left" title="8. SPI 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="api_dac.html" class="btn btn-neutral float-right" title="3.9. DAC 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_spi.html" class="btn btn-neutral float-left" title="3.7. SPI 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>

View file

@ -0,0 +1,318 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.1. 时钟树 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.2. GPIO 设备" href="api_gpio.html" />
<link rel="prev" title="3. Peripheral" href="index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
</a>
<div class="version">
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">3. Peripheral</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.1. 时钟树</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.1.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.1.2. 时钟频率获取接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#system-clock-get">3.1.2.1. <strong>system_clock_get</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#peripheral-clock-get">3.1.2.2. <strong>peripheral_clock_get</strong></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="api_gpio.html">3.2. GPIO 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_uart.html">3.3. UART 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.1. </span>时钟树</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/api_reference/peripheral/api_clock.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="id1">
<h1><span class="section-number">3.1. </span>时钟树<a class="headerlink" href="#id1" title="永久链接至标题"></a></h1>
<div class="section" id="id2">
<h2><span class="section-number">3.1.1. </span>简介<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<p>博流系列芯片拥有丰富的时钟源选择,为方便用户配置,提供了时钟树配置表,不需要用户手动调用时钟设置接口,用户只需要关心最终的系统时钟和外设时钟频率即可。时钟配置表位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx_board</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">xxx_clock_config.h</span></code> 文件。</p>
</div>
<div class="section" id="id3">
<h2><span class="section-number">3.1.2. </span>时钟频率获取接口<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<div class="section" id="system-clock-get">
<h3><span class="section-number">3.1.2.1. </span><strong>system_clock_get</strong><a class="headerlink" href="#system-clock-get" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">system_clock_get</span></code> 用来获取系统时钟频率。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">uint32_t</span> <span class="nf">system_clock_get</span><span class="p">(</span><span class="k">enum</span> <span class="n">system_clock_type</span> <span class="n">type</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>type 获取的系统时钟频率类型</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">type</span></code> 提供以下几种类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">enum</span> <span class="n">system_clock_type</span>
<span class="p">{</span>
<span class="n">SYSTEM_CLOCK_ROOT_CLOCK</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">SYSTEM_CLOCK_FCLK</span><span class="p">,</span>
<span class="n">SYSTEM_CLOCK_BCLK</span><span class="p">,</span>
<span class="n">SYSTEM_CLOCK_XCLK</span><span class="p">,</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
<div class="section" id="peripheral-clock-get">
<h3><span class="section-number">3.1.2.2. </span><strong>peripheral_clock_get</strong><a class="headerlink" href="#peripheral-clock-get" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">peripheral_clock_get</span></code> 用来获取外设时钟频率。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">uint32_t</span> <span class="nf">peripheral_clock_get</span><span class="p">(</span><span class="k">enum</span> <span class="n">peripheral_clock_type</span> <span class="n">type</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>type 获取的外设时钟频率类型</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">type</span></code> 提供以下几种类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">enum</span> <span class="n">peripheral_clock_type</span>
<span class="p">{</span>
<span class="n">PERIPHERAL_CLOCK_UART</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">PERIPHERAL_CLOCK_SPI</span><span class="p">,</span>
<span class="n">PERIPHERAL_CLOCK_I2C</span><span class="p">,</span>
<span class="n">PERIPHERAL_CLOCK_ADC</span><span class="p">,</span>
<span class="n">PERIPHERAL_CLOCK_DAC</span><span class="p">,</span>
<span class="n">PERIPHERAL_CLOCK_I2S</span><span class="p">,</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_gpio.html" class="btn btn-neutral float-right" title="3.2. GPIO 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="index.html" class="btn btn-neutral float-left" title="3. Peripheral" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; 版权所有 2021, BouffaloLab Co., Ltd.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View file

@ -0,0 +1,279 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.9. DAC 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.10. TIMER 设备" href="api_timer.html" />
<link rel="prev" title="3.8. ADC 设备" href="api_adc.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
</a>
<div class="version">
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">3. Peripheral</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="api_clock.html">3.1. 时钟树</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_gpio.html">3.2. GPIO 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_uart.html">3.3. UART 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.9. DAC 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.9.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.9.2. DAC 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.9.3. DAC 设备参数配置表</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.9.4. DAC 设备接口</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.9. </span>DAC 设备</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/api_reference/peripheral/api_dac.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="dac">
<h1><span class="section-number">3.9. </span>DAC 设备<a class="headerlink" href="#dac" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2><span class="section-number">3.9.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
</div>
<div class="section" id="id2">
<h2><span class="section-number">3.9.2. </span>DAC 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
</div>
<div class="section" id="id3">
<h2><span class="section-number">3.9.3. </span>DAC 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
</div>
<div class="section" id="id4">
<h2><span class="section-number">3.9.4. </span>DAC 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_timer.html" class="btn btn-neutral float-right" title="3.10. TIMER 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_adc.html" class="btn btn-neutral float-left" title="3.8. ADC 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; 版权所有 2021, BouffaloLab Co., Ltd.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View file

@ -7,12 +7,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>6. DMA 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>3.5. DMA 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
@ -24,23 +24,23 @@
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="7. I2C 设备" href="api_i2c.html" />
<link rel="prev" title="5. PWM 设备" href="api_pwm.html" />
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.6. I2C 设备" href="api_i2c.html" />
<link rel="prev" title="3.4. PWM 设备" href="api_pwm.html" />
</head>
<body class="wy-body-for-nav">
@ -54,7 +54,7 @@
<a href="../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
@ -64,14 +64,14 @@
<div class="version">
0.2
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
@ -91,61 +91,70 @@
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">6. DMA 设备</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">6.1. 简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">6.2. DMA 设备结构体定义</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">6.3. DMA 设备参数配置表</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">6.4. DMA 设备接口</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#dma-register">6.4.1. <strong>dma_register</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-open">6.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-close">6.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-control">6.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-set-callback">6.4.5. <strong>device_set_callback</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#dma-channel-start">6.4.6. <strong>dma_channel_start</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#dma-channel-stop">6.4.7. <strong>dma_channel_stop</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#dma-channel-update">6.4.8. <strong>dma_channel_update</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#dma-channel-check-busy">6.4.9. <strong>dma_channel_check_busy</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#dma-reload">6.4.10. <strong>dma_reload</strong></a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">3. Peripheral</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="api_clock.html">3.1. 时钟树</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_gpio.html">3.2. GPIO 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_uart.html">3.3. UART 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.5. DMA 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.5.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.5.2. DMA 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.5.3. DMA 设备参数配置表</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.5.4. DMA 设备接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#dma-register">3.5.4.1. <strong>dma_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-open">3.5.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-close">3.5.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-control">3.5.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-set-callback">3.5.4.5. <strong>device_set_callback</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#dma-channel-start">3.5.4.6. <strong>dma_channel_start</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#dma-channel-stop">3.5.4.7. <strong>dma_channel_stop</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#dma-channel-update">3.5.4.8. <strong>dma_channel_update</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#dma-channel-check-busy">3.5.4.9. <strong>dma_channel_check_busy</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#dma-reload">3.5.4.10. <strong>dma_reload</strong></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
@ -161,7 +170,7 @@
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">BL_MCU_SDK 开发指南</a>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
@ -192,15 +201,17 @@
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">6. </span>DMA 设备</li>
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.5. </span>DMA 设备</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/api_reference/api_dma.rst.txt" rel="nofollow"> View page source</a>
<a href="../../_sources/api_reference/peripheral/api_dma.rst.txt" rel="nofollow"> View page source</a>
</li>
@ -214,9 +225,9 @@
<div itemprop="articleBody">
<div class="section" id="dma">
<h1><span class="section-number">6. </span>DMA 设备<a class="headerlink" href="#dma" title="永久链接至标题"></a></h1>
<h1><span class="section-number">3.5. </span>DMA 设备<a class="headerlink" href="#dma" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2><span class="section-number">6.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.5.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>DMA(Direct Memory Access) 是一种内存存取技术,可以独立地直接读写系统内存,而不需处理器介入处理。在同等
程度的处理器负担下DMA 是一种快速的数据传送方式。博流系列 MCU 中 DMA 设备具有以下特性:</p>
<ul class="simple">
@ -226,7 +237,7 @@
</ul>
</div>
<div class="section" id="id2">
<h2><span class="section-number">6.2. </span>DMA 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.5.2. </span>DMA 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">dma_device</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="nc">device</span> <span class="n">parent</span><span class="p">;</span>
@ -348,7 +359,7 @@
</div>
</div>
<div class="section" id="id3">
<h2><span class="section-number">6.3. </span>DMA 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.5.3. </span>DMA 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>每一个 DMA 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,变量定义位于 <code class="docutils literal notranslate"><span class="pre">hal_dma.c</span></code> 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_DMA0_CH0</span></code> <code class="docutils literal notranslate"><span class="pre">DMA0_CH0_CONFIG</span></code> 即生效同时DMA 通道0设备就可以进行注册和使用了。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/*参数配置宏*/</span>
<span class="cp">#if defined(BSP_USING_DMA0_CH0)</span>
@ -404,11 +415,11 @@
</div>
</div>
<div class="section" id="id4">
<h2><span class="section-number">6.4. </span>DMA 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.5.4. </span>DMA 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<p>DMA 设备接口全部遵循标准设备驱动管理层提供的接口。并且为了方便用户调用,将某些标准接口使用宏来重定义。</p>
<div class="section" id="dma-register">
<h3><span class="section-number">6.4.1. </span><strong>dma_register</strong><a class="headerlink" href="#dma-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">dma_register</span></code> 用来注册一个 DMA 设备的一个通道,在注册之前需要打开对应 DMA 设备的通道宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_DMA_CH0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">DMA</span></code> 设备的 0 通道,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">DMA</span></code> 设备的 0 通道。</p>
<h3><span class="section-number">3.5.4.1. </span><strong>dma_register</strong><a class="headerlink" href="#dma-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">dma_register</span></code> 用来注册一个 DMA 设备的一个通道,注册该设备需要使用的标准接口,在注册之前需要打开对应 DMA 设备的通道宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_DMA_CH0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">DMA</span></code> 设备的 0 通道,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">DMA</span></code> 设备的 0 通道。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">dma_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">dma_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div>
</div>
@ -450,8 +461,8 @@
</div>
</div>
<div class="section" id="device-open">
<h3><span class="section-number">6.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。</p>
<h3><span class="section-number">3.5.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">dma_open</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span>
</pre></div>
</div>
@ -471,8 +482,8 @@
</div>
</div>
<div class="section" id="device-close">
<h3><span class="section-number">6.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。</p>
<h3><span class="section-number">3.5.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">dma_close</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span>
</pre></div>
</div>
@ -482,8 +493,8 @@
</ul>
</div>
<div class="section" id="device-control">
<h3><span class="section-number">6.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对设备进行控制和参数的修改。</p>
<h3><span class="section-number">3.5.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">dma_control</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span>
</pre></div>
</div>
@ -542,7 +553,7 @@
</table>
</div>
<div class="section" id="device-set-callback">
<h3><span class="section-number">6.4.5. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.5.4.5. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 用于注册一个DMA通道中断回调函数。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_set_callback</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">callback</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">event</span><span class="p">));</span>
</pre></div>
@ -569,7 +580,7 @@
</div>
</div>
<div class="section" id="dma-channel-start">
<h3><span class="section-number">6.4.6. </span><strong>dma_channel_start</strong><a class="headerlink" href="#dma-channel-start" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.5.4.6. </span><strong>dma_channel_start</strong><a class="headerlink" href="#dma-channel-start" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">dma_channel_start</span></code> 用于开启DMA通道。实际是调用 <code class="docutils literal notranslate"><span class="pre">device_control</span></code> ,其中 <code class="docutils literal notranslate"><span class="pre">cmd</span></code><code class="docutils literal notranslate"><span class="pre">DMA_CHANNEL_START</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="n">dma_channel_start</span><span class="p">(</span><span class="n">dev</span><span class="p">)</span>
</pre></div>
@ -579,7 +590,7 @@
</ul>
</div>
<div class="section" id="dma-channel-stop">
<h3><span class="section-number">6.4.7. </span><strong>dma_channel_stop</strong><a class="headerlink" href="#dma-channel-stop" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.5.4.7. </span><strong>dma_channel_stop</strong><a class="headerlink" href="#dma-channel-stop" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">dma_channel_stop</span></code> 用于关闭DMA通道。实际是调用 <code class="docutils literal notranslate"><span class="pre">device_control</span></code> ,其中 <code class="docutils literal notranslate"><span class="pre">cmd</span></code><code class="docutils literal notranslate"><span class="pre">DMA_CHANNEL_STOP</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="n">dma_channel_stop</span><span class="p">(</span><span class="n">dev</span><span class="p">)</span>
</pre></div>
@ -589,7 +600,7 @@
</ul>
</div>
<div class="section" id="dma-channel-update">
<h3><span class="section-number">6.4.8. </span><strong>dma_channel_update</strong><a class="headerlink" href="#dma-channel-update" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.5.4.8. </span><strong>dma_channel_update</strong><a class="headerlink" href="#dma-channel-update" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">dma_channel_update</span></code> 用于更新DMA配置。实际是调用 <code class="docutils literal notranslate"><span class="pre">device_control</span></code> ,其中 <code class="docutils literal notranslate"><span class="pre">cmd</span></code><code class="docutils literal notranslate"><span class="pre">DMA_CHANNEL_UPDATE</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="n">dma_channel_update</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span><span class="n">list</span><span class="p">)</span>
</pre></div>
@ -600,7 +611,7 @@
</ul>
</div>
<div class="section" id="dma-channel-check-busy">
<h3><span class="section-number">6.4.9. </span><strong>dma_channel_check_busy</strong><a class="headerlink" href="#dma-channel-check-busy" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.5.4.9. </span><strong>dma_channel_check_busy</strong><a class="headerlink" href="#dma-channel-check-busy" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">dma_channel_check_busy</span></code> 用于查询当前使用的DMA通道是否传输完成。实际是调用 <code class="docutils literal notranslate"><span class="pre">device_control</span></code> ,其中 <code class="docutils literal notranslate"><span class="pre">cmd</span></code><code class="docutils literal notranslate"><span class="pre">DMA_CHANNEL_GET_STATUS</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="n">dma_channel_check_busy</span><span class="p">(</span><span class="n">dev</span><span class="p">)</span>
</pre></div>
@ -611,7 +622,7 @@
</ul>
</div>
<div class="section" id="dma-reload">
<h3><span class="section-number">6.4.10. </span><strong>dma_reload</strong><a class="headerlink" href="#dma-reload" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.5.4.10. </span><strong>dma_reload</strong><a class="headerlink" href="#dma-reload" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">dma_reload</span></code> 用于更新DMA某个通道的配置相比于 <code class="docutils literal notranslate"><span class="pre">dma_channel_update</span></code> ,该函数无需用户传递很多参数只需要填入源地址和目标地址以及长度内部会自己计算后再进行配置。此函数调用后DMA通道是没有开启的需要手动调用 <code class="docutils literal notranslate"><span class="pre">dma_channel_start</span></code> 函数。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">dma_reload</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">src_addr</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">dst_addr</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">transfer_size</span><span class="p">);</span>
</pre></div>
@ -632,8 +643,8 @@
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_i2c.html" class="btn btn-neutral float-right" title="7. I2C 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_pwm.html" class="btn btn-neutral float-left" title="5. PWM 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="api_i2c.html" class="btn btn-neutral float-right" title="3.6. I2C 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_pwm.html" class="btn btn-neutral float-left" title="3.4. PWM 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>

View file

@ -7,12 +7,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3. GPIO 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>3.2. GPIO 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
@ -24,23 +24,23 @@
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="4. UART 设备" href="api_uart.html" />
<link rel="prev" title="2. 时钟树" href="api_clock.html" />
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.3. UART 设备" href="api_uart.html" />
<link rel="prev" title="3.1. 时钟树" href="api_clock.html" />
</head>
<body class="wy-body-for-nav">
@ -54,7 +54,7 @@
<a href="../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
@ -64,14 +64,14 @@
<div class="version">
0.2
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
@ -91,55 +91,64 @@
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">3. GPIO 设备</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">3.1. 简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">3.2. GPIO 设备接口</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#gpio-set-mode">3.2.1. <strong>gpio_set_mode</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#gpio-write">3.2.2. <strong>gpio_write</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#gpio-toggle">3.2.3. <strong>gpio_toggle</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#gpio-read">3.2.4. <strong>gpio_read</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#gpio-attach-irq">3.2.5. <strong>gpio_attach_irq</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#gpio-irq-enable">3.2.6. <strong>gpio_irq_enable</strong></a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">3. Peripheral</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="api_clock.html">3.1. 时钟树</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.2. GPIO 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.2.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.2.2. GPIO 设备接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#gpio-set-mode">3.2.2.1. <strong>gpio_set_mode</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#gpio-write">3.2.2.2. <strong>gpio_write</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#gpio-toggle">3.2.2.3. <strong>gpio_toggle</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#gpio-read">3.2.2.4. <strong>gpio_read</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#gpio-attach-irq">3.2.2.5. <strong>gpio_attach_irq</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#gpio-irq-enable">3.2.2.6. <strong>gpio_irq_enable</strong></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_uart.html">3.3. UART 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
@ -155,7 +164,7 @@
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">BL_MCU_SDK 开发指南</a>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
@ -186,15 +195,17 @@
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">3. </span>GPIO 设备</li>
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.2. </span>GPIO 设备</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/api_reference/api_gpio.rst.txt" rel="nofollow"> View page source</a>
<a href="../../_sources/api_reference/peripheral/api_gpio.rst.txt" rel="nofollow"> View page source</a>
</li>
@ -208,9 +219,9 @@
<div itemprop="articleBody">
<div class="section" id="gpio">
<h1><span class="section-number">3. </span>GPIO 设备<a class="headerlink" href="#gpio" title="永久链接至标题"></a></h1>
<h1><span class="section-number">3.2. </span>GPIO 设备<a class="headerlink" href="#gpio" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2><span class="section-number">3.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.2.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>GPIO 全称 General Purpose Input Output通用输入 / 输出),博流系列芯片的 GPIO 外设主要有以下功能。</p>
<ul class="simple">
<li><p>普通输入输出带上下拉</p></li>
@ -227,9 +238,9 @@
</ul>
</div>
<div class="section" id="id2">
<h2><span class="section-number">3.2. </span>GPIO 设备接口<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.2.2. </span>GPIO 设备接口<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="section" id="gpio-set-mode">
<h3><span class="section-number">3.2.1. </span><strong>gpio_set_mode</strong><a class="headerlink" href="#gpio-set-mode" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.2.2.1. </span><strong>gpio_set_mode</strong><a class="headerlink" href="#gpio-set-mode" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">gpio_set_mode</span></code> 用来配置 gpio 的模式。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">gpio_set_mode</span><span class="p">(</span><span class="kt">uint32_t</span> <span class="n">pin</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">mode</span><span class="p">);</span>
</pre></div>
@ -257,7 +268,7 @@
</div>
</div>
<div class="section" id="gpio-write">
<h3><span class="section-number">3.2.2. </span><strong>gpio_write</strong><a class="headerlink" href="#gpio-write" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.2.2.2. </span><strong>gpio_write</strong><a class="headerlink" href="#gpio-write" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">gpio_write</span></code> 设置引脚电平</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">gpio_write</span><span class="p">(</span><span class="kt">uint32_t</span> <span class="n">pin</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">value</span><span class="p">);</span>
</pre></div>
@ -268,7 +279,7 @@
</ul>
</div>
<div class="section" id="gpio-toggle">
<h3><span class="section-number">3.2.3. </span><strong>gpio_toggle</strong><a class="headerlink" href="#gpio-toggle" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.2.2.3. </span><strong>gpio_toggle</strong><a class="headerlink" href="#gpio-toggle" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">gpio_toggle</span></code> 翻转引脚电平</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">gpio_toggle</span><span class="p">(</span><span class="kt">uint32_t</span> <span class="n">pin</span><span class="p">);</span>
</pre></div>
@ -278,7 +289,7 @@
</ul>
</div>
<div class="section" id="gpio-read">
<h3><span class="section-number">3.2.4. </span><strong>gpio_read</strong><a class="headerlink" href="#gpio-read" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.2.2.4. </span><strong>gpio_read</strong><a class="headerlink" href="#gpio-read" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">gpio_read</span></code> 读取引脚电平</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">gpio_read</span><span class="p">(</span><span class="kt">uint32_t</span> <span class="n">pin</span><span class="p">);</span>
</pre></div>
@ -289,7 +300,7 @@
</ul>
</div>
<div class="section" id="gpio-attach-irq">
<h3><span class="section-number">3.2.5. </span><strong>gpio_attach_irq</strong><a class="headerlink" href="#gpio-attach-irq" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.2.2.5. </span><strong>gpio_attach_irq</strong><a class="headerlink" href="#gpio-attach-irq" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">gpio_attach_irq</span></code> 为中断引脚附加中断回调函数</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">gpio_attach_irq</span><span class="p">(</span><span class="kt">uint32_t</span> <span class="n">pin</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">cbfun</span><span class="p">)(</span><span class="kt">uint32_t</span> <span class="n">pin</span><span class="p">));</span>
</pre></div>
@ -300,7 +311,7 @@
</ul>
</div>
<div class="section" id="gpio-irq-enable">
<h3><span class="section-number">3.2.6. </span><strong>gpio_irq_enable</strong><a class="headerlink" href="#gpio-irq-enable" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.2.2.6. </span><strong>gpio_irq_enable</strong><a class="headerlink" href="#gpio-irq-enable" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">gpio_irq_enable</span></code> 开启gpio某个引脚的中断</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">gpio_irq_enable</span><span class="p">(</span><span class="kt">uint32_t</span> <span class="n">pin</span><span class="p">,</span><span class="kt">uint8_t</span> <span class="n">enabled</span><span class="p">);</span>
</pre></div>
@ -319,8 +330,8 @@
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_uart.html" class="btn btn-neutral float-right" title="4. UART 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_clock.html" class="btn btn-neutral float-left" title="2. 时钟树" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="api_uart.html" class="btn btn-neutral float-right" title="3.3. UART 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_clock.html" class="btn btn-neutral float-left" title="3.1. 时钟树" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>

View file

@ -7,12 +7,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>7. I2C 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>3.6. I2C 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
@ -24,23 +24,23 @@
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="8. SPI 设备" href="api_spi.html" />
<link rel="prev" title="6. DMA 设备" href="api_dma.html" />
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.7. SPI 设备" href="api_spi.html" />
<link rel="prev" title="3.5. DMA 设备" href="api_dma.html" />
</head>
<body class="wy-body-for-nav">
@ -54,7 +54,7 @@
<a href="../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
@ -64,14 +64,14 @@
<div class="version">
0.2
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
@ -91,54 +91,63 @@
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">7. I2C 设备</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">7.1. 简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">7.2. I2C 设备结构体定义</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">7.3. I2C 设备参数配置表</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">7.4. I2C 设备接口</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#i2c-register">7.4.1. <strong>i2c_register</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-open">7.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#i2c-transfer">7.4.3. <strong>i2c_transfer</strong></a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">3. Peripheral</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="api_clock.html">3.1. 时钟树</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_gpio.html">3.2. GPIO 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_uart.html">3.3. UART 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.6. I2C 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.6.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.6.2. I2C 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.6.3. I2C 设备参数配置表</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.6.4. I2C 设备接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#i2c-register">3.6.4.1. <strong>i2c_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-open">3.6.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#i2c-transfer">3.6.4.3. <strong>i2c_transfer</strong></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
@ -154,7 +163,7 @@
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">BL_MCU_SDK 开发指南</a>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
@ -185,15 +194,17 @@
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">7. </span>I2C 设备</li>
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.6. </span>I2C 设备</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/api_reference/api_i2c.rst.txt" rel="nofollow"> View page source</a>
<a href="../../_sources/api_reference/peripheral/api_i2c.rst.txt" rel="nofollow"> View page source</a>
</li>
@ -207,9 +218,9 @@
<div itemprop="articleBody">
<div class="section" id="i2c">
<h1><span class="section-number">7. </span>I2C 设备<a class="headerlink" href="#i2c" title="永久链接至标题"></a></h1>
<h1><span class="section-number">3.6. </span>I2C 设备<a class="headerlink" href="#i2c" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2><span class="section-number">7.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.6.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>I2C (Inter-Intergrated Circuit) 是一种串行通讯总线,使用多主从架构,用来连接低速外围装置。每个器件都有一个唯
一的地址识别,并且都可以作为一个发送器或接收器。每个连接到总线的器件都可以通过唯一的地址和一直存在的主、
从机关系用软件设置地址,主机可以作为主机发送器或主机接收器。如果有两个或多个主机同时初始化,数据传输可
@ -221,7 +232,7 @@
</ul>
</div>
<div class="section" id="id2">
<h2><span class="section-number">7.2. </span>I2C 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.6.2. </span>I2C 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">i2c_device</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="nc">device</span> <span class="n">parent</span><span class="p">;</span>
@ -240,7 +251,7 @@
</ul>
</div>
<div class="section" id="id3">
<h2><span class="section-number">7.3. </span>I2C 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.6.3. </span>I2C 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>每一个 I2C 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,变量定义位于 <code class="docutils literal notranslate"><span class="pre">hal_i2c.c</span></code> 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_I2C0</span></code> <code class="docutils literal notranslate"><span class="pre">I2C0_CONFIG</span></code> 即生效,同时 <code class="docutils literal notranslate"><span class="pre">I2C</span></code> 设备就可以进行注册和使用了。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/*参数配置宏*/</span>
<span class="cp">#if defined(BSP_USING_I2C0)</span>
@ -269,11 +280,11 @@
</div>
</div>
<div class="section" id="id4">
<h2><span class="section-number">7.4. </span>I2C 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.6.4. </span>I2C 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<p>I2C 设备标准接口当前仅使用 <code class="docutils literal notranslate"><span class="pre">device_open</span></code> , 并提供标准的数据收发接口。</p>
<div class="section" id="i2c-register">
<h3><span class="section-number">7.4.1. </span><strong>i2c_register</strong><a class="headerlink" href="#i2c-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">i2c_register</span></code> 用来注册一个 I2C 设备,在注册之前需要打开对应 I2C 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_I2C0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">I2C0</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">I2C0</span></code> 设备。</p>
<h3><span class="section-number">3.6.4.1. </span><strong>i2c_register</strong><a class="headerlink" href="#i2c-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">i2c_register</span></code> 用来注册一个 I2C 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 I2C 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_I2C0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">I2C0</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">I2C0</span></code> 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">i2c_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">i2c_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div>
</div>
@ -294,8 +305,8 @@
</div>
</div>
<div class="section" id="device-open">
<h3><span class="section-number">7.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。</p>
<h3><span class="section-number">3.6.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">i2c_open</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span>
</pre></div>
</div>
@ -315,7 +326,7 @@
</div>
</div>
<div class="section" id="i2c-transfer">
<h3><span class="section-number">7.4.3. </span><strong>i2c_transfer</strong><a class="headerlink" href="#i2c-transfer" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.6.4.3. </span><strong>i2c_transfer</strong><a class="headerlink" href="#i2c-transfer" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">i2c_transfer</span></code> 用于设备的数据传输,形参中 <code class="docutils literal notranslate"><span class="pre">msgs</span></code> 中的成员 <code class="docutils literal notranslate"><span class="pre">flags</span></code> 指示传输的方向是写还是读,并且指定寄存器地址长度是 0、1、2。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">i2c_transfer</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="n">i2c_msg_t</span> <span class="n">msgs</span><span class="p">[],</span> <span class="kt">uint32_t</span> <span class="n">num</span><span class="p">);</span>
</pre></div>
@ -365,8 +376,8 @@
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_spi.html" class="btn btn-neutral float-right" title="8. SPI 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_dma.html" class="btn btn-neutral float-left" title="6. DMA 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="api_spi.html" class="btn btn-neutral float-right" title="3.7. SPI 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_dma.html" class="btn btn-neutral float-left" title="3.5. DMA 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>

View file

@ -7,12 +7,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>5. PWM 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>3.4. PWM 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
@ -24,23 +24,23 @@
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="6. DMA 设备" href="api_dma.html" />
<link rel="prev" title="4. UART 设备" href="api_uart.html" />
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.5. DMA 设备" href="api_dma.html" />
<link rel="prev" title="3.3. UART 设备" href="api_uart.html" />
</head>
<body class="wy-body-for-nav">
@ -54,7 +54,7 @@
<a href="../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
@ -64,14 +64,14 @@
<div class="version">
0.2
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
@ -91,60 +91,69 @@
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">5. PWM 设备</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">5.1. 简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">5.2. PWM 设备结构体定义</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">5.3. PWM 设备参数配置表</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">5.4. PWM 设备接口</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#pwm-register">5.4.1. <strong>pwm_register</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-open">5.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-close">5.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-control">5.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-set-callback">5.4.5. <strong>device_set_callback</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#pwm-channel-start">5.4.6. <strong>pwm_channel_start</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#pwm-channel-stop">5.4.7. <strong>pwm_channel_stop</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#pwm-channel-update">5.4.8. <strong>pwm_channel_update</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#pwm-it-pulse-count-update">5.4.9. <strong>pwm_it_pulse_count_update</strong></a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">3. Peripheral</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="api_clock.html">3.1. 时钟树</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_gpio.html">3.2. GPIO 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_uart.html">3.3. UART 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.4. PWM 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.4.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.4.2. PWM 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.4.3. PWM 设备参数配置表</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.4.4. PWM 设备接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pwm-register">3.4.4.1. <strong>pwm_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-open">3.4.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-close">3.4.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-control">3.4.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-set-callback">3.4.4.5. <strong>device_set_callback</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#pwm-channel-start">3.4.4.6. <strong>pwm_channel_start</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#pwm-channel-stop">3.4.4.7. <strong>pwm_channel_stop</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#pwm-channel-update">3.4.4.8. <strong>pwm_channel_update</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#pwm-it-pulse-count-update">3.4.4.9. <strong>pwm_it_pulse_count_update</strong></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
@ -160,7 +169,7 @@
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">BL_MCU_SDK 开发指南</a>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
@ -191,15 +200,17 @@
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">5. </span>PWM 设备</li>
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.4. </span>PWM 设备</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/api_reference/api_pwm.rst.txt" rel="nofollow"> View page source</a>
<a href="../../_sources/api_reference/peripheral/api_pwm.rst.txt" rel="nofollow"> View page source</a>
</li>
@ -213,9 +224,9 @@
<div itemprop="articleBody">
<div class="section" id="pwm">
<h1><span class="section-number">5. </span>PWM 设备<a class="headerlink" href="#pwm" title="永久链接至标题"></a></h1>
<h1><span class="section-number">3.4. </span>PWM 设备<a class="headerlink" href="#pwm" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2><span class="section-number">5.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.4.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>脉冲宽度调制Pulse width modulation简称 PWM是一种用数字方式实现模拟电压控制的技术。它是通过对一系列脉冲的宽度进行调制等效出所需要的波形包含形状以及幅值对模拟信号电平进行数字编码也就是说通过调节占空比的变化来调节信号、能量等的变化占空比就是指在一个周期内信号处于高电平的时间占据整个信号周期的百分比例如方波的占空比就是50%。博流系列 MCU 中 DMA 设备具有以下特性:</p>
<ul class="simple">
<li><p>支持5通道 PWM 信号生成</p></li>
@ -224,7 +235,7 @@
</ul>
</div>
<div class="section" id="id2">
<h2><span class="section-number">5.2. </span>PWM 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.4.2. </span>PWM 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">pwm_device</span> <span class="p">{</span>
<span class="k">struct</span> <span class="nc">device</span> <span class="n">parent</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">ch</span><span class="p">;</span>
@ -256,7 +267,7 @@
</div>
</div>
<div class="section" id="id3">
<h2><span class="section-number">5.3. </span>PWM 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.4.3. </span>PWM 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>每一个 PWM 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,变量定义位于 <code class="docutils literal notranslate"><span class="pre">hal_pwm.c</span></code> 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_PWM_CH2</span></code> <code class="docutils literal notranslate"><span class="pre">PWM_CH2_CONFIG</span></code> 即生效,同时 <code class="docutils literal notranslate"><span class="pre">PWM</span></code> 设备的通道2就可以进行注册和使用了。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/*参数配置宏*/</span>
<span class="cp">#if defined(BSP_USING_PWM_CH2)</span>
@ -300,11 +311,11 @@
</div>
</div>
<div class="section" id="id4">
<h2><span class="section-number">5.4. </span>PWM 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.4.4. </span>PWM 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<p>PWM 设备接口全部遵循标准设备驱动管理层提供的接口。并且为了方便用户调用,将某些标准接口使用宏来重定义。</p>
<div class="section" id="pwm-register">
<h3><span class="section-number">5.4.1. </span><strong>pwm_register</strong><a class="headerlink" href="#pwm-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">pwm_register</span></code> 用来注册一个 PWM 设备的一个通道,在注册之前需要打开对应 PWM 设备某个通道的宏定义,例如定义 <code class="docutils literal notranslate"><span class="pre">BSP_USING_PWM_CH0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">PWM</span></code> 通道0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 PWM 设备。</p>
<h3><span class="section-number">3.4.4.1. </span><strong>pwm_register</strong><a class="headerlink" href="#pwm-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">pwm_register</span></code> 用来注册一个 PWM 设备的一个通道,注册该设备需要使用的标准接口,在注册之前需要打开对应 PWM 设备某个通道的宏定义,例如定义 <code class="docutils literal notranslate"><span class="pre">BSP_USING_PWM_CH0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">PWM</span></code> 通道0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 PWM 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">pwm_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">pwm_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div>
</div>
@ -337,8 +348,8 @@
</div>
</div>
<div class="section" id="device-open">
<h3><span class="section-number">5.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。</p>
<h3><span class="section-number">3.4.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">pwm_open</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span>
</pre></div>
</div>
@ -358,8 +369,8 @@
</div>
</div>
<div class="section" id="device-close">
<h3><span class="section-number">5.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。</p>
<h3><span class="section-number">3.4.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">pwm_close</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span>
</pre></div>
</div>
@ -369,8 +380,8 @@
</ul>
</div>
<div class="section" id="device-control">
<h3><span class="section-number">5.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对设备进行控制和参数的修改。</p>
<h3><span class="section-number">3.4.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">pwm_control</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span>
</pre></div>
</div>
@ -430,7 +441,7 @@
</table>
</div>
<div class="section" id="device-set-callback">
<h3><span class="section-number">5.4.5. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.4.4.5. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 用于注册一个PWM通道中断回调函数。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_set_callback</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">callback</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">event</span><span class="p">));</span>
</pre></div>
@ -457,7 +468,7 @@
</div>
</div>
<div class="section" id="pwm-channel-start">
<h3><span class="section-number">5.4.6. </span><strong>pwm_channel_start</strong><a class="headerlink" href="#pwm-channel-start" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.4.4.6. </span><strong>pwm_channel_start</strong><a class="headerlink" href="#pwm-channel-start" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">pwm_channel_start</span></code> 用于开启PWM通道。实际是调用 <code class="docutils literal notranslate"><span class="pre">device_control</span></code> ,其中 <code class="docutils literal notranslate"><span class="pre">cmd</span></code><code class="docutils literal notranslate"><span class="pre">DEVICE_CTRL_RESUME</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="n">pwm_channel_start</span><span class="p">(</span><span class="n">dev</span><span class="p">)</span>
</pre></div>
@ -467,7 +478,7 @@
</ul>
</div>
<div class="section" id="pwm-channel-stop">
<h3><span class="section-number">5.4.7. </span><strong>pwm_channel_stop</strong><a class="headerlink" href="#pwm-channel-stop" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.4.4.7. </span><strong>pwm_channel_stop</strong><a class="headerlink" href="#pwm-channel-stop" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">pwm_channel_stop</span></code> 用于关闭PWM通道。实际是调用 <code class="docutils literal notranslate"><span class="pre">device_control</span></code> ,其中 <code class="docutils literal notranslate"><span class="pre">cmd</span></code><code class="docutils literal notranslate"><span class="pre">DEVICE_CTRL_SUSPEND</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="n">pwm_channel_stop</span><span class="p">(</span><span class="n">dev</span><span class="p">)</span>
</pre></div>
@ -477,7 +488,7 @@
</ul>
</div>
<div class="section" id="pwm-channel-update">
<h3><span class="section-number">5.4.8. </span><strong>pwm_channel_update</strong><a class="headerlink" href="#pwm-channel-update" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.4.4.8. </span><strong>pwm_channel_update</strong><a class="headerlink" href="#pwm-channel-update" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">pwm_channel_update</span></code> 用于更新PWM通道的频率和占空比。实际是调用 <code class="docutils literal notranslate"><span class="pre">device_control</span></code> ,其中 <code class="docutils literal notranslate"><span class="pre">cmd</span></code><code class="docutils literal notranslate"><span class="pre">DEVICE_CTRL_CONFIG</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="n">pwm_channel_update</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span><span class="n">cfg</span><span class="p">)</span>
</pre></div>
@ -488,7 +499,7 @@
</ul>
</div>
<div class="section" id="pwm-it-pulse-count-update">
<h3><span class="section-number">5.4.9. </span><strong>pwm_it_pulse_count_update</strong><a class="headerlink" href="#pwm-it-pulse-count-update" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.4.4.9. </span><strong>pwm_it_pulse_count_update</strong><a class="headerlink" href="#pwm-it-pulse-count-update" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">pwm_it_pulse_count_update</span></code> 用于更新PWM通道的计数值需要先使能PWM中断才起作用当pwm计数达到设置的周期计数值则会产生中断。实际是调用 <code class="docutils literal notranslate"><span class="pre">device_control</span></code> ,其中 <code class="docutils literal notranslate"><span class="pre">cmd</span></code><code class="docutils literal notranslate"><span class="pre">DEIVCE_CTRL_PWM_IT_PULSE_COUNT_CONFIG</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="n">pwm_it_pulse_count_update</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span><span class="n">count</span><span class="p">)</span>
</pre></div>
@ -507,8 +518,8 @@
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_dma.html" class="btn btn-neutral float-right" title="6. DMA 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_uart.html" class="btn btn-neutral float-left" title="4. UART 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="api_dma.html" class="btn btn-neutral float-right" title="3.5. DMA 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_uart.html" class="btn btn-neutral float-left" title="3.3. UART 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>

View file

@ -7,12 +7,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>8. SPI 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>3.7. SPI 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
@ -24,23 +24,23 @@
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="9. ADC 设备" href="api_adc.html" />
<link rel="prev" title="7. I2C 设备" href="api_i2c.html" />
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.8. ADC 设备" href="api_adc.html" />
<link rel="prev" title="3.6. I2C 设备" href="api_i2c.html" />
</head>
<body class="wy-body-for-nav">
@ -54,7 +54,7 @@
<a href="../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
@ -64,14 +64,14 @@
<div class="version">
0.2
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
@ -91,61 +91,70 @@
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">8. SPI 设备</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">8.1. 简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">8.2. SPI 设备结构体定义</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">8.3. SPI 设备参数配置表</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">8.4. SPI 设备接口</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#spi-register">8.4.1. <strong>spi_register</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-open">8.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-close">8.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-control">8.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-write">8.4.5. <strong>device_write</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-read">8.4.6. <strong>device_read</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-set-callback">8.4.7. <strong>device_set_callback</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#spi-transmit">8.4.8. <strong>spi_transmit</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#spi-receive">8.4.9. <strong>spi_receive</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#spi-transmit-receive">8.4.10. <strong>spi_transmit_receive</strong></a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">3. Peripheral</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="api_clock.html">3.1. 时钟树</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_gpio.html">3.2. GPIO 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_uart.html">3.3. UART 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.7. SPI 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.7.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.7.2. SPI 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.7.3. SPI 设备参数配置表</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.7.4. SPI 设备接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#spi-register">3.7.4.1. <strong>spi_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-open">3.7.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-close">3.7.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-control">3.7.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-write">3.7.4.5. <strong>device_write</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-read">3.7.4.6. <strong>device_read</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-set-callback">3.7.4.7. <strong>device_set_callback</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#spi-transmit">3.7.4.8. <strong>spi_transmit</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#spi-receive">3.7.4.9. <strong>spi_receive</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#spi-transmit-receive">3.7.4.10. <strong>spi_transmit_receive</strong></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
@ -161,7 +170,7 @@
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">BL_MCU_SDK 开发指南</a>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
@ -192,15 +201,17 @@
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">8. </span>SPI 设备</li>
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.7. </span>SPI 设备</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/api_reference/api_spi.rst.txt" rel="nofollow"> View page source</a>
<a href="../../_sources/api_reference/peripheral/api_spi.rst.txt" rel="nofollow"> View page source</a>
</li>
@ -214,9 +225,9 @@
<div itemprop="articleBody">
<div class="section" id="spi">
<h1><span class="section-number">8. </span>SPI 设备<a class="headerlink" href="#spi" title="永久链接至标题"></a></h1>
<h1><span class="section-number">3.7. </span>SPI 设备<a class="headerlink" href="#spi" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2><span class="section-number">8.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.7.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>串行外设接口Serial Peripheral Interface Bus, SPI是一种用于短程通信的同步串行通信接口规范装置之间使用全
双工模式通信,是一个主机和一个或多个从机的主从模式。需要至少 4 根线,事实上 3 根也可以(单向传输时), 包括
SDI数据输入、SDO数据输出、SCLK时钟、CS片选。博流系列 MCU 中 SPI 设备具有以下特性:</p>
@ -233,7 +244,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</ul>
</div>
<div class="section" id="id2">
<h2><span class="section-number">8.2. </span>SPI 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.7.2. </span>SPI 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">spi_device</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="nc">device</span> <span class="n">parent</span><span class="p">;</span>
@ -294,7 +305,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div>
</div>
<div class="section" id="id3">
<h2><span class="section-number">8.3. </span>SPI 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.7.3. </span>SPI 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>每一个 SPI 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,变量定义位于 <code class="docutils literal notranslate"><span class="pre">hal_spi.c</span></code> 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_SPI0</span></code> <code class="docutils literal notranslate"><span class="pre">SPI0_CONFIG</span></code> 即生效,同时 <code class="docutils literal notranslate"><span class="pre">SPI0</span></code> 设备就可以进行注册和使用了。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/*参数配置宏*/</span>
<span class="cp">#if defined(BSP_USING_SPI0)</span>
@ -328,11 +339,11 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div>
</div>
<div class="section" id="id4">
<h2><span class="section-number">8.4. </span>SPI 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.7.4. </span>SPI 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<p>SPI 设备接口全部遵循标准设备驱动管理层提供的接口。</p>
<div class="section" id="spi-register">
<h3><span class="section-number">8.4.1. </span><strong>spi_register</strong><a class="headerlink" href="#spi-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">spi_register</span></code> 用来注册一个 SPI 设备,在注册之前需要打开对应 SPI 设备的宏定义,例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_SPI0</span></code> 方可使用 SPI0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 SPI 设备。</p>
<h3><span class="section-number">3.7.4.1. </span><strong>spi_register</strong><a class="headerlink" href="#spi-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">spi_register</span></code> 用来注册一个 SPI 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 SPI 设备的宏定义,例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_SPI0</span></code> 方可使用 SPI0 设备。注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 SPI 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">spi_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">spi_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div>
</div>
@ -353,8 +364,8 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div>
</div>
<div class="section" id="device-open">
<h3><span class="section-number">8.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。</p>
<h3><span class="section-number">3.7.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_open</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span>
</pre></div>
</div>
@ -374,8 +385,8 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div>
</div>
<div class="section" id="device-close">
<h3><span class="section-number">8.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。</p>
<h3><span class="section-number">3.7.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_close</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span>
</pre></div>
</div>
@ -385,8 +396,8 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</ul>
</div>
<div class="section" id="device-control">
<h3><span class="section-number">8.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对设备进行控制和参数的修改。</p>
<h3><span class="section-number">3.7.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_control</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span>
</pre></div>
</div>
@ -462,8 +473,8 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</table>
</div>
<div class="section" id="device-write">
<h3><span class="section-number">8.4.5. </span><strong>device_write</strong><a class="headerlink" href="#device-write" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_write</span></code> 用于 SPI 设备数据的发送发送方式根据打开方式可以是轮询、中断、dma。</p>
<h3><span class="section-number">3.7.4.5. </span><strong>device_write</strong><a class="headerlink" href="#device-write" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_write</span></code> 用于 SPI 设备数据的发送发送方式根据打开方式可以是轮询、中断、dma。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_write</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_write</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="k">const</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span>
</pre></div>
</div>
@ -476,8 +487,8 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</ul>
</div>
<div class="section" id="device-read">
<h3><span class="section-number">8.4.6. </span><strong>device_read</strong><a class="headerlink" href="#device-read" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_read</span></code> 用于 SPI 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。</p>
<h3><span class="section-number">3.7.4.6. </span><strong>device_read</strong><a class="headerlink" href="#device-read" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_read</span></code> 用于 SPI 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。实际调用 <code class="docutils literal notranslate"><span class="pre">spi_read</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_read</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span>
</pre></div>
</div>
@ -490,7 +501,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</ul>
</div>
<div class="section" id="device-set-callback">
<h3><span class="section-number">8.4.7. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.7.4.7. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 用于注册一个 SPI 设备中断回调函数。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_set_callback</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">callback</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">event</span><span class="p">));</span>
</pre></div>
@ -519,7 +530,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div>
</div>
<div class="section" id="spi-transmit">
<h3><span class="section-number">8.4.8. </span><strong>spi_transmit</strong><a class="headerlink" href="#spi-transmit" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.7.4.8. </span><strong>spi_transmit</strong><a class="headerlink" href="#spi-transmit" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">spi_transmit</span></code> 用于 SPI 设备数据的发送。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">spi_transmit</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">type</span><span class="p">);</span>
</pre></div>
@ -539,7 +550,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div>
</div>
<div class="section" id="spi-receive">
<h3><span class="section-number">8.4.9. </span><strong>spi_receive</strong><a class="headerlink" href="#spi-receive" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.7.4.9. </span><strong>spi_receive</strong><a class="headerlink" href="#spi-receive" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">spi_receive</span></code> 用于 SPI 设备数据的接收。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">spi_receive</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">type</span><span class="p">);</span>
</pre></div>
@ -552,7 +563,7 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</ul>
</div>
<div class="section" id="spi-transmit-receive">
<h3><span class="section-number">8.4.10. </span><strong>spi_transmit_receive</strong><a class="headerlink" href="#spi-transmit-receive" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.7.4.10. </span><strong>spi_transmit_receive</strong><a class="headerlink" href="#spi-transmit-receive" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">spi_transmit_receive</span></code> 用于 SPI 设备数据的发送和接收。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">spi_transmit_receive</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="k">const</span> <span class="kt">void</span> <span class="o">*</span><span class="n">send_buf</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">recv_buf</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">length</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">type</span><span class="p">);</span>
</pre></div>
@ -574,8 +585,8 @@ SDI数据输入、SDO数据输出、SCLK时钟、CS片选
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_adc.html" class="btn btn-neutral float-right" title="9. ADC 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_i2c.html" class="btn btn-neutral float-left" title="7. I2C 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="api_adc.html" class="btn btn-neutral float-right" title="3.8. ADC 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_i2c.html" class="btn btn-neutral float-left" title="3.6. I2C 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>

View file

@ -0,0 +1,534 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3.10. TIMER 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="4. Shell" href="../shell/api_shell.html" />
<link rel="prev" title="3.9. DAC 设备" href="api_dac.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
</a>
<div class="version">
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">3. Peripheral</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="api_clock.html">3.1. 时钟树</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_gpio.html">3.2. GPIO 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_uart.html">3.3. UART 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.10. TIMER 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.10.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.10.2. TIMER 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.10.3. TIMER 设备参数配置表</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.10.4. TIMER 设备接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#timer-register">3.10.4.1. <strong>timer_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-open">3.10.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-close">3.10.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-control">3.10.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-set-callback">3.10.4.5. <strong>device_set_callback</strong></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.10. </span>TIMER 设备</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/api_reference/peripheral/api_timer.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="timer">
<h1><span class="section-number">3.10. </span>TIMER 设备<a class="headerlink" href="#timer" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2><span class="section-number">3.10.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>TIMER 通用定时器,博流系列 MCU 中 TIMER 设备具有以下特性:</p>
<ul class="simple">
<li><p>多种时钟来源选择</p></li>
<li><p>8-bit 时钟分频器,分频系数为 1-256</p></li>
<li><p>两组 32-bit 定时器</p></li>
<li><p>每个定时器包含三组报警值设定,可独立设定每组报警值溢出时报警</p></li>
<li><p>支持 FreeRun 模式和 PreLoad 模式</p></li>
<li><p>16-bit 看门狗定时器</p></li>
<li><p>支持写入密码保护,防止误设定造成系统异常</p></li>
<li><p>支持中断或复位两种看门狗溢出方式</p></li>
</ul>
</div>
<div class="section" id="id2">
<h2><span class="section-number">3.10.2. </span>TIMER 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">timer_device</span> <span class="p">{</span>
<span class="k">struct</span> <span class="nc">device</span> <span class="n">parent</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">id</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">ch</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">clk_div</span><span class="p">;</span>
<span class="n">timer_cnt_mode</span> <span class="n">cnt_mode</span><span class="p">;</span>
<span class="n">timer_pl_trig_t</span> <span class="n">pl_trig_src</span><span class="p">;</span>
<span class="p">}</span> <span class="n">timer_device_t</span><span class="p">;</span>
</pre></div>
</div>
<ul class="simple">
<li><p>parent 继承父类属性</p></li>
<li><p>id 定时器 id ,使能定时器 0 则 id 为 0 ,使能定时器 1 则 id 为 1 ,以此类推</p></li>
<li><p>ch timer 的通道号</p></li>
<li><p>clk_div 时钟分频系数</p></li>
<li><p>cnt_mode 计数模式</p></li>
<li><p>pl_trig_src 比较器的触发源</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">ch</span></code> 提供以下类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">enum</span> <span class="n">timer_index_type</span> <span class="p">{</span>
<span class="n">TIMER_CH0_INDEX</span><span class="p">,</span>
<span class="n">TIMER_CH1_INDEX</span><span class="p">,</span>
<span class="n">TIMER_MAX_INDEX</span>
<span class="p">};</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">cnt_mode</span></code> 提供以下类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">enum</span> <span class="p">{</span>
<span class="n">TIMER_CNT_PRELOAD</span><span class="p">,</span>
<span class="n">TIMER_CNT_FREERUN</span><span class="p">,</span>
<span class="p">}</span> <span class="n">timer_cnt_mode</span><span class="p">;</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">pl_trig_src</span></code> 提供以下类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">enum</span> <span class="p">{</span>
<span class="n">TIMER_PL_TRIG_NONE</span><span class="p">,</span>
<span class="n">TIMER_PL_TRIG_COMP0</span><span class="p">,</span>
<span class="n">TIMER_PL_TRIG_COMP1</span><span class="p">,</span>
<span class="n">TIMER_PL_TRIG_COMP2</span><span class="p">,</span>
<span class="p">}</span> <span class="n">timer_pl_trig_t</span><span class="p">;</span>
</pre></div>
</div>
</div>
<div class="section" id="id3">
<h2><span class="section-number">3.10.3. </span>TIMER 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>每一个 TIMER 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,变量定义位于 <code class="docutils literal notranslate"><span class="pre">hal_timer.c</span></code> 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_TIMER_CH0</span></code> <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_CONFIG</span></code> 即生效,同时 <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_INDEX</span></code> 设备就可以进行注册和使用了。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/*参数配置宏*/</span>
<span class="cp">#if defined(BSP_USING_TIMER_CH0)</span>
<span class="cp">#ifndef TIMER_CH0_CONFIG</span>
<span class="cp">#define TIMER_CH0_CONFIG \</span>
<span class="cp"> { \</span>
<span class="cp"> .id = 0, \</span>
<span class="cp"> .ch = 0, \</span>
<span class="cp"> .cnt_mode = TIMER_CNT_PRELOAD, \</span>
<span class="cp"> .pl_trig_src = TIMER_PL_TRIG_COMP0, \</span>
<span class="cp"> }</span>
<span class="cp">#endif</span>
<span class="cp">#endif</span>
<span class="cp">#if defined(BSP_USING_TIMER_CH1)</span>
<span class="cp">#ifndef TIMER_CH1_CONFIG</span>
<span class="cp">#define TIMER_CH1_CONFIG \</span>
<span class="cp"> { \</span>
<span class="cp"> .id = 0, \</span>
<span class="cp"> .ch = 1, \</span>
<span class="cp"> .cnt_mode = TIMER_CNT_PRELOAD, \</span>
<span class="cp"> .pl_trig_src = TIMER_PL_TRIG_COMP2, \</span>
<span class="cp"> }</span>
<span class="cp">#endif</span>
<span class="cp">#endif</span>
<span class="cm">/*变量定义*/</span>
<span class="k">enum</span> <span class="n">timer_index_type</span> <span class="p">{</span>
<span class="cp">#ifdef BSP_USING_TIMER_CH0</span>
<span class="n">TIMER_CH0_INDEX</span><span class="p">,</span>
<span class="cp">#endif</span>
<span class="cp">#ifdef BSP_USING_TIMER_CH1</span>
<span class="n">TIMER_CH1_INDEX</span><span class="p">,</span>
<span class="cp">#endif</span>
<span class="n">TIMER_MAX_INDEX</span>
<span class="p">};</span>
</pre></div>
</div>
<div class="admonition note">
<p class="admonition-title">注解</p>
<p>上述配置可以通过 <code class="docutils literal notranslate"><span class="pre">TIMER_DEV(dev)-&gt;xxx</span></code> 进行修改,只能在调用 <code class="docutils literal notranslate"><span class="pre">device_open</span></code> 之前使用。</p>
</div>
</div>
<div class="section" id="id4">
<h2><span class="section-number">3.10.4. </span>TIMER 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<p>TIMER 设备接口全部遵循标准设备驱动管理层提供的接口。</p>
<div class="section" id="timer-register">
<h3><span class="section-number">3.10.4.1. </span><strong>timer_register</strong><a class="headerlink" href="#timer-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">timer_register</span></code> 用来注册一个 TIMER 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 TIMER 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_TIMER_CH0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_INDEX</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_INDEX</span></code> 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">timer_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">timer_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>index 要注册的设备索引</p></li>
<li><p>name 为注册的设备命名</p></li>
<li><p>flag 默认可读可写属性</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">index</span></code> 用来选择 TIMER 设备配置,一个 index 对应一个 TIMER 设备配置,比如 <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_INDEX</span></code> 对应 <code class="docutils literal notranslate"><span class="pre">TIMER_CH0_CONFIG</span></code> 配置,<code class="docutils literal notranslate"><span class="pre">index</span></code> 有如下可选类型</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">enum</span> <span class="n">timer_index_type</span> <span class="p">{</span>
<span class="cp">#ifdef BSP_USING_TIMER_CH0</span>
<span class="n">TIMER_CH0_INDEX</span><span class="p">,</span>
<span class="cp">#endif</span>
<span class="cp">#ifdef BSP_USING_TIMER_CH1</span>
<span class="n">TIMER_CH1_INDEX</span><span class="p">,</span>
<span class="cp">#endif</span>
<span class="n">TIMER_MAX_INDEX</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
<div class="section" id="device-open">
<h3><span class="section-number">3.10.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于 TIMER 设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">timer_open</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>oflag 设备的打开方式</p></li>
<li><p>return 错误码0 表示打开成功,其他表示错误</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">oflag</span></code> 可以写入以下参数:</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define DEVICE_OFLAG_INT 0x01</span>
<span class="cp">#define DEVICE_OFLAG_POLL 0x02</span>
<span class="cp">#define DEVICE_CTRL_TIMER_CH_START 0x80</span>
<span class="cp">#define DEVICE_CTRL_TIMER_CH_STOP 0x81</span>
<span class="cp">#define DEVICE_CTRL_GET_MATCH_STATUS 0x82</span>
</pre></div>
</div>
</div>
<div class="section" id="device-close">
<h3><span class="section-number">3.10.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">timer_close</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>return 错误码0 表示关闭成功,其他表示错误</p></li>
</ul>
</div>
<div class="section" id="device-control">
<h3><span class="section-number">3.10.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对 TIMER 设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">timer_control</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>cmd 设备控制命令</p></li>
<li><p>args 控制参数</p></li>
<li><p>return 不同的控制命令返回的意义不同。</p></li>
</ul>
<p>TIMER 设备除了标准的控制命令,还具有私有的控制命令。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#define DEVICE_CTRL_TIMER_CH_START 0x80</span>
<span class="cp">#define DEVICE_CTRL_TIMER_CH_STOP 0x81</span>
<span class="cp">#define DEVICE_CTRL_GET_MATCH_STATUS 0x82</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">args</span></code> 根据不同的 <code class="docutils literal notranslate"><span class="pre">cmd</span></code> 传入不同,具体如下:</p>
<table class="colwidths-given docutils align-default" id="id5">
<caption><span class="caption-text">table1</span><a class="headerlink" href="#id5" title="永久链接至表格"></a></caption>
<colgroup>
<col style="width: 27%" />
<col style="width: 18%" />
<col style="width: 55%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>cmd</p></th>
<th class="head"><p>args</p></th>
<th class="head"><p>description</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>DEVICE_CTRL_SET_INT</p></td>
<td><p>NULL</p></td>
<td><p>开启 TIMER 中断</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_CLR_INT</p></td>
<td><p>NULL</p></td>
<td><p>关闭 TIMER 中断</p></td>
</tr>
<tr class="row-even"><td><p>DEVICE_CTRL_RESUME</p></td>
<td><p>NULL</p></td>
<td><p>开启 TIMER</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_SUSPEND</p></td>
<td><p>NULL</p></td>
<td><p>关闭 TIMER</p></td>
</tr>
<tr class="row-even"><td><p>DEVICE_CTRL_TIMER_CH_START</p></td>
<td><p>timer_user_cfg_t</p></td>
<td><p>开启 TIMER 及其中断</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_TIMER_CH_STOP</p></td>
<td><p>timer_user_cfg_t</p></td>
<td><p>关闭 TIMER 及其中断</p></td>
</tr>
<tr class="row-even"><td><p>DEVICE_CTRL_GET_CONFIG</p></td>
<td><p>NULL</p></td>
<td><p>获取 TIMER 当前的计数值</p></td>
</tr>
<tr class="row-odd"><td><p>DEVICE_CTRL_GET_MATCH_STATUS</p></td>
<td><p>uint32_t</p></td>
<td><p>获取 TIMER 比较器的状态</p></td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="device-set-callback">
<h3><span class="section-number">3.10.4.5. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 用于注册一个 TIMER 中断回调函数。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_set_callback</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">callback</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">event</span><span class="p">));</span>
</pre></div>
</div>
<ul>
<li><p>dev 设备句柄</p></li>
<li><p>callback 要注册的中断回调函数</p>
<blockquote>
<div><ul class="simple">
<li><p>dev 设备句柄</p></li>
<li><p>args 接收发送缓冲区,数据类型为 uint8_t*</p></li>
<li><p>size 传输长度</p></li>
<li><p>event 中断事件类型</p></li>
</ul>
</div></blockquote>
</li>
</ul>
<p>TIMER 设备 <code class="docutils literal notranslate"><span class="pre">event</span></code> 类型如下</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">enum</span> <span class="n">timer_event_type</span> <span class="p">{</span>
<span class="n">TIMER_EVENT_COMP0</span><span class="p">,</span>
<span class="n">TIMER_EVENT_COMP1</span><span class="p">,</span>
<span class="n">TIMER_EVENT_COMP2</span><span class="p">,</span>
<span class="n">TIMER_EVENT_UNKNOWN</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../shell/api_shell.html" class="btn btn-neutral float-right" title="4. Shell" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_dac.html" class="btn btn-neutral float-left" title="3.9. DAC 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; 版权所有 2021, BouffaloLab Co., Ltd.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View file

@ -7,12 +7,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>4. UART 设备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>3.3. UART 设备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
@ -24,23 +24,23 @@
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/translations.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="5. PWM 设备" href="api_pwm.html" />
<link rel="prev" title="3. GPIO 设备" href="api_gpio.html" />
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.4. PWM 设备" href="api_pwm.html" />
<link rel="prev" title="3.2. GPIO 设备" href="api_gpio.html" />
</head>
<body class="wy-body-for-nav">
@ -54,7 +54,7 @@
<a href="../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
@ -64,14 +64,14 @@
<div class="version">
0.2
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
@ -91,58 +91,67 @@
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">4. UART 设备</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">4.1. 简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">4.2. UART 设备结构体定义</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">4.3. UART 设备参数配置表</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">4.4. UART 设备接口</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#uart-register">4.4.1. <strong>uart_register</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-open">4.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-close">4.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-control">4.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-write">4.4.5. <strong>device_write</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-read">4.4.6. <strong>device_read</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#device-set-callback">4.4.7. <strong>device_set_callback</strong></a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">3. Peripheral</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="api_clock.html">3.1. 时钟树</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_gpio.html">3.2. GPIO 设备</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.3. UART 设备</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">3.3.1. 简介</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id2">3.3.2. UART 设备结构体定义</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">3.3.3. UART 设备参数配置表</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">3.3.4. UART 设备接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#uart-register">3.3.4.1. <strong>uart_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-open">3.3.4.2. <strong>device_open</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-close">3.3.4.3. <strong>device_close</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-control">3.3.4.4. <strong>device_control</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-write">3.3.4.5. <strong>device_write</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-read">3.3.4.6. <strong>device_read</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-set-callback">3.3.4.7. <strong>device_set_callback</strong></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
@ -158,7 +167,7 @@
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">BL_MCU_SDK 开发指南</a>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
@ -189,15 +198,17 @@
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">4. </span>UART 设备</li>
<li><a href="index.html"><span class="section-number">3. </span>Peripheral</a> &raquo;</li>
<li><span class="section-number">3.3. </span>UART 设备</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/api_reference/api_uart.rst.txt" rel="nofollow"> View page source</a>
<a href="../../_sources/api_reference/peripheral/api_uart.rst.txt" rel="nofollow"> View page source</a>
</li>
@ -211,9 +222,9 @@
<div itemprop="articleBody">
<div class="section" id="uart">
<h1><span class="section-number">4. </span>UART 设备<a class="headerlink" href="#uart" title="永久链接至标题"></a></h1>
<h1><span class="section-number">3.3. </span>UART 设备<a class="headerlink" href="#uart" title="永久链接至标题"></a></h1>
<div class="section" id="id1">
<h2><span class="section-number">4.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.3.1. </span>简介<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>UART 全称Universal Asynchronous Receiver/Transmitter通用异步收发传输器提供了与外部设备进行全双工数据交换的灵活方式。博流系列 MCU 中 UART 设备具有以下特性:</p>
<ul class="simple">
<li><p>数据位长度可选择 5/6/7/8 比特</p></li>
@ -228,7 +239,7 @@
</ul>
</div>
<div class="section" id="id2">
<h2><span class="section-number">4.2. </span>UART 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.3.2. </span>UART 设备结构体定义<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="nc">uart_device</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="nc">device</span> <span class="n">parent</span><span class="p">;</span>
@ -284,7 +295,7 @@
</div>
</div>
<div class="section" id="id3">
<h2><span class="section-number">4.3. </span>UART 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.3.3. </span>UART 设备参数配置表<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>每一个 UART 设备都有一个参数配置宏,宏定义位于 <code class="docutils literal notranslate"><span class="pre">bsp/board/xxx</span></code> 目录下 <code class="docutils literal notranslate"><span class="pre">peripheral_config.h</span></code> 文件,变量定义位于 <code class="docutils literal notranslate"><span class="pre">hal_uart.c</span></code> 中,因此无需用户自己定义变量。当用户打开对应设备的宏,该设备的配置才生效。例如打开宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_UART0</span></code> <code class="docutils literal notranslate"><span class="pre">UART0_CONFIG</span></code> 即生效,同时 <code class="docutils literal notranslate"><span class="pre">UART0</span></code> 设备就可以进行注册和使用了。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/*参数配置宏*/</span>
<span class="cp">#if defined(BSP_USING_UART0)</span>
@ -319,11 +330,11 @@
</div>
</div>
<div class="section" id="id4">
<h2><span class="section-number">4.4. </span>UART 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<h2><span class="section-number">3.3.4. </span>UART 设备接口<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<p>UART 设备接口全部遵循标准设备驱动管理层提供的接口。</p>
<div class="section" id="uart-register">
<h3><span class="section-number">4.4.1. </span><strong>uart_register</strong><a class="headerlink" href="#uart-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">uart_register</span></code> 用来注册一个 UART 设备,在注册之前需要打开对应 UART 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_UART0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">UART0</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">UART0</span></code> 设备。</p>
<h3><span class="section-number">3.3.4.1. </span><strong>uart_register</strong><a class="headerlink" href="#uart-register" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">uart_register</span></code> 用来注册一个 UART 设备,注册该设备需要使用的标准接口,在注册之前需要打开对应 UART 设备的宏定义。例如定义宏 <code class="docutils literal notranslate"><span class="pre">BSP_USING_UART0</span></code> 方可使用 <code class="docutils literal notranslate"><span class="pre">UART0</span></code> 设备,注册完成以后才可以使用其他接口,如果没有定义宏,则无法使用 <code class="docutils literal notranslate"><span class="pre">UART0</span></code> 设备。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">uart_register</span><span class="p">(</span><span class="k">enum</span> <span class="n">uart_index_type</span> <span class="n">index</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">flag</span><span class="p">);</span>
</pre></div>
</div>
@ -347,8 +358,8 @@
</div>
</div>
<div class="section" id="device-open">
<h3><span class="section-number">4.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于 UART 设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。</p>
<h3><span class="section-number">3.3.4.2. </span><strong>device_open</strong><a class="headerlink" href="#device-open" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_open</span></code> 用于 UART 设备的打开,<code class="docutils literal notranslate"><span class="pre">oflag</span></code> 表示以何种方式打开。实际调用 <code class="docutils literal notranslate"><span class="pre">uart_open</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_open</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint16_t</span> <span class="n">oflag</span><span class="p">);</span>
</pre></div>
</div>
@ -368,8 +379,8 @@
</div>
</div>
<div class="section" id="device-close">
<h3><span class="section-number">4.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。</p>
<h3><span class="section-number">3.3.4.3. </span><strong>device_close</strong><a class="headerlink" href="#device-close" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_close</span></code> 用于设备的关闭。实际调用 <code class="docutils literal notranslate"><span class="pre">uart_close</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_close</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">);</span>
</pre></div>
</div>
@ -379,8 +390,8 @@
</ul>
</div>
<div class="section" id="device-control">
<h3><span class="section-number">4.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对 UART 设备进行控制和参数的修改。</p>
<h3><span class="section-number">3.3.4.4. </span><strong>device_control</strong><a class="headerlink" href="#device-control" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_control</span></code> 用于根据命令对 UART 设备进行控制和参数的修改。实际调用 <code class="docutils literal notranslate"><span class="pre">uart_control</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_control</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cmd</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">);</span>
</pre></div>
</div>
@ -461,8 +472,8 @@
</table>
</div>
<div class="section" id="device-write">
<h3><span class="section-number">4.4.5. </span><strong>device_write</strong><a class="headerlink" href="#device-write" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_write</span></code> 用于 UART 设备数据的发送发送方式根据打开方式可以是轮询、中断、dma。</p>
<h3><span class="section-number">3.3.4.5. </span><strong>device_write</strong><a class="headerlink" href="#device-write" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_write</span></code> 用于 UART 设备数据的发送发送方式根据打开方式可以是轮询、中断、dma。实际调用 <code class="docutils literal notranslate"><span class="pre">uart_write</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_write</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="k">const</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span>
</pre></div>
</div>
@ -475,8 +486,8 @@
</ul>
</div>
<div class="section" id="device-read">
<h3><span class="section-number">4.4.6. </span><strong>device_read</strong><a class="headerlink" href="#device-read" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_read</span></code> 用于 UART 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。</p>
<h3><span class="section-number">3.3.4.6. </span><strong>device_read</strong><a class="headerlink" href="#device-read" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_read</span></code> 用于 UART 设备数据的接收接收方式根据打开方式可以是轮询、中断、dma。实际调用 <code class="docutils literal notranslate"><span class="pre">uart_read</span></code></p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_read</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">pos</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">);</span>
</pre></div>
</div>
@ -489,7 +500,7 @@
</ul>
</div>
<div class="section" id="device-set-callback">
<h3><span class="section-number">4.4.7. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<h3><span class="section-number">3.3.4.7. </span><strong>device_set_callback</strong><a class="headerlink" href="#device-set-callback" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">device_set_callback</span></code> 用于注册一个串口中断回调函数。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">device_set_callback</span><span class="p">(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">callback</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">device</span> <span class="o">*</span><span class="n">dev</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">event</span><span class="p">));</span>
</pre></div>
@ -529,8 +540,8 @@
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_pwm.html" class="btn btn-neutral float-right" title="5. PWM 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_gpio.html" class="btn btn-neutral float-left" title="3. GPIO 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="api_pwm.html" class="btn btn-neutral float-right" title="3.4. PWM 设备" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="api_gpio.html" class="btn btn-neutral float-left" title="3.2. GPIO 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>

View file

@ -0,0 +1,273 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3. Peripheral &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="3.1. 时钟树" href="api_clock.html" />
<link rel="prev" title="2. Board 配置系统" href="../board.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
</a>
<div class="version">
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">3. Peripheral</a><ul>
<li class="toctree-l2"><a class="reference internal" href="api_clock.html">3.1. 时钟树</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_gpio.html">3.2. GPIO 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_uart.html">3.3. UART 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">3. </span>Peripheral</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/api_reference/peripheral/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="peripheral">
<h1><span class="section-number">3. </span>Peripheral<a class="headerlink" href="#peripheral" title="永久链接至标题"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="api_clock.html">3.1. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_gpio.html">3.2. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_uart.html">3.3. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_pwm.html">3.4. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dma.html">3.5. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_i2c.html">3.6. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_spi.html">3.7. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_adc.html">3.8. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_dac.html">3.9. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_timer.html">3.10. TIMER 设备</a></li>
</ul>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="api_clock.html" class="btn btn-neutral float-right" title="3.1. 时钟树" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="../board.html" class="btn btn-neutral float-left" title="2. Board 配置系统" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; 版权所有 2021, BouffaloLab Co., Ltd.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View file

@ -0,0 +1,321 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>4. Shell &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="5. USB Stack" href="../usb%20stack/api_usb_stack.html" />
<link rel="prev" title="3.10. TIMER 设备" href="../peripheral/api_timer.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
</a>
<div class="version">
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">4. Shell</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">4.1. Shell 接口</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#shell-init">4.1.1. <strong>shell_init</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#shell-handler">4.1.2. <strong>shell_handler</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#shell-cmd-export">4.1.3. <strong>SHELL_CMD_EXPORT</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#shell-cmd-export-alias">4.1.4. <strong>SHELL_CMD_EXPORT_ALIAS</strong></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id2">4.2. Shell 内置命令</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">4. </span>Shell</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/api_reference/shell/api_shell.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="shell">
<h1><span class="section-number">4. </span>Shell<a class="headerlink" href="#shell" title="永久链接至标题"></a></h1>
<p>Shell 是一个命令行解释器Shell 为用户提供了与设备进行命令行交互的方式,用户通过串口、以太网、无线等方式将命令传输给具有 Shell 功能的设备,设备会解析命令并查找对应的函数进行执行。</p>
<p>当前 Shell 组件具有以下功能:</p>
<ul class="simple">
<li><p>支持标准键盘字符控制</p></li>
<li><p>支持 TAB 键自动补全</p></li>
<li><p>支持上下键查看历史命令</p></li>
<li><p>支持左右键修改命令</p></li>
<li><p>变量导出</p></li>
<li><p>支持文件系统操作</p></li>
</ul>
<div class="section" id="id1">
<h2><span class="section-number">4.1. </span>Shell 接口<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<div class="section" id="shell-init">
<h3><span class="section-number">4.1.1. </span><strong>shell_init</strong><a class="headerlink" href="#shell-init" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">shell_init</span></code> 用来初始化 shell。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">shell_init</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span>
</pre></div>
</div>
</div>
<div class="section" id="shell-handler">
<h3><span class="section-number">4.1.2. </span><strong>shell_handler</strong><a class="headerlink" href="#shell-handler" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">shell_handler</span></code> 用来对输入的数据进行处理。</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">shell_handler</span><span class="p">(</span><span class="kt">uint8_t</span> <span class="n">data</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>data 接收的数据</p></li>
</ul>
</div>
<div class="section" id="shell-cmd-export">
<h3><span class="section-number">4.1.3. </span><strong>SHELL_CMD_EXPORT</strong><a class="headerlink" href="#shell-cmd-export" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">SHELL_CMD_EXPORT</span></code> 用来注册一个命令。</p>
<dl class="c macro">
<dt id="c.SHELL_CMD_EXPORT">
<code class="sig-name descname"><span class="pre">SHELL_CMD_EXPORT</span></code><span class="sig-paren">(</span><em><span class="pre">command</span></em>, <em><span class="pre">desc</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.SHELL_CMD_EXPORT" title="永久链接至目标"></a><br /></dt>
<dd></dd></dl>
<ul class="simple">
<li><p>command 注册的函数名,后面输入 command 来运行该函数</p></li>
<li><p>desc 对该函数的描述</p></li>
</ul>
</div>
<div class="section" id="shell-cmd-export-alias">
<h3><span class="section-number">4.1.4. </span><strong>SHELL_CMD_EXPORT_ALIAS</strong><a class="headerlink" href="#shell-cmd-export-alias" title="永久链接至标题"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">SHELL_CMD_EXPORT_ALIAS</span></code> 用来注册一个命令,并对命令取别名。</p>
<dl class="c macro">
<dt id="c.SHELL_CMD_EXPORT_ALIAS">
<code class="sig-name descname"><span class="pre">SHELL_CMD_EXPORT_ALIAS</span></code><span class="sig-paren">(</span><em><span class="pre">command</span></em>, <em><span class="pre">alias</span></em>, <em><span class="pre">desc</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.SHELL_CMD_EXPORT_ALIAS" title="永久链接至目标"></a><br /></dt>
<dd></dd></dl>
<ul class="simple">
<li><p>command 注册的函数名</p></li>
<li><p>alias 函数名的别名,后面输入 alias 来运行该函数</p></li>
<li><p>desc 对该函数的描述</p></li>
</ul>
</div>
</div>
<div class="section" id="id2">
<h2><span class="section-number">4.2. </span>Shell 内置命令<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="admonition tip">
<p class="admonition-title">小技巧</p>
<p><code class="docutils literal notranslate"><span class="pre">help</span></code> 用来显示所有注册过的命令列表</p>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../usb%20stack/api_usb_stack.html" class="btn btn-neutral float-right" title="5. USB Stack" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="../peripheral/api_timer.html" class="btn btn-neutral float-left" title="3.10. TIMER 设备" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; 版权所有 2021, BouffaloLab Co., Ltd.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View file

@ -0,0 +1,374 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>5. USB Stack &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="6. BLE" href="../bluetooth/api_ble.html" />
<link rel="prev" title="4. Shell" href="../shell/api_shell.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home"> BL_MCU_SDK 开发指南
</a>
<div class="version">
0.3
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">快速开发指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/get_started.html">1. 开发前的准备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">2. 开发环境搭建指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/bl_dev_cube.html">3. BLDevCube 烧录工具指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/cmake_quick_start.html">4. 基于 cmake 框架新建工程指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/connecting_hardware.html">5. 硬件连接指南</a></li>
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="../shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">5. USB Stack</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#usb-device-porting">5.1. USB Device Porting 接口</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#usbd-set-address">5.1.1. <strong>usbd_set_address</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-open">5.1.2. <strong>usbd_ep_open</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-close">5.1.3. <strong>usbd_ep_close</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-set-stall">5.1.4. <strong>usbd_ep_set_stall</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-clear-stall">5.1.5. <strong>usbd_ep_clear_stall</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-is-stalled">5.1.6. <strong>usbd_ep_is_stalled</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-write">5.1.7. <strong>usbd_ep_write</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-ep-read">5.1.8. <strong>usbd_ep_read</strong></a></li>
<li class="toctree-l3"><a class="reference internal" href="#usbd-event-notify-handler">5.1.9. <strong>usbd_event_notify_handler</strong></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#usb-device">5.2. USB Device 应用层接口</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">5.2.1. USB Device 控制器接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#usb-dc-init">5.2.1.1. <strong>usb_dc_init</strong></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#id2">5.2.2. USB Device 通用接口</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#usbd-desc-register">5.2.2.1. <strong>usbd_desc_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usbd-msosv1-desc-register">5.2.2.2. <strong>usbd_msosv1_desc_register</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usbd-class-add-interface">5.2.2.3. <strong>usbd_class_add_interface</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usbd-interface-add-endpoint">5.2.2.4. <strong>usbd_interface_add_endpoint</strong></a></li>
<li class="toctree-l4"><a class="reference internal" href="#usb-device-is-configured">5.2.2.5. <strong>usb_device_is_configured</strong></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#usb-device-cdc">5.2.3. USB Device CDC 类接口</a></li>
<li class="toctree-l3"><a class="reference internal" href="#usb-device-msc">5.2.4. USB Device MSC 类接口</a></li>
<li class="toctree-l3"><a class="reference internal" href="#usb-device-hid">5.2.5. USB Device HID 类接口</a></li>
<li class="toctree-l3"><a class="reference internal" href="#usb-device-audio">5.2.6. USB Device AUDIO 类接口</a></li>
<li class="toctree-l3"><a class="reference internal" href="#usb-device-video">5.2.7. USB Device VIDEO 类接口</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/gpio/index.html">1. GPIO 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/uart/index.html">2. UART 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/pwm/index.html">3. PWM 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/mtimer/index.html">4. MTIMER 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/dma/index.html">5. DMA 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/spi/index.html">6. SPI 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/i2c/index.html">7. I2C 示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/basic%20samples/adc/index.html">8. ADC 示例</a></li>
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">BL_MCU_SDK 开发指南</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">5. </span>USB Stack</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/api_reference/usb stack/api_usb_stack.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="usb-stack">
<h1><span class="section-number">5. </span>USB Stack<a class="headerlink" href="#usb-stack" title="永久链接至标题"></a></h1>
<p>USB Stack 是一个跨平台的、用于嵌入式 MCU 的 USB 协议栈该协议栈对标准设备请求、CLASS 请求、VENDOR 请求规范了一套统一的函数框架,从而对复合设备或者使用自定义设备类时,能够在极短的时间内进行添加和移植。此外,该协议栈代码优美,内存占用小(不使用静态数组),通用性非常高,提供了一套标准的 porting 接口,供给不同的 MCU 使用。其中usb device 协议栈当前具有以下功能:</p>
<ul class="simple">
<li><p>支持 USB2.0 全速和高速设备</p></li>
<li><p>支持端点中断注册功能porting 给用户自己处理中断里的数据</p></li>
<li><p>支持复合设备</p></li>
<li><p>支持 Communication Class (CDC)</p></li>
<li><p>支持 Human Interface Device (HID)</p></li>
<li><p>支持 Custom human Interface Device (HID)</p></li>
<li><p>支持 Mass Storage Class (MSC)</p></li>
<li><p>支持 USB VIDEO CLASS (UVC)</p></li>
<li><p>支持 USB AUDIO CLASS (UAC)</p></li>
<li><p>支持 vendor 类 class</p></li>
<li><p>支持 WINUSB1.0、WINUSB2.0</p></li>
</ul>
<div class="admonition note">
<p class="admonition-title">注解</p>
<p>USB DEVICE 协议栈的代码实现过程参考 <a class="reference external" href="https://www.bilibili.com/video/BV1Ef4y1t73d">https://www.bilibili.com/video/BV1Ef4y1t73d</a></p>
</div>
<div class="section" id="usb-device-porting">
<h2><span class="section-number">5.1. </span>USB Device Porting 接口<a class="headerlink" href="#usb-device-porting" title="永久链接至标题"></a></h2>
<blockquote>
<div><p>USB Device Porting 接口在 <code class="docutils literal notranslate"><span class="pre">usb_stack/common/usb_dc.h</span></code> 文件中声明,用户根据自己的 MCU 进行实现</p>
</div></blockquote>
<div class="section" id="usbd-set-address">
<h3><span class="section-number">5.1.1. </span><strong>usbd_set_address</strong><a class="headerlink" href="#usbd-set-address" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-open">
<h3><span class="section-number">5.1.2. </span><strong>usbd_ep_open</strong><a class="headerlink" href="#usbd-ep-open" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-close">
<h3><span class="section-number">5.1.3. </span><strong>usbd_ep_close</strong><a class="headerlink" href="#usbd-ep-close" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-set-stall">
<h3><span class="section-number">5.1.4. </span><strong>usbd_ep_set_stall</strong><a class="headerlink" href="#usbd-ep-set-stall" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-clear-stall">
<h3><span class="section-number">5.1.5. </span><strong>usbd_ep_clear_stall</strong><a class="headerlink" href="#usbd-ep-clear-stall" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-is-stalled">
<h3><span class="section-number">5.1.6. </span><strong>usbd_ep_is_stalled</strong><a class="headerlink" href="#usbd-ep-is-stalled" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-write">
<h3><span class="section-number">5.1.7. </span><strong>usbd_ep_write</strong><a class="headerlink" href="#usbd-ep-write" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-ep-read">
<h3><span class="section-number">5.1.8. </span><strong>usbd_ep_read</strong><a class="headerlink" href="#usbd-ep-read" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usbd-event-notify-handler">
<h3><span class="section-number">5.1.9. </span><strong>usbd_event_notify_handler</strong><a class="headerlink" href="#usbd-event-notify-handler" title="永久链接至标题"></a></h3>
</div>
</div>
<div class="section" id="usb-device">
<h2><span class="section-number">5.2. </span>USB Device 应用层接口<a class="headerlink" href="#usb-device" title="永久链接至标题"></a></h2>
<div class="section" id="id1">
<h3><span class="section-number">5.2.1. </span>USB Device 控制器接口<a class="headerlink" href="#id1" title="永久链接至标题"></a></h3>
<div class="section" id="usb-dc-init">
<h4><span class="section-number">5.2.1.1. </span><strong>usb_dc_init</strong><a class="headerlink" href="#usb-dc-init" title="永久链接至标题"></a></h4>
</div>
</div>
<div class="section" id="id2">
<h3><span class="section-number">5.2.2. </span>USB Device 通用接口<a class="headerlink" href="#id2" title="永久链接至标题"></a></h3>
<div class="section" id="usbd-desc-register">
<h4><span class="section-number">5.2.2.1. </span><strong>usbd_desc_register</strong><a class="headerlink" href="#usbd-desc-register" title="永久链接至标题"></a></h4>
</div>
<div class="section" id="usbd-msosv1-desc-register">
<h4><span class="section-number">5.2.2.2. </span><strong>usbd_msosv1_desc_register</strong><a class="headerlink" href="#usbd-msosv1-desc-register" title="永久链接至标题"></a></h4>
</div>
<div class="section" id="usbd-class-add-interface">
<h4><span class="section-number">5.2.2.3. </span><strong>usbd_class_add_interface</strong><a class="headerlink" href="#usbd-class-add-interface" title="永久链接至标题"></a></h4>
</div>
<div class="section" id="usbd-interface-add-endpoint">
<h4><span class="section-number">5.2.2.4. </span><strong>usbd_interface_add_endpoint</strong><a class="headerlink" href="#usbd-interface-add-endpoint" title="永久链接至标题"></a></h4>
</div>
<div class="section" id="usb-device-is-configured">
<h4><span class="section-number">5.2.2.5. </span><strong>usb_device_is_configured</strong><a class="headerlink" href="#usb-device-is-configured" title="永久链接至标题"></a></h4>
</div>
</div>
<div class="section" id="usb-device-cdc">
<h3><span class="section-number">5.2.3. </span>USB Device CDC 类接口<a class="headerlink" href="#usb-device-cdc" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usb-device-msc">
<h3><span class="section-number">5.2.4. </span>USB Device MSC 类接口<a class="headerlink" href="#usb-device-msc" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usb-device-hid">
<h3><span class="section-number">5.2.5. </span>USB Device HID 类接口<a class="headerlink" href="#usb-device-hid" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usb-device-audio">
<h3><span class="section-number">5.2.6. </span>USB Device AUDIO 类接口<a class="headerlink" href="#usb-device-audio" title="永久链接至标题"></a></h3>
</div>
<div class="section" id="usb-device-video">
<h3><span class="section-number">5.2.7. </span>USB Device VIDEO 类接口<a class="headerlink" href="#usb-device-video" title="永久链接至标题"></a></h3>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../bluetooth/api_ble.html" class="btn btn-neutral float-right" title="6. BLE" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="../shell/api_shell.html" class="btn btn-neutral float-left" title="4. Shell" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&#169; 版权所有 2021, BouffaloLab Co., Ltd.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>索引 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>索引 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -62,7 +62,7 @@
<div class="version">
0.2
0.3
</div>
@ -97,16 +97,12 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -121,11 +117,12 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
@ -195,8 +192,21 @@
<h1 id="index">索引</h1>
<div class="genindex-jumpbox">
<a href="#S"><strong>S</strong></a>
</div>
<h2 id="S">S</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api_reference/shell/api_shell.html#c.SHELL_CMD_EXPORT">SHELL_CMD_EXPORT (C macro)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api_reference/shell/api_shell.html#c.SHELL_CMD_EXPORT_ALIAS">SHELL_CMD_EXPORT_ALIAS (C macro)</a>
</li>
</ul></td>
</tr></table>
</div>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2.3. Linux OR WSL 环境开发指南 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>2.3. Linux OR WSL 环境开发指南 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -64,7 +64,7 @@
<div class="version">
0.2
0.3
</div>
@ -119,16 +119,12 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -143,11 +139,12 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2.1. Windows 下使用 CDK (类 MDK Keil)开发指南 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>2.1. Windows 下使用 CDK (类 MDK Keil)开发指南 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -64,7 +64,7 @@
<div class="version">
0.2
0.3
</div>
@ -115,16 +115,12 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -139,11 +135,12 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2.2. Windows 下使用 Eclipse 开发指南 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>2.2. Windows 下使用 Eclipse 开发指南 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -64,7 +64,7 @@
<div class="version">
0.2
0.3
</div>
@ -121,16 +121,12 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -145,11 +141,12 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3. BLDevCube 烧录工具指南 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>3. BLDevCube 烧录工具指南 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -64,7 +64,7 @@
<div class="version">
0.2
0.3
</div>
@ -108,16 +108,12 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -132,11 +128,12 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>使用 CDK + CK-Link 编译调试 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>使用 CDK + CK-Link 编译调试 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -64,7 +64,7 @@
<div class="version">
0.2
0.3
</div>
@ -115,16 +115,12 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -139,11 +135,12 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>使用 CDK + Sipeed RV-Debugger Plus 编译调试 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>使用 CDK + Sipeed RV-Debugger Plus 编译调试 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -64,7 +64,7 @@
<div class="version">
0.2
0.3
</div>
@ -115,16 +115,12 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -139,11 +135,12 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>4. 基于 cmake 框架新建工程指南 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>4. 基于 cmake 框架新建工程指南 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -64,7 +64,7 @@
<div class="version">
0.2
0.3
</div>
@ -108,16 +108,12 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -132,11 +128,12 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>5. 硬件连接指南 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>5. 硬件连接指南 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -39,7 +39,7 @@
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="1. API 分层模型" href="../api_reference/api_structure.html" />
<link rel="next" title="1. API 概述" href="../api_reference/api_overview.html" />
<link rel="prev" title="4. 基于 cmake 框架新建工程指南" href="cmake_quick_start.html" />
</head>
@ -64,7 +64,7 @@
<div class="version">
0.2
0.3
</div>
@ -113,16 +113,12 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -137,11 +133,12 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
@ -364,7 +361,7 @@
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../api_reference/api_structure.html" class="btn btn-neutral float-right" title="1. API 分层模型" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="../api_reference/api_overview.html" class="btn btn-neutral float-right" title="1. API 概述" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="cmake_quick_start.html" class="btn btn-neutral float-left" title="4. 基于 cmake 框架新建工程指南" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>1. 开发前的准备 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>1. 开发前的准备 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -64,7 +64,7 @@
<div class="version">
0.2
0.3
</div>
@ -104,16 +104,12 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -128,11 +124,12 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2. 开发环境搭建指南 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>2. 开发环境搭建指南 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -64,7 +64,7 @@
<div class="version">
0.2
0.3
</div>
@ -104,16 +104,12 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -128,11 +124,12 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="../samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>BL MCU SDK 开发指南 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>BL MCU SDK 开发指南 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -63,7 +63,7 @@
<div class="version">
0.2
0.3
</div>
@ -98,16 +98,12 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -122,11 +118,12 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
@ -213,16 +210,12 @@
<div class="toctree-wrapper compound">
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
</div>
<div class="toctree-wrapper compound">
@ -241,11 +234,12 @@
<div class="toctree-wrapper compound">
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/ble_scan_demo.html">4. BLE 客户端和服务端互连</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="samples/advance%20samples/ble_scan_demo.html">6. BLE 客户端和服务端互连</a></li>
</ul>
</div>
</div>

View file

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>4. BLE 客户端和服务端互连 &mdash; BL_MCU_SDK 开发指南 0.2 文档</title>
<title>6. BLE 客户端和服务端互连 &mdash; BL_MCU_SDK 开发指南 0.3 文档</title>
@ -39,8 +39,7 @@
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
<link rel="next" title="5. BOOT2 IAP" href="boot2_iap_info.html" />
<link rel="prev" title="3. LowPower 低功耗评估" href="lowpower_demo.html" />
<link rel="prev" title="5. BOOT2 IAP" href="boot2_iap_info.html" />
</head>
<body class="wy-body-for-nav">
@ -64,7 +63,7 @@
<div class="version">
0.2
0.3
</div>
@ -99,16 +98,12 @@
</ul>
<p class="caption"><span class="caption-text">API 手册</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/api_structure.html">1. API 分层模型</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/api_clock.html">2. 时钟树</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/api_gpio.html">3. GPIO 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/api_uart.html">4. UART 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/api_pwm.html">5. PWM 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/api_dma.html">6. DMA 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/api_i2c.html">7. I2C 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/api_spi.html">8. SPI 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/api_adc.html">9. ADC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/api_dac.html">10. DAC 设备</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/api_overview.html">1. API 概述</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/board.html">2. Board 配置系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/peripheral/index.html">3. Peripheral</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/shell/api_shell.html">4. Shell</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/usb%20stack/api_usb_stack.html">5. USB Stack</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api_reference/bluetooth/api_ble.html">6. BLE</a></li>
</ul>
<p class="caption"><span class="caption-text">基础外设例程</span></p>
<ul>
@ -123,21 +118,22 @@
</ul>
<p class="caption"><span class="caption-text">进阶例程</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="shell_demo.html">1. SHELL 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="fatfs_demo.html">2. FATFS 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="lowpower_demo.html">3. LowPower 低功耗评估</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">4. BLE 客户端和服务端互连</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">4.1. 准备工具</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">4.2. 软件实现</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#ble-client">4.2.1. BLE client 软件实现</a></li>
<li class="toctree-l3"><a class="reference internal" href="#ble-server">4.2.2. BLE server 软件实现</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id3">4.3. 编译和烧录</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">4.4. 实验现象</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="shell_demo.html">1. Shell 命令行调试</a></li>
<li class="toctree-l1"><a class="reference internal" href="fatfs_demo.html">2. Fatfs 文件系统读写</a></li>
<li class="toctree-l1"><a class="reference internal" href="usb/index.html">3. USB Device 应用</a></li>
<li class="toctree-l1"><a class="reference internal" href="lowpower_demo.html">4. LowPower 低功耗评估</a></li>
<li class="toctree-l1"><a class="reference internal" href="boot2_iap_info.html">5. BOOT2 IAP</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">6. BLE 客户端和服务端互连</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">6.1. 准备工具</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">6.2. 软件实现</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#ble-client">6.2.1. BLE client 软件实现</a></li>
<li class="toctree-l3"><a class="reference internal" href="#ble-server">6.2.2. BLE server 软件实现</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id3">6.3. 编译和烧录</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">6.4. 实验现象</a></li>
</ul>
</li>
</ul>
@ -186,7 +182,7 @@
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><span class="section-number">4. </span>BLE 客户端和服务端互连</li>
<li><span class="section-number">6. </span>BLE 客户端和服务端互连</li>
<li class="wy-breadcrumbs-aside">
@ -206,18 +202,18 @@
<div itemprop="articleBody">
<div class="section" id="ble">
<h1><span class="section-number">4. </span>BLE 客户端和服务端互连<a class="headerlink" href="#ble" title="永久链接至标题"></a></h1>
<h1><span class="section-number">6. </span>BLE 客户端和服务端互连<a class="headerlink" href="#ble" title="永久链接至标题"></a></h1>
<p>本 demo 基于 <strong>bl702</strong> 演示 <strong>ble server</strong><strong>ble client</strong> 连接和数据收发。</p>
<div class="section" id="id1">
<h2><span class="section-number">4.1. </span>准备工具<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<h2><span class="section-number">6.1. </span>准备工具<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<ul class="simple">
<li><p>两块 bl702 开发板 or 一块 bl702 开发板 + 手机 app</p></li>
</ul>
</div>
<div class="section" id="id2">
<h2><span class="section-number">4.2. </span>软件实现<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<h2><span class="section-number">6.2. </span>软件实现<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<div class="section" id="ble-client">
<h3><span class="section-number">4.2.1. </span>BLE client 软件实现<a class="headerlink" href="#ble-client" title="永久链接至标题"></a></h3>
<h3><span class="section-number">6.2.1. </span>BLE client 软件实现<a class="headerlink" href="#ble-client" title="永久链接至标题"></a></h3>
<ul class="simple">
<li><p>软件代码见 <code class="docutils literal notranslate"><span class="pre">examples/ble/ble_central</span></code></p></li>
</ul>
@ -291,7 +287,7 @@
</ul>
</div>
<div class="section" id="ble-server">
<h3><span class="section-number">4.2.2. </span>BLE server 软件实现<a class="headerlink" href="#ble-server" title="永久链接至标题"></a></h3>
<h3><span class="section-number">6.2.2. </span>BLE server 软件实现<a class="headerlink" href="#ble-server" title="永久链接至标题"></a></h3>
<ul class="simple">
<li><p>软件代码见 <code class="docutils literal notranslate"><span class="pre">examples/ble/ble_peripheral</span></code></p></li>
</ul>
@ -392,7 +388,7 @@
</div>
</div>
<div class="section" id="id3">
<h2><span class="section-number">4.3. </span>编译和烧录<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<h2><span class="section-number">6.3. </span>编译和烧录<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<ul>
<li><p><strong>CDK工具编译</strong></p>
<blockquote>
@ -418,7 +414,7 @@
</ul>
</div>
<div class="section" id="id4">
<h2><span class="section-number">4.4. </span>实验现象<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<h2><span class="section-number">6.4. </span>实验现象<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<ul class="simple">
<li><p><strong>两个 bl702 对连</strong></p></li>
</ul>
@ -467,8 +463,7 @@
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="boot2_iap_info.html" class="btn btn-neutral float-right" title="5. BOOT2 IAP" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="lowpower_demo.html" class="btn btn-neutral float-left" title="3. LowPower 低功耗评估" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="boot2_iap_info.html" class="btn btn-neutral float-left" title="5. BOOT2 IAP" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>

Some files were not shown because too many files have changed in this diff Show more