蜂鸟B: ReleaseNote

蜂鸟B v1.0.2
ReleaseNote

版本历史记录

版本：V1.0.2，发布时间：2022/4/19

适配环境：

  • 硬件：蜂鸟B US665P31 V1_0 开发板
  • 软件：hb_B v1.0.2

修改记录：

  1. 更新uart、timer和pwm3相关API信息

版本：V1.0.1，发布时间：2022/4/6

适配环境：

  • 硬件：蜂鸟B US665P31 V1_0 开发板
  • 软件：hb_B v1.0.1

修改记录：

  1. 更新API信息

版本：V1.0.0，发布时间：2022/2/15

适配环境：

  • 硬件：蜂鸟B US665P31 V1_0 开发板
  • 软件：hb_B v1.0.0

修改记录：

  1. 第一版发布


蜂鸟B: 1、简介

1、简介

1. 引言

云知声总部位于北京，在上海、深圳、厦门设有全资子公司。是一家专注物联网人工智能服务、拥有完全自主知识产权的世界顶尖的智能语音识别和语义理解技术的高新技术企业。自2012年由智能语音技术起家，云知声多年来不断拓展技术边界，技术能力不仅涵盖了感知、认知、交互等方面的人工智能语音语义技术，更是在突破了 AI 芯片设计技术后，一举打造出了自主研发、自主知识产权、自主可控的全栈式人工智能技术链条（深度学习算法+大数据+超级计算+芯片能力）。

以强大的计算平台为基础，云知声构建了“云端芯”生态体系，提供跨硬件平台、跨应用场景的软硬件一体化云端+本地智能的芯片终端解决方案。目前云知声是迄今为止行业内唯一实现芯片落地应用的公司、国内白色家电领域领先AI芯片供应商、国内首家推出医疗云服务并完成数百家医院系统测试的语音服务商、我国后装车机市场占有量行业第一、教育云社会化口语评测服务市场占有量第一。还在智慧生活（家居、车载、机器人等）和智慧服务（医疗、教育、司法等）等多个垂直场景均有落地应用。

2. 产品简介

云知声提供标准化软硬件一体离线语音解决方案，支持单麦拾音、前端降噪、语音唤醒、离线识别等。用户使用方案中的标准化硬件模组配合云知声设备平台与相关工具，快速定制语音产品，为空调、冰箱、灯具、开关等家居设备赋能，无需联网即可使其具备智能语音交互能力。

- 硬件：基于云知声蜂鸟B芯片为核心的标准硬件板，集成离线识别算法

- 开放平台：可进行语音相关配置并生成软件版本的云知声智能设备平台

- 软件与源码：可直接使用，也可修改代码进行二次编译的软件版本

- 文档与工具：使用指南与技术开发文档，配套测试工具


蜂鸟B: 2、产品说明

2、产品说明

1. 硬件说明

蜂鸟B芯片是集成蓝牙功能的系统级SOC，支持高性能低功耗的蓝牙及音频应用。芯片内置蓝牙调制解调器、基带及模拟RF模块，支持蓝牙V2.1/V4.2/V5.1版本及低功耗蓝牙连接待机，通信距离长，待机时间久。芯片集成高性能音频AD/DA，内置240Mhz高性能浮点DSP，嵌入低延时cache，方便开发。依托于云知声在语音识别技术上的积累和算法的不断优化和创新，将本地识别算法与芯片架构深度融合，为客户提供Turnkey语音识别方案。

蜂鸟B芯片通用开发板

1642694482(1)

蜂鸟B芯片通用开发板

蜂鸟B芯片主要特性：

配置 | 规格
蜂鸟B芯片 | 高速SRAM 192KB
 | FLASH 1MB
mic数量 | 1
UART通信接口 | 2
音频接口 | I2S
控制接口 | UART, GPIO, I2C, SPI, PWM 等
BT | BLE

2. 软件功能

序号 | 功能 | 功能描述
1 | 单麦拾音 | · 单麦克风方案 · 支持家居场景3~5m远讲
2 | 语音唤醒 | · 高性能唤醒引擎 · 支持带口音的普通话 · 低误唤醒率 (< 1 false in 24 hours)
3 | 离线识别 | · 支持本地50条控制指令识别
4 | 多轮对话 | · 一次唤醒连续对话，语音操作更加便捷自然。
5 | 多种发音人音色 | · 提供标准女声、甜美女声、可爱女声、台湾女声、标准男声、女童声、男童声七种音色可选
6 | UART主板对接 | · 支持对接用户自有协议
7 | 智能设备平台 | · 云知声设备平台提供：唤醒词自定义，命令词自定义，回复播报语自定义，个性化声学模型，发音人音色选择等产品自定义配置


蜂鸟B: 3、获取源码

3、获取源码

1. 前期准备

1.1 账号创建

• 进入云知声开放平台：http://udp.hivoice.cn/

• 点击右上角的 登陆/注册，弹出如下窗口：

• 如无账号，请点击 去注册；

• 注册方式有“手机账号注册”、“邮箱账号注册”两种方式

• 如已有云知声开发账号请忽略本步骤；

• 选择邮箱账号注册需点击激活邮件后才能正常登陆

1.2 完善资料

注册成功后，为确保账号可用，请登陆云知声账号；

登陆后，点击右上角的 完善资料，输入相关必填信息。

1.3 开通权限

1. 联系云知声商务，申请开通云知声智能设备平台权限，获取离线标准开发板；

2. 开通权限后，产品控制台入口可见，在控制台-产品接入下。

2. 配置并生成产品版本

2.1 创建产品

