1.海凌科離線語音模塊百科
??HLK-V20-SUIT是海凌科電子推出的一款高性能純離線語音識別模塊,專為智能家居、智能小家電及物聯網設備設計,憑借其高性價比、靈活定制化和低功耗特性,成為語音控制領域的熱門選擇。該模塊采用32位RSIC架構核心,集成DSP指令集、FPU浮點運算單元及FFT加速器,通過神經網絡算法對音頻信號進行深度訓練,顯著提升語音識別準確率,在安靜環境下識別率超過95%,即使在辦公室或音樂播放等嘈雜場景中,仍能保持75%以上的識別率,誤喚醒率低于1次/24小時,確保設備穩定響應。支持150條本地指令存儲,用戶可通過海凌科語音定制后臺系統自由配置喚醒詞、命令詞及應答語,無需復雜編程即可快速生成專屬SDK,滿足個性化需求。模塊提供UART、GPIO、PWM等豐富接口,可輕松連接動圈揚聲器、駐極體麥克風等外圍設備,僅需少量外圍元件即可實現語音交互功能,開發周期短,成本可控。其工作電壓為5V,平均待機功耗僅63mA,工作電流約60mA,適合電池供電場景,如智能門鎖、無線音箱等設備。
??該模塊尺寸緊湊(封裝模塊設計),便于集成到各類產品中,尤其適用于空間受限的設備。其應用場景廣泛,涵蓋智能家居(如語音控制風扇、插座、燈泡、空調)、智能小家電(如智能茶壺、故事機、掃地機)、工業控制(如設備語音操作)、醫療監護(如語音呼叫系統)等領域。例如,用戶可通過語音指令“打開空調”或“調暗燈光”,無需手動操作,提升生活便捷性;在工業場景中,工人可通過語音控制設備啟動或停止,提高作業效率。支持離線識別,無需聯網即可使用,避免了網絡延遲或斷網導致的功能失效問題,同時保護用戶隱私數據。此外,模塊兼容輕量級RTOS系統,資源占用低,運行穩定,適合資源有限的嵌入式設備。對于開發者而言,海凌科提供詳細的技術文檔和開發工具,降低開發門檻,加速產品上市。
??綜合來看,HLK-V20-SUIT以高性能、低功耗、易定制和廣適配性為核心優勢,為語音控制設備提供了可靠的解決方案。無論是追求性價比的智能家居廠商,還是需要快速迭代的物聯網開發者,該模塊均能滿足需求,助力產品實現智能化升級。
??模組實物如下:

2.HLK-V20-SUIT模組集成
??HLK-V20-SUIT模組采用串口通訊方式,語音詞條響應成功通過串口返回應答信息,其硬件接口設計如下:

??該模組采用5V供電,自帶功放電路,直接接入揚聲器(8Ω1W)即可輸出,麥克風輸入也無需外置處理電路,直接接入即可,靈敏度為-38DB。硬件實物如圖所示:

