簡介
買了HI-LINK-V20型號(hào)的離線語音識(shí)別模塊, 為了后面可以做有意思的東西, 現(xiàn)在先來用用, 使用USART2 串口 接收來自我在HI-LINK-V20中預(yù)設(shè)的動(dòng)作, 當(dāng)識(shí)別到詞條時(shí)發(fā)送對(duì)應(yīng)的指令到串口, HI-LINK串口接的就是STM32F03ZET6的USART2, 且往下看。
電路原理圖
連線圖
連線引腳表
板 | ||||
---|---|---|---|---|
STM32F103ZET6 | RX(PA3) | TX(PA2) | 3.3V | GND |
HI-LINK-V20 | TX | RX | VCC | GND |
實(shí)物圖
其他知識(shí)
更新離線詞條
海凌科HLK-V2語音識(shí)別模塊更新詞條
協(xié)議
協(xié)議幀如上圖,
頭部 三字節(jié)
指令 兩字節(jié)
地址 四字節(jié)
值 四字節(jié)
尾部 兩字節(jié)
控?zé)糁噶?0x0A、燈的編址1~8\0xFF(全部燈), 燈的狀態(tài)是值0/1/0xFF(全部燈打開)
控制燈1打開, 指令是: AA BB CC 00 0A 00 00 00 01 00 00 00 01 0A 0D
控制全部燈打開是 : AA BB CC 00 0A 00 00 00 FF 00 00 00 FF 0A 0D
實(shí)現(xiàn)步驟
創(chuàng)建項(xiàng)目
參考 普中STM32-PZ6806L開發(fā)板(HAL庫函數(shù)實(shí)現(xiàn)-USART2 中斷接收)
添加用戶代碼
hlk_v20.h
#ifndef __HLK_V20_H__
#define __HLK_V20_H__
#include "stm32f1xx_hal.h"
#define HLK_V20_COMMAND_VERSION 0x01
uint8_t HLK_V20_PreActionCheck(uint8_t *dat, uint32_t len);
void HLK_V20_ActionCallback(uint16_t cmd, uint32_t addr, uint32_t value); // 檢測到完整指令, 將調(diào)用此函數(shù)
#endif //__HLK_V20_H__
hlk_v20.c
#include "hlk_v20.h"
#if HLK_V20_COMMAND_VERSION == 0x01
#define HLK_V20_COMMAND_LENGTH 15
#endif
__weak void HLK_V20_ActionCallback(uint16_t cmd, uint32_t addr, uint32_t value)
{
}
/*
* HLK_V20_PreActionCheck: 指令預(yù)處理
1. 檢查指令是否完整;
2. 解析完完整指令則調(diào)用HLK_V20_ActionCallback執(zhí)行指令
dat : buf
len : buf有效數(shù)據(jù)長度
return 0 : 命令不完整
1 : 命令完整并執(zhí)行
*/
uint8_t HLK_V20_PreActionCheck(uint8_t *dat, uint32_t len)
{
if (HLK_V20_COMMAND_LENGTH > len) // 數(shù)據(jù)長度要達(dá)到指令數(shù)據(jù)長度
return 0;
uint16_t cmd = 0;
uint32_t addr = 0;
uint32_t value = 0;
#if HLK_V20_COMMAND_VERSION == 0x01
/*
Frame:
Head : 0xAA 0xBB 0xCC -> 3字節(jié), 第1~3字節(jié)
CMD : 16bit -> 2 字節(jié), 第4~5字節(jié)
ADDR : 32bit -> 4字節(jié), 第6~9字節(jié)
Value: 32bit -> 4字節(jié), 第10~13字節(jié)
Tail : 0x0A 0x0D-> 2字節(jié), 第14~15字節(jié)
*/
if ( !(0xAA == dat[0] && 0xBB == dat[1] && 0xCC == dat[2] && 0x0A == dat[13] && 0x0D == dat[14]) )
{
return 0;
}
cmd = (dat[3]<<8)|dat[4];
addr = (dat[5]<<24) | (dat[6]<<16) | (dat[7]<<8) | dat[8];
value = (dat[9]<<24) | (dat[10]<<16) | (dat[11]<<8) | dat[12];
#endif
HLK_V20_ActionCallback(cmd, addr, value);
return 1;
}
綁定指令與相關(guān)功能
hlk_v20_demo.h
#ifndef __HLK_V20_DEMO_H__
#define __HLK_V20_DEMO_H__
#include "usart.h"
#define HLK_V20_DEMO_USART huart2
void HLK_V20_DEMO_Usart_RxCallback(UART_HandleTypeDef *huart);
void HLK_V20_DEMO_Action_Init(void);
#endif // __HLK_V20_DEMO_H__
hlk_v20_demo.c
#include "hlk_v20_demo.h"
#include "hlk_v20.h"
#include "LED/led.h"
#include "BEEP/beep.h"
#include <string.h>
#include <stdio.h>
static uint8_t gCmdBuffer[1024];
static uint16_t gCmdIndex = 0;
static void HLK_V20_Command_Reset(void)
{
memset(gCmdBuffer, 0, sizeof(gCmdBuffer)/sizeof(uint8_t));
gCmdIndex = 0;
}
void HLK_V20_ActionCallback(uint16_t cmd, uint32_t addr, uint32_t value)
{
switch (cmd)
{
case 0x0A:
{
if (addr == 0xff)
{
LED_LightControl(LED_ALL, (LED_Status)(0xFF==value?1:0));
printf ("LED_ALL %s!\r\n", value ? "ON":"OFF");
}
else
{
LED_LightControl((LED_Number)(addr-1), (LED_Status)value);
printf ("LED_%d %s\r\n", addr, value ? "ON":"OFF");
}
}
break;
case 0x0B:
BEEP_5KHzAction(5000);
break;
default:
break;
}
}
/*
HLK_V20_DEMO_Usart_RxCallback : 在Usart Ex中斷回調(diào)函數(shù)中調(diào)用此函數(shù)即可
*/
void HLK_V20_DEMO_Usart_RxCallback(UART_HandleTypeDef *huart)
{
if (HLK_V20_DEMO_USART.Instance == huart->Instance)
{
if ( !HLK_V20_PreActionCheck(gCmdBuffer, gCmdIndex+1) )
{
++gCmdIndex;
}
else
{
HLK_V20_Command_Reset();
}
HAL_UART_Receive_IT(&huart2, &gCmdBuffer[gCmdIndex], 1); // USART繼續(xù)中斷接收
}
}
/*
使用此功能前先調(diào)用一次, 開始接收任務(wù)
*/
void HLK_V20_DEMO_Action_Init(void)
{
HLK_V20_Command_Reset();
HAL_UART_Receive_IT(&HLK_V20_DEMO_USART, &gCmdBuffer[gCmdIndex], 1); // USART開始中斷接收
}
啟用功能
main.c
/*
串口接收中斷函數(shù)回調(diào)
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HLK_V20_DEMO_Usart_RxCallback(huart); // 加入HLK_V20數(shù)據(jù)處理
}
int main()
{
....
HLK_V20_DEMO_Action_Init();
...
while(1)
{
HAL_Delay(1000); // 延時(shí)獲得空閑資源
}
...
}
共賞
普中STM32-PZ6806L開發(fā)板(USART2 串口 + HI-LINK-V20離線語音模塊控制LED燈)
代碼
不需要下載, 基本代碼上面都提供了文章來源:http://www.zghlxwxcb.cn/news/detail-771066.html
參考
普中STM32-PZ6806L開發(fā)板(HAL庫函數(shù)實(shí)現(xiàn)-批量操作GPIO引腳實(shí)現(xiàn)跑馬燈)
海凌科HLK-V2語音識(shí)別模塊更新詞條
普中STM32-PZ6806L開發(fā)板(HAL庫函數(shù)實(shí)現(xiàn)-USART2 中斷接收)文章來源地址http://www.zghlxwxcb.cn/news/detail-771066.html
到了這里,關(guān)于普中STM32-PZ6806L開發(fā)板(USART2 串口 + HI-LINK-V20離線語音模塊控制LED燈)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!