（1）用户登陆云知声开放平台（http://udp.hivoice.cn/），点击导航栏中的 控制台，点击 产品接入 进入产品接入控制台。

（2）进入产品控制台后，点击 创建产品。

（3）云知声智能设备平台提供不同场景，用以定制不同语音产品形态，此处选择智能家居中文版（离在线）

（4）选择系统与芯片平台，选择 蜂鸟B芯片

该页面点击芯片旁的？按钮，可以获取蜂鸟B芯片产品手册。

（5）填写产品信息，包括名称与描述

（6）确认所选项无问题，点击 保存且下一步，即初步创建产品成功

2.2 产品版本开发

2.2.1 创建产品版本

（1）创建产品版本，填写版本号及版本信息，点击下一步

• 产品创建成功后，系统会自动为该产品分配Appkey与AppSecret，此为该产品唯一识别ID和密匙

• 一个产品可维护多个版本，可通过版本号与版本描述来区分

2.2.2 配置终端能力

（1） 选择前端信号处理方案

蜂鸟B芯片通用板支持单麦克风收音，开发者针对不同的使用场景，选择识别距离，实现对声音信号的处理方式，提升识别结果的准确率。

（2）PIN脚配置

蜂鸟B支持零代码实现芯片引脚配置，通过参数配置自定义GPIO、PWM、UART等端口的输出信号，直接控制外围电路。

（3）自定义产品唤醒词，以及唤醒回复语

• 支持3-6个字的唤醒词自定义配置，最多支持10组唤醒词的添加；

• 为保证语音产品有最佳唤醒体验，平台针对唤醒词的发音提供打分功能，并会提供具体指导信息；

• 涉及黄赌毒、政治敏感、低俗辱骂等不合规内容的唤醒词不可使用；

• 完整唤醒词定义规则可点击界面上《唤醒词自定义规则》；

• 支持按照产品使用场景自定义唤醒灵敏度；

• 自定义设置唤醒回复语，唤醒回复最多支持5条，设置后将随机播报。

（4）按照规则填写命令词与应答语

如下图所示，点击“如何自定义”为语法格式说明与规则介绍；

点击“点这里添加”则弹出输入框，可以在页面内直接输入命令词与应答语的定义；

如不满足语法格式要求平台则会进行实时提示。输入完成后选择命令词识别灵敏度，点击“确定”即可提交。

提交后仍可对词表基础信息进行编辑；

点击“控制详情”切换TAB，将控制行为与引脚输出信号进行对应，实现对控制指令的信号输出的配置。

语法格式说明与规则介绍

为方便产品构建，平台定义了一套语法格式，语法格式组成为：

action=命令词1|命令词2...@回复语

举例：TempSet15=设置十五度|十五度@已设为十五度

action 为一个控制指令的唯一标识，用户对着设备说出“设置十五度”“十五度”并被语义理解时，如已对接设备，语义理解模块会将TempSet15传给设备。

命令词 为想要定义的语音话术，用户必须按照定义的话术说出才有效。如用户可以使用“设置十五度”“十五度”来实现同一个设置温度15度的控制。

回复语 为针对该条控制指令的设备回复播报。

action、命令词、回复语均由用户定义。等号前的action为唯一值；等号后的命令词可输入多个，以 | 符号分割；@后为回复语，每个控制指令可以定义对应的回复。

点击语法格式后的 问号，可看到语法格式要求：

Ø action由英文、下划线“_”和数字组成，必须英文开头，不区分大小写，15个字符内

Ø 命令词最多支持150条，每条限 2 - 10 个字符，仅支持中文

Ø 一个action仅支持一条回复语，回复语总字数不得超过500个字符，支持中文、数字、逗号、句号、问号

点击语法句式后的 问号，可以看到针对回复播报特殊读音的标签使用说明：

Ø <py>：需要对单个汉字的发音进行纠正的场合。

注：拼音声调范围为 1 - 5，1 - 4 对应一声到四声，5对应轻声。

例：已调<py>tiao2</py>至中<py>zhong1</py>风档

播报为：已调(tiao2)至中(zhong1)风档

Ø <value>：需要将数字按照数值读法播报

例：已设为<value>15</value>度

播报为：已设为十五度

Ø <code>：需要将数字按照数字串逐位播报

例：已设为<code>15</code>度

播报为：已设为一五度

开发者注意：

1. 产品默认支持音量大小调节，音量调节控制默认句式如下：

 volumeUpUni=增大音量

 volumeDownUni=减小音量

如需自定义音量与主动退出的控制话术与应答播报，可在语法文件内添加以上控制句式，只需保持=号前的action不变，修改=后的内容即可。

举例如下：

volumeUpUni=大声一点|调大声点@已为您调高音量

exitUni=拜拜|再见@好的，那我先退下了

2. 产品内置音量等级三档控制逻辑，默认不开启。如需使用该逻辑，可在定义离线命令词与播报语处，添加词条后生效：

 最大音量 volumeMaxUni

 中等音量 volumeMidUni

 最小音量 volumeMinUni

如希望添加最大音量调节，可参考下方举例添加句式：

volumeMaxUni=最大音量|音量调到最大@已调至最大音量

3. 用户可以在离线命令词自定义部分，指定特定的action，定义非语音交互的应答语播报，用于非正常语音交互的情景。

开发者需从指定文件夹获取此部分定制的语音音频文件，并根据产品定义修改源码。可参见文内 5.3 播报逻辑开发。

格式如下：

Special_Replies@回复语1|回复语2|回复语3

如警报播报：以智能烧水壶为例，产品内传感器检测到缺水状态，自动语音警报；

如极限播报：空调指令“升高温度”，正常播报为“温度已升高”；当温度到上限时，播报“温度已调至最高”。