3.HLK-V20-SUIT自制語音詞條
3.1 創建產品
HLK-V20-SUIT模組支持自定義語音詞條,登錄海凌科官網,注冊賬號。海凌科官網地址:[海凌科官網地址](https://www.hlktech.com/)

??滑動到最下面可看到語音定制系統。

??進行賬號注冊,登錄平臺。

??選中產品接入,完成產品創建。

??選中產品接入,完成產品創建。

3.2 創建SDK


3.3 設置語言詞條信息
??1.設置前端信號處理。

??2.設置串口通訊參數

??3.設置語音喚醒詞條

??4.設置離線詞條信息

??5.設置應答返回數據格式

??6.發音和音量設置

??7.其他設置

??8.發布SDK,發布成功即可下載SDK包

4.SDK離線包固件燒寫??
1.下載固件燒寫工具。下載地址:[固件燒寫工具](https://h.hlktech.com/Mobile/download/FDetail/93.html)

??2.本系統板已預留固件升級接口,接口電路如下:


??在硬件失實物上,C_RX與PA9連接、TX與PA10連接則是給STM32系統板燒寫程序;C_RX與H_RX連接、TX與H_TX連接則是給海凌科模組燒寫固件。因此本次需要將跳線帽將C_RX與H_RX連接、TX與H_TX連接。
??在下載的SDK包中“uni_hb_m_solution-xxxx-xxxx”目錄下的uni_app_debug_update.bin 和uni_app_release_update.bin 是用于 usb 升級的固件。usb升級的固件不能有中文路徑。
4.2 驅動安裝
??使用Type-C數據線與開發板連接,識別成功將自動識別到COM口。

??選中好要燒寫的uni_app_release_update.bin 文件。

??點擊燒錄按鈕, 如圖所示,提示欄顯示等待設備。(注意:此時設備不要上電)。

??如下圖為海凌科模組供電引腳,點擊燒錄前先拔掉該跳線帽,出現等待設備后再插上該跳線帽。

??下載完成如下:

??至此,固件燒寫完成。
5.模塊驅動
HLK-V20模塊采用串口串口2驅動,串口通訊波特率為115200,數據幀格式為1bit起始信號+8bit數據位+1bit停止信號,無校驗位。驅動程序如下:
/*
串口初始化
形參:USARTx --要初始化的串口(USART1、USART3、USART2)
buad --要設置的波特率
*/
void USARTx_Init(USART_TypeDef *USARTx,u32 buad)
{
if(USARTx == USART1)
{
//1.開時鐘
RCC->APB2ENR|=1<2;//PA
RCC-?>APB2ENR|=1<14;//usart1
RCC-?>APB2RSTR|=1<14;//復位時鐘
RCC-?>APB2RSTR&=~(1<14);//取消復位
//2.配置GPIO
GPIOA-?>CRH&=0xFFFFF00F;
GPIOA->CRH|=0x000008B0;
USART1->BRR=72000000/buad;//設置波特率
#ifdef USART1_IRQ
USART1->CR1|=1<4;//IDLE空閑幀中斷
USART1-?>CR1|=1<5;//串口接收中斷使能
STM32_SetNVICPriority(1,1,USART1_IRQn);//設置優先級,使能中斷線
#endif
}
else if(USARTx == USART2)
{
/*1.開時鐘*/
RCC-?>APB2ENR|=1<2;//PA時鐘
RCC-?>APB1ENR|=1<17;//USART2時鐘
RCC-?>APB1RSTR|=1<17;//開復位時鐘
RCC-?>APB1RSTR&=~(1<17);//取消復位
/*2.配置GPIO口*/
GPIOA-?>CRL&=0xFFFF00FF;//清除原來寄存器中的值
GPIOA->CRL|=0x00008B00;
//3.配置串口3核心功能
USART2->BRR=36000000/buad;//波特率
#ifdef USART2_IRQ
USART2->CR1|=1<5;//串口2接收中斷
USART2-?>CR1|=1<4;//空閑幀中斷
STM32_SetNVICPriority(1,1,USART2_IRQn);//設置優先級
#endif
}
else if(USARTx == USART3)
{
//1.開時鐘
RCC-?>APB2ENR|=1<3;//PB
RCC-?>APB1ENR|=1<18;//USART3
RCC-?>APB1RSTR|=1<18;//復位時鐘
RCC-?>APB1RSTR&=~(1<18);//取消復位
//2.配置GPIO
GPIOB-?>CRH&=0xFFFF00FF;
GPIOB->CRH|=0x00008B00;
//3.配置串口3核心功能
USART3->BRR=36000000/buad;//波特率
#ifdef USART3_IRQ
USART3->CR1|=1<4;//IDLE空閑幀中斷
USART3-?>CR1|=1<5;//串口接收中斷使能
STM32_SetNVICPriority(1,1,USART3_IRQn);//設置優先級,使能中斷線
#endif
}
USARTx-?>CR1|=1<3;//使能發送
USARTx-?>CR1|=1<2;//使能接收
USARTx-?>CR1|=1<13;//使能串口
}
u8 usart2_buffer[1024];//串口1接收數據緩沖區
u16 usart2_cnt=0;//保存數組下班
u8 usart2_flag;//接收完成標志符
void USART2_IRQHandler(void)
{
u8 c;
if(USART2-?>SR&1<5)//判斷是否接收中斷觸發
{
c=USART2-?>DR;
// USART1->DR=c;
if(usart2_flag==0)//判斷上一次數據是否處理完成
{
if(usart2_cnt1024)
{
usart2_buffer[usart2_cnt++]=c;
}
else usart2_flag=1;
}
}
if(USART2-?>SR&1<4)
{
c=USART2-?>DR;
c=c;
usart2_flag=1;
}
}
主函數:
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "usart1.h"
#include "timer.h"
#include "esp8266.h"
#include "oled.h"
#include "rtc.h"
#include
#include
#include
int main()
{
LED_Init();//LED
Key_Init();
USARTx_Init(USART1,115200);//一個字符的收發時間:1s/(115200/10)=86us
USARTx_Init(USART2,115200);
USARTx_Init(USART3,115200);
OLED_Init();
OLED_DispalyFont(32,0,16,font_16[0]);
OLED_DispalyFont(32+16,0,16,font_16[1]);
OLED_DispalyFont(32+16*2,0,16,font_16[2]);
OLED_DispalyFont(32+16*3,0,16,font_16[3]);
OLED_Refresh();
RTC_Init();
u16 key=0;
while(1)
{
if(usart2_flag)
{
if(usart2_cnt==3)
{
if(usart2_buffer[0]==0x77 && usart2_buffer[2]==0x0a)
{
switch(usart2_buffer[1])
{
case 1://開燈
LED1=0;
break;
case 7://關燈
LED1=1;
break;
}
}
}
// printf("rx2=%s,%dn",usart2_buffer,usart2_cnt);
usart2_flag=0;
usart2_cnt=0;
}
}
}
??
-
STM32
+關注
關注
2309文章
11162瀏覽量
373402 -
串口
+關注
關注
15文章
1618瀏覽量
82806 -
語音識別
+關注
關注
39文章
1812瀏覽量
116042 -
系統板
+關注
關注
0文章
10瀏覽量
6497
發布評論請先 登錄
基于STM32的智慧物聯網系統板
【Nuvoton ISD9160語音識別申請】基于語音識別的老人突發情況報警系統
【NXP LPC54110試用申請】TreeOS物聯網實時操作系統語音識別底層驅動
物聯網在智慧醫療領域的應用有哪些?
乘物聯網之風,智慧物流發展邁向新臺階
基于機智云物聯網技術的寢室系統設計
STM32F103C8T6 LD3320語音識別模塊非特定識別人聲 離線控制 智能家居 開發板
基于STM32的智慧物聯網系統板---離線語音模塊使用
評論