举例如下：

Special_Replies@内丹干烧|水壶缺水|没水啦|主人请加水

4. 用户可以在离线命令词自定义部分，指定特定的竞争词（可理解为无效命令词），防止一定概率的误识别。

格式如下：

Special_Gabages=命令词1|命令词2|命令词3|...

以空调产品为例，并没有高于32度的温控指令，用户说出“三十六度”时，不希望空调识别到“十六度”；
以空调产品为例，没有自动风的指令，当用户说说出“自动风”时，不希望空调识别到“自然风”（如果阈值设置较低）。

举例如下：

举例：Special_Gabages=三十六度|四十六度|五十六度|六十六度

（5）选择语音识别模型

蜂鸟B芯片方案支持对声学模型进行选择，默认为云知声针对蜂鸟B芯片定制的经过算法优化的通用声学模型。

如当前系统默认的声学模型性能无法满足用户需求时（注：此处用户需求，指经过语音性能量化测试的明确指标），可以使用云知声模型训练平台，采集特定离线命令词的语音训练数据并进行模型定制。

（6）针对产品定位，选择适合产品形态的发音人

• 活泼可爱的萱萱和KiYo，童真童趣的糖糖和天天，温柔可亲的玲玲，庄重严肃的小雯与小峰，七种音色可供选择；

• 可调节音量、语速与声音亮度；

• 提供在线试听，方便用户进行决策；

（7）其它配置

1) 开机音配置

系统自带默认开机铃声，可在页面点击试听。

如需进行开机欢迎语的自定义，也可以选择自定义内容，产品则会在开机后自动进行播报，欢迎语播报自定义限中文，可输入30个字符；也可选择不使用开机音。

2) 识别状态退出相关配置

语音产品为保证用户体验，唤醒后一段时间内无语音输入产品会主动退出识别状态，如需输入命令词，则需再次唤醒。

此段等待用户输入语音命令的有效时间，即为“唤醒超时退出时间”。

• 为确保产品有较好的用户体验，支持5s – 60s的超时退出时间设置，默认为10秒

• 超时退出回复最多可设置2条

当用户想要结束对话时，也可以主动要求退出识别状态。

• 默认退出命令为“退下”“再见”，可根据产品定义修改，最多可设置3条

• 主动退出回复最多可设置2条

如配置完成，则可点击下一步，进入版本发布页面。

2.2.3 下载版本

（1）产品配置开发完成，进入发布页面后，可点击 立即发布

（2）产品发布需要一定时间，可以有两种方法获取到发布成功的产品

• 发布界面下，版本发布成功后，会有下载提示

• 也可以直接返回产品详情，或关闭页面一段时间再进入智能设备平台的产品详情，页面中的版本列表处点击下载

2.3 产品版本维护

产品详情页面可以查看已创建的产品，可以查看每个版本的配置信息，也可以对已发布成功的版本进行下载操作

2.3.1 新版本迭代

同一个产品如有新需求的修改或迭代，可在产品详情页面点击产品方案的“编辑” +开发新版本，后续的操作步骤同创建产品版本时的流程一致。

提供选择任一历史版本进行迭代开发的选项，默认为基于最新修改的版本，也可根据需求进行其它版本的选择。


蜂鸟B: 4、烧录固件

4、烧录固件

1. 文件介绍

• 产品的软件烧录包下载成功后，解压文件，可以看到如下方文件目录

• 如想直接使用，体验语音功能，请打开“image_demo/Hummingbird-B-Production-Tool”文件夹，双击“UnisoundDownloader”，运行烧录工具

• 烧录工具配置界面如下图所示：

2. 烧录指南

1) 准备

a. 下载工具：UnisoundDownloader

b. 待烧录固件：uni_app.fw（一般在固件包bin目录下）

c. 蜂鸟B开发板

d. 蜂鸟B调试器

2) 接线

3) 烧录

a. 打开下载工具UnisoundDownloader，点击【打开】按钮选择待烧录的固件：

b. 将开发板通过调试器和PC连接后，点按一下调试器上的按钮，此时下载工具会自动识别到设备并显示设备信息：

c. 点击升级按钮，等待烧录进度条完成

d. 进度条显示“升级成功”，即可重启启动固件（若勾选【成功后复位】，设备会自动重启）


蜂鸟B: 5、搭建开发环境

5、搭建开发环境

1 环境准备

(1) 下载编译工具

推荐使用Ubuntu 16.04 / centos7以上版本作为开发环境。

交叉编译工具下载地址：

链接：https://pan.baidu.com/s/1Ityp9tYWW3eCzW8TuuIM-g

提取码：vzgh

下载交叉编译工具并解压到开发环境“/opt/toolchains”路径中，建议保持如下目录结构：

若交叉编译工具路径配置在其他路径，也可在工程根目录下Makefile中及cpu/br23/tools/download.sh脚本中更新为对应的路径：

(2) 已下载的版本里除了可直接烧录使用的image_demo外，文件夹内包含产品方案源码（请于上述开发环境中解压方案压缩包，以免丢失链接文件），如下图所示：

(3) 安装python环境：sudo apt-get install python

(4) 安装lame音频处理工具：sudo apt-get install lame

(5) 安装32位兼容库（如果系统未安装过）：sudo apt-get install lib32stdc++6 lib32z1 lib32ncurses5 lib32bz2-1.0（仅适用于Ubuntu 16.04版本，其他版本请根据系统说明解决兼容性问题)

2 编译

(1) 执行编译

进入根目录，执行./build.sh即可：

编译成功会看到如下信息：

(2) output目录下可以看到编译生成的完整固件，使用章节3中的下载工具即可进行烧录使用：


蜂鸟B: 6、软件架构

6、软件架构

1.源码目录结构

源码各个目录功能如下所示：

二次开发关注目录：

可在根目录执行./build.sh res指令进行资源文件的重生成，一般在手动替换本地音频文件时进行操作，后续无需重复执行，直接./build.sh即可生成固件。（./build.sh res 会重新生成uni_auto_control.c及unires下的文件，更新前请注意备份）


蜂鸟B: 7、二次开发

7、二次开发

1. 运行一个Demo

平台下载源码的根目录下执行./build.sh即可生成可使用的demo固件，烧录入开发板后即可体验完整功能。

2. 串口调试

调试串口默认使用uart1，连接PC后使用常见串口工具（如putty、xshell、secureCRT等），配置波特率 (115200bps)、数据位 (8)、停止位 (1)、校验 (None)即可。

TX连接串口调试器RX，RX连接串口调试器TX，GND连接GND接口，设备上电后，可在串口工具中观察到如下启动信息：

3. 调整指令阈值

蜂鸟B芯片支持离线语音识别阈值的配置，一般情况使用平台自动计算获得的值即可，也可以根据项目的要求进行微调。（unisound/unires/include/uni_cust_config.h）


蜂鸟B: 模块

模块
这里列出了所有模块:
[详情级别 12]
▼ 音频控制
音频控制说明
音频控制接口
▼ GPIO
GPIO说明
GPIO相关接口
GPIO相关类型定义
▼ UART
UART说明
UART相关接口
▼ PWM
PWM说明
PWM相关接口
▼ TIMER
TIMER说明
TIMER相关接口
▼ FLASH
FLASH说明
FLASH相关接口


蜂鸟B: 音频控制

模块
音频控制

模块

音频控制说明
音频控制接口

详细描述


蜂鸟B: 音频控制说明

音频控制说明
音频控制
音频播放相关接口说明：
  1. 可播放 apps/soundbox/smartbox/unisound/unires/scripts 路径下的音频，文件名以序号区分；
  2. 调用播放接口是异步不堵塞的；


蜂鸟B: 音频控制接口

函数
音频控制接口
音频控制

函数

int | user_player_play (const char *file)
播放文件 更多...
int | user_player_reply_list_num (const char *file_list, int num)
播放列表序号音频 更多...
int | user_player_reply_list_random (const char *file_list)
随机播放列表音频 更多...
int | user_player_reply_list_in_order (const char *file_list)
顺序播放列表中所有音频 更多...
int | user_player_stop (void)
停止播放 更多...
int | user_player_set_volume_min (void)
设置最小音量
int | user_player_set_volume_max (void)
设置最大音量
int | user_player_set_volume_mid (void)
设置中等音量
int | user_player_set_volume_up (void)
增加音量
int | user_player_set_volume_down (void)
减小音量
int | user_player_speaker_mute (void)
设置喇叭静音
int | user_player_speaker_unmute (void)
取消设置喇叭静音
int | user_player_init (void)
初始化

详细描述

函数说明

◆ user_player_play()

int user_player_play ( const char * file )
参数
file 播放文件名
返回值
0 | 操作成功
-1 | 操作失败

◆ user_player_reply_list_in_order()

int user_player_reply_list_in_order ( const char * file_list )
参数
file_list 文件列表 [1, 2, 3]
返回值
0 | 操作成功
-1 | 操作失败

◆ user_player_reply_list_num()

int user_player_reply_list_num | ( | const char * | file_list,
 |  | int | num
 | ) |  |
参数
file_list | 文件列表 [1, 2, 3]
num | 列表序号
返回值
0 | 操作成功
-1 | 操作失败

◆ user_player_reply_list_random()

int user_player_reply_list_random ( const char * file_list )
参数
file_list 文件列表 [1, 2, 3]
返回值
0 | 操作成功
-1 | 操作失败

◆ user_player_stop()

int user_player_stop ( void )
返回值
0 | 操作成功
-1 | 操作失败


蜂鸟B: GPIO

模块
GPIO

模块

GPIO说明
GPIO相关接口
GPIO相关类型定义

详细描述


蜂鸟B: GPIO说明

GPIO说明
GPIO
GPIO说明
  • GPIO配置时请确保不会引入引脚冲突等问题。


蜂鸟B: GPIO相关接口

函数
GPIO相关接口
GPIO

函数

void | user_pin_set_func (UNI_PIN_NUM_E user_pin, UNI_PIN_FUNC_E user_func)
GPIO端口功能配置 更多...
int | user_gpio_set_direction (UNI_PIN_NUM_E user_pin, UNI_GPIO_DIRECTION_E direction)
GPIO端口方向配置 更多...
int | user_gpio_get_level (UNI_PIN_NUM_E pin)
GPIO电平获取 更多...
int | user_gpio_set_level (UNI_PIN_NUM_E user_pin, UNI_GPIO_LEVEL_E level)
GPIO电平配置 更多...
int | user_sw_timer_gpio_pulse (UNI_PIN_NUM_E user_pin, int period_ms, int times, uint8_t dev_val)
GPIO端口定时输出脉冲设置 更多...

详细描述

函数说明

◆ user_gpio_get_level()

int user_gpio_get_level ( UNI_PIN_NUM_E pin )
参数
user_pin 端口号
返回值
电平值 0或1

◆ user_gpio_set_direction()

int user_gpio_set_direction | ( | UNI_PIN_NUM_E | user_pin,
 |  | UNI_GPIO_DIRECTION_E | direction
 | ) |  |
参数
user_pin | 端口号
direction | 方向
返回值
0 | 操作成功
-1 | 操作失败

◆ user_gpio_set_level()

int user_gpio_set_level | ( | UNI_PIN_NUM_E | user_pin,
 |  | UNI_GPIO_LEVEL_E | level
 | ) |  |
参数
user_pin | 端口号
level | 电平，0或1
返回值
0 | 操作成功
-1 | 操作失败

◆ user_pin_set_func()

void user_pin_set_func | ( | UNI_PIN_NUM_E | user_pin,
 |  | UNI_PIN_FUNC_E | user_func
 | ) |  |
参数
user_pin | 端口号
user_func | 端口功能

◆ user_sw_timer_gpio_pulse()

int user_sw_timer_gpio_pulse | ( | UNI_PIN_NUM_E | user_pin,
 |  | int | period_ms,
 |  | int | times,
 |  | uint8_t | dev_val
 | ) |  |
参数
user_pin | 端口号
period_ms | 脉冲周期
times | 脉冲次数
dev_val | 脉冲结束持续电平，0或1
返回值
0 | 操作成功
1 | 操作失败


蜂鸟B: GPIO相关类型定义

枚举
GPIO相关类型定义
GPIO

枚举

enum | UNI_GPIO_LEVEL_E { UNI_GPIO_LEVEL_LOW = 0, UNI_GPIO_LEVEL_HIGH }
gpio 电平状态 更多...
enum | UNI_GPIO_DIRECTION_E { UNI_GPIO_DIRECTION_OUTPUT = 0, UNI_GPIO_DIRECTION_INPUT }
gpio 方向 更多...
enum UNI_PIN_NUM_E {
UNI_PIN_NUM_1 = IO_PORT_DM, UNI_PIN_NUM_2 = IO_PORT_DP, UNI_PIN_NUM_3 = IO_PORTA_01, UNI_PIN_NUM_4 = IO_PORTA_00,
UNI_PIN_NUM_13 = IO_PORTB_11, UNI_PIN_NUM_14 = IO_PORTB_10, UNI_PIN_NUM_15 = IO_PORTB_09, UNI_PIN_NUM_16 = IO_PORTB_08,
UNI_PIN_NUM_17 = IO_PORTB_05, UNI_PIN_NUM_20 = IO_PORTB_01
}
gpio 引脚号
enum | UNI_PIN_FUNC_E { UNI_FUNC_GPIO, UNI_FUNC_UART_TX, UNI_FUNC_UART_RX, UNI_FUNC_PWM }
gpio 功能

详细描述

枚举类型说明

◆ UNI_GPIO_DIRECTION_E

enum UNI_GPIO_DIRECTION_E
枚举值
UNI_GPIO_DIRECTION_OUTPUT | GPIO端口作为输出
UNI_GPIO_DIRECTION_INPUT | GPIO端口作为输入

◆ UNI_GPIO_LEVEL_E

enum UNI_GPIO_LEVEL_E
枚举值
UNI_GPIO_LEVEL_LOW | 低电平
UNI_GPIO_LEVEL_HIGH | 高电平


蜂鸟B: UART

模块
UART

模块

UART说明
UART相关接口

详细描述


蜂鸟B: UART说明

UART说明
UART
UART说明
  1. 蜂鸟B可用的UART为UART1和UART2；
  2. UART端口的数据位为8比特，停止位为1比特，无校验位和流控；


蜂鸟B: UART相关接口

函数
UART相关接口
UART

函数

int | user_uart_init (UNI_PIN_NUM_E tx_pin, UNI_PIN_NUM_E rx_pin, uint32_t baudrate, int data_bits, int stop_bits, int parity)
UART初始化 更多...
int | user_uart_send (int port, uint8_t *data, uint32_t size)
UART数据发送 更多...
uint32_t | user_uart_recv (int port, uint8_t *data, uint32_t size, uint32_t timeout)
UART数据接收 更多...
int | user_uart_recv_byte (int port, uint8_t *data, uint32_t timeout)
UART数据单字节接收 更多...

详细描述

函数说明

◆ user_uart_init()

int user_uart_init | ( | UNI_PIN_NUM_E | tx_pin,
 |  | UNI_PIN_NUM_E | rx_pin,
 |  | uint32_t | baudrate,
 |  | int | data_bits,
 |  | int | stop_bits,
 |  | int | parity
 | ) |  |
参数
tx_pin | GPIO发送端口号
rx_pin | GPIO接收端口号
baudrate | 波特率
data_bits | 数据位（暂未使用）
stop_bits | 停止位（暂未使用）
parity | 校验位（暂未使用）
返回值
0 | 操作成功
-1 | 操作失败

◆ user_uart_recv()

uint32_t user_uart_recv | ( | int | port,
 |  | uint8_t * | data,
 |  | uint32_t | size,
 |  | uint32_t | timeout
 | ) |  |
参数
port | UART端口号
data | 接收数据的缓冲区起始地址
size | 接收数据的长度
timeout | 超时时间，单位为ms。
返回值
实际接收数据长度

◆ user_uart_recv_byte()

int user_uart_recv_byte | ( | int | port,
 |  | uint8_t * | data,
 |  | uint32_t | timeout
 | ) |  |
参数
port | UART端口号
data | 接收数据的缓冲区起始地址
timeout | 超时时间，单位为ms。
返回值
0 | 操作成功
-1 | 操作失败

◆ user_uart_send()

int user_uart_send | ( | int | port,
 |  | uint8_t * | data,
 |  | uint32_t | size
 | ) |  |
参数
port | UART端口号
data | 待发送数据起始地址
size | 待发送数据长度
返回值
0 | 操作成功
-1 | 操作失败


蜂鸟B: PWM

模块
PWM

模块

PWM说明
PWM相关接口

详细描述


蜂鸟B: PWM说明

PWM说明
PWM
PWM说明
  1. 蜂鸟B可用的PWM包括两路双通道PWM和一路由timer3驱动的单通道PWM3；
  2. 为保证占空比精确度，频率值建议小于40KHz；


蜂鸟B: PWM相关接口

函数
PWM相关接口
PWM

函数

int | user_pwm_init (UNI_PIN_NUM_E user_pin, uint32_t freq, uint8_t inverse, uint8_t duty)
PWM端口初始化 更多...
int | user_pwm_duty_inc (uint32_t lhchannel, uint8_t det_duty)
PWM通道增加占空比 更多...
int | user_pwm_duty_dec (uint32_t lhchannel, uint8_t det_duty)
PWM通道减小占空比 更多...
int | user_pwm_enable (uint32_t lhchannel, uint8_t duty)
PWM通道使能 更多...
int | user_pwm_disable (uint32_t lhchannel)
PWM通道关闭 更多...
int | user_pwm3_start (u32 freq, u32 duty)
PWM3端口启动 更多...
void | user_pwm3_set_duty (u32 duty)
PWM3通道占空比设置 更多...
void | user_pwm3_stop (void)
PWM3通道停止

详细描述

函数说明

◆ user_pwm3_set_duty()

void user_pwm3_set_duty ( u32 duty )
参数
duty 占空比,0~10000对应占空比0~100%

◆ user_pwm3_start()

int user_pwm3_start | ( | u32 | freq,
 |  | u32 | duty
 | ) |  |
参数
freq | PWM波形频率
duty | 占空比,0~10000对应占空比0~100%
返回值
0 | 操作成功
-1 | 操作失败

◆ user_pwm_disable()

int user_pwm_disable ( uint32_t lhchannel )
参数
lhchannel PWM通道号
返回值
0 | 操作成功
-1 | 操作失败

◆ user_pwm_duty_dec()

int user_pwm_duty_dec | ( | uint32_t | lhchannel,
 |  | uint8_t | det_duty
 | ) |  |
参数
lhchannel | PWM通道号
det_duty | 占空比减小值
返回值
0 | 操作成功
-1 | 操作失败

◆ user_pwm_duty_inc()

int user_pwm_duty_inc | ( | uint32_t | lhchannel,
 |  | uint8_t | det_duty
 | ) |  |
参数
lhchannel | PWM通道号
det_duty | 占空比增加值
返回值
0 | 操作成功
-1 | 操作失败

◆ user_pwm_enable()

int user_pwm_enable | ( | uint32_t | lhchannel,
 |  | uint8_t | duty
 | ) |  |
参数
lhchannel | PWM通道号
duty | 占空比
返回值
0 | 操作成功
-1 | 操作失败

◆ user_pwm_init()

int user_pwm_init | ( | UNI_PIN_NUM_E | user_pin,
 |  | uint32_t | freq,
 |  | uint8_t | inverse,
 |  | uint8_t | duty
 | ) |  |
参数
user_pin | GPIO端口号
freq | PWM波形频率
inverse | 占空比翻转，0：不翻转，为高电平设置占空比；1：翻转，为低电平设置占空比
duty | 占空比
返回值
0 | 操作成功
-1 | 操作失败


蜂鸟B: TIMER

模块
TIMER

模块

TIMER说明
TIMER相关接口

详细描述


蜂鸟B: TIMER说明

TIMER说明
TIMER
TIMER说明
  1. timer接口的实现基于usr_timer_add、usr_timer_del、usr_timeout_add、usr_timeout_del接口，用于满足一般的开发需求。如果该接口无法满足业务需求，建议参考底层的usr系列接口，以及sys系列接口（sys_timer_add、sys_timer_del、sys_timeout_add、sys_timeout_del）。


蜂鸟B: TIMER相关接口

函数
TIMER相关接口
TIMER

函数

uint16_t | user_timer_create (uint32_t msec, bool single_shot, user_timer_cb cb, void *priv)
创建定时动作 更多...
int | user_timer_delete (uint16_t id, bool single_shot)
删除定时动作 更多...

详细描述

函数说明

◆ user_timer_create()

uint16_t user_timer_create | ( | uint32_t | msec,
 |  | bool | single_shot,
 |  | user_timer_cb | cb,
 |  | void * | priv
 | ) |  |
参数
msec | 定时长度/周期
single_shot | 0：连续模式；1：单次模式，超时之后定时器停止工作
cb | 回调函数，当每次超时发生时被执行
priv | 私有数据,供回调函数使用
返回值
所创建的定时器id

◆ user_timer_delete()

int user_timer_delete | ( | uint16_t | id,
 |  | bool | single_shot
 | ) |  |
参数
id | 定时器id，user_timer_create()的返回值
single_shot | 定时器的工作模式
返回值
0 操作成功


蜂鸟B: FLASH

模块
FLASH

模块

FLASH说明
FLASH相关接口

详细描述


蜂鸟B: FLASH说明

FLASH说明
FLASH
FLASH说明
  1. Flash存储总体可用空间大小可以通过查看cpu/br23/tools/isd_config.ini文件中的VM_LEN值获得。


蜂鸟B: FLASH相关接口

函数
FLASH相关接口
FLASH

函数

int | user_flash_read (u16 id, void *buff, u16 len)
读取Flash数据 更多...
int | user_flash_write (u16 id, void *buff, u16 len)
向Flash写入数据 更多...

详细描述

函数说明

◆ user_flash_read()

int user_flash_read | ( | u16 | id,
 |  | void * | buff,
 |  | u16 | len
 | ) |  |
参数
id | 数据的id，有效范围为[1, 49]
buff | 数据缓冲区起始地址
len | 读取的数据长度
返回值
实际读取的数据长度

◆ user_flash_write()

int user_flash_write | ( | u16 | id,
 |  | void * | buff,
 |  | u16 | len
 | ) |  |
参数
id | 数据的id，有效范围为[1, 49]
buff | 数据起始地址
len | 数据的长度
返回值
实际写入的数据长度


蜂鸟B: D:/temp/unione_lite_app_hb_b/apps/soundbox/smartbox 目录参考

  • temp
  • unione_lite_app_hb_b
  • apps
  • soundbox
  • smartbox
smartbox 目录参考


蜂鸟B: D:/temp/unione_lite_app_hb_b/apps/soundbox/smartbox/unisound 目录参考

  • temp
  • unione_lite_app_hb_b
  • apps
  • soundbox
  • smartbox
  • unisound
unisound 目录参考

目录


蜂鸟B: D:/temp/unione_lite_app_hb_b/apps/soundbox/smartbox/unisound/user 目录参考

  • temp
  • unione_lite_app_hb_b
  • apps
  • soundbox
  • smartbox
  • unisound
  • user
user 目录参考


蜂鸟B: D:/doxygen/src/HummingbirdB/input 目录参考

  • src
  • HummingbirdB
  • input
input 目录参考


蜂鸟B: D:/doxygen/src/HummingbirdB 目录参考

  • src
  • HummingbirdB
HummingbirdB 目录参考


蜂鸟B: D:/temp/unione_lite_app_hb_b 目录参考

  • temp
  • unione_lite_app_hb_b
unione_lite_app_hb_b 目录参考


蜂鸟B: D:/doxygen/src 目录参考

  • src
src 目录参考


蜂鸟B: D:/temp 目录参考

  • temp
temp 目录参考


蜂鸟B: D:/temp/unione_lite_app_hb_b/apps 目录参考

  • temp
  • unione_lite_app_hb_b
  • apps
apps 目录参考


蜂鸟B: D:/temp/unione_lite_app_hb_b/apps/soundbox 目录参考

  • temp
  • unione_lite_app_hb_b
  • apps
  • soundbox
soundbox 目录参考


蜂鸟B: 相关页面

相关页面
这里列出了所有相关页面:
1、简介
2、产品说明
3、获取源码
4、烧录固件
5、搭建开发环境
6、软件架构
7、二次开发


蜂鸟B: D:/temp/unione_lite_app_hb_b/apps/soundbox/smartbox/unisound/user/uni_auto_control.h 源文件

  • temp
  • unione_lite_app_hb_b
  • apps
  • soundbox
  • smartbox
  • unisound
  • user
uni_auto_control.h
1 /**************************************************************************
2 * Copyright (C) 2017-2017 Unisound
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 **************************************************************************
18 *
19 * Description : uni_auto_control.h
20 * Author : yuanshifeng@unisound.com
21 * Date : 2021.03.01
22 *
23 **************************************************************************/
24 #ifndef UNI_AUTO_CONTROL_H_
25 #define UNI_AUTO_CONTROL_H_
26
27 int user_gpio_init(void);
28
29 int user_gpio_handle_action_event(const char *action, uint8_t *need_reply, uint8_t *need_post);
30
31 #endif


蜂鸟B: D:/temp/unione_lite_app_hb_b/apps/soundbox/smartbox/unisound/user/user_flash.h 源文件

  • temp
  • unione_lite_app_hb_b
  • apps
  • soundbox
  • smartbox
  • unisound
  • user
user_flash.h
1 #ifndef USER_FLASH_H_
2 #define USER_FLASH_H_
3
4 #include "cpu.h"
5
16 int user_flash_read(u16 id, void *buff, u16 len);
17
25 int user_flash_write(u16 id, void *buff, u16 len);
27 #endif


蜂鸟B: D:/temp/unione_lite_app_hb_b/apps/soundbox/smartbox/unisound/user/user_gpio.h 源文件

  • temp
  • unione_lite_app_hb_b
  • apps
  • soundbox
  • smartbox
  • unisound
  • user
user_gpio.h
1 /**************************************************************************
2 * Copyright (C) 2017-2017 Unisound
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 **************************************************************************
18 *
19 * Description : user_gpio.h
20 * Author : yuanshifeng@unisound.com
21 * Date : 2021.03.01
22 *
23 **************************************************************************/
24 #ifndef USER_GPIO_H_
25 #define USER_GPIO_H_
26
27 #include <stdint.h>
28 #include "asm/br23.h"
29 #include "asm/mcpwm.h"
30 #include "asm/clock.h"
31 #include "asm/gpio.h"
32
33 #define PWM_HZ_MAX (1000 * 1000) // max 1MHz (recommand below 40KHz on HB-L)
34 #define GPIO_PWM_MAX 6
35 #define GPIO_UART_MAX 3
36 #define GPIO_PULSE_MAX 4
37
38 typedef struct {
39 uint8_t used;
40 uint32_t lhchannel;
41 uint32_t freq;
42 uint8_t duty;
43 uint8_t inverse;
44 struct pwm_platform_data handle;
45 uint8_t ch;
46 } pwm_info_t;
47
48 typedef struct {
49 UNI_TIMER_TypeDef *timer_handler;
50 int timer_id;
51 int port;
52 int period_ms;
53 int times;
54 int def_val;
55 uint8_t used;
56 uint8_t is_top;
57 } gpio_pulse_t;
58
64 typedef enum {
65 UNI_GPIO_LEVEL_LOW = 0,
66 UNI_GPIO_LEVEL_HIGH
67 } UNI_GPIO_LEVEL_E;
68
72 typedef enum {
73 UNI_GPIO_DIRECTION_OUTPUT = 0,
74 UNI_GPIO_DIRECTION_INPUT,
75 } UNI_GPIO_DIRECTION_E;
76
80 typedef enum {
81 UNI_PIN_NUM_1 = IO_PORT_DM,
82 UNI_PIN_NUM_2 = IO_PORT_DP,
83 UNI_PIN_NUM_3 = IO_PORTA_01,
84 UNI_PIN_NUM_4 = IO_PORTA_00,
85 UNI_PIN_NUM_13 = IO_PORTB_11,
86 UNI_PIN_NUM_14 = IO_PORTB_10,
87 UNI_PIN_NUM_15 = IO_PORTB_09,
88 UNI_PIN_NUM_16 = IO_PORTB_08,
89 UNI_PIN_NUM_17 = IO_PORTB_05,
90 UNI_PIN_NUM_20 = IO_PORTB_01,
91 } UNI_PIN_NUM_E;
92
96 typedef enum {
97 UNI_FUNC_GPIO,
98 UNI_FUNC_UART_TX,
99 UNI_FUNC_UART_RX,
100 UNI_FUNC_PWM
101 } UNI_PIN_FUNC_E;
104 typedef enum {
105 UNI_PWM0H = 0,
106 UNI_PWM0L,
107 UNI_PWM1H,
108 UNI_PWM1L,
109 UNI_PWM2H,
110 UNI_PWM2L,
111 UNI_PWM3H,
112 UNI_PWM3L,
113 UNI_PWM4H,
114 UNI_PWM4L,
115 UNI_PWM5H,
116 UNI_PWM5L,
117 } UNI_PWM_LR_E;
118
126 void user_pin_set_func(UNI_PIN_NUM_E user_pin, UNI_PIN_FUNC_E user_func);
127
135 int user_gpio_set_direction(UNI_PIN_NUM_E user_pin, UNI_GPIO_DIRECTION_E direction);
136
142 int user_gpio_get_level(UNI_PIN_NUM_E pin);
143
151 int user_gpio_set_level(UNI_PIN_NUM_E user_pin, UNI_GPIO_LEVEL_E level);
165 int user_pwm_init(UNI_PIN_NUM_E user_pin, uint32_t freq, uint8_t inverse, uint8_t duty);
173 int user_pwm_duty_inc(uint32_t lhchannel, uint8_t det_duty);
181 int user_pwm_duty_dec(uint32_t lhchannel, uint8_t det_duty);
189 int user_pwm_enable(uint32_t lhchannel, uint8_t duty);
196 int user_pwm_disable(uint32_t lhchannel);
197
205 int user_pwm3_start(u32 freq, u32 duty);
210 void user_pwm3_set_duty(u32 duty);
214 void user_pwm3_stop(void);
230 int user_uart_init(UNI_PIN_NUM_E tx_pin, UNI_PIN_NUM_E rx_pin, uint32_t baudrate,
231 int data_bits, int stop_bits, int parity);
240 int user_uart_send(int port, uint8_t *data, uint32_t size);
249 uint32_t user_uart_recv(int port, uint8_t *data, uint32_t size, uint32_t timeout);
258 int user_uart_recv_byte(int port, uint8_t *data, uint32_t timeout);
272 int user_sw_timer_gpio_pulse(UNI_PIN_NUM_E user_pin, int period_ms, int times, uint8_t dev_val);
274 #endif


蜂鸟B: D:/temp/unione_lite_app_hb_b/apps/soundbox/smartbox/unisound/user/user_player.h 源文件

  • temp
  • unione_lite_app_hb_b
  • apps
  • soundbox
  • smartbox
  • unisound
  • user
user_player.h
1 /**************************************************************************
2 * Copyright (C) 2017-2017 Unisound
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 **************************************************************************
18 *
19 * Description : user_player.h
20 * Author : yuanshifeng@unisound.com
21 * Date : 2021.06.17
22 *
23 **************************************************************************/
24 #ifndef USER_INC_USER_PLAYER_H_
25 #define USER_INC_USER_PLAYER_H_
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
40 int user_player_play(const char *file);
41
49 int user_player_reply_list_num(const char *file_list, int num);
50
57 int user_player_reply_list_random(const char *file_list);
58
65 int user_player_reply_list_in_order(const char *file_list);
66
72 int user_player_stop(void);
73
77 int user_player_set_volume_min(void);
78
82 int user_player_set_volume_max(void);
83
87 int user_player_set_volume_mid(void);
88
92 int user_player_set_volume_up(void);
93
97 int user_player_set_volume_down(void);
98
102 int user_player_speaker_mute(void);
103
107 int user_player_speaker_unmute(void);
108
112 int user_player_init(void);
115 #ifdef __cplusplus
116 }
117 #endif
118 #endif
119


蜂鸟B: D:/temp/unione_lite_app_hb_b/apps/soundbox/smartbox/unisound/user/user_timer.h 源文件

  • temp
  • unione_lite_app_hb_b
  • apps
  • soundbox
  • smartbox
  • unisound
  • user
user_timer.h
1 #ifndef USER_TIMER_H_
2 #define USER_TIMER_H_
3
4 typedef void (*user_timer_cb)(void *);
5
16 uint16_t user_timer_create(uint32_t msec, bool single_shot, user_timer_cb cb, void *priv);
23 int user_timer_delete(uint16_t id, bool single_shot);
25 #endif