国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

普中STM32-PZ6806L開發(fā)板(USART2 串口 + HI-LINK-V20離線語音模塊控制LED燈)

這篇具有很好參考價(jià)值的文章主要介紹了普中STM32-PZ6806L開發(fā)板(USART2 串口 + HI-LINK-V20離線語音模塊控制LED燈)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

簡介

買了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é)議

普中STM32-PZ6806L開發(fā)板(USART2 串口 + HI-LINK-V20離線語音模塊控制LED燈),普中STM32-PZ6806L,stm32,嵌入式硬件,單片機(jī),語音識(shí)別,普中
協(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燈)

代碼

不需要下載, 基本代碼上面都提供了

參考

普中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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32單片機(jī)(九)USART串口----第一節(jié):USART串口協(xié)議

    STM32單片機(jī)(九)USART串口----第一節(jié):USART串口協(xié)議

    ?? 專欄簡介:本專欄記錄了從零學(xué)習(xí)單片機(jī)的過程,其中包括51單片機(jī)和STM32單片機(jī)兩部分;建議先學(xué)習(xí)51單片機(jī),其是STM32等高級(jí)單片機(jī)的基礎(chǔ);這樣再學(xué)習(xí)STM32時(shí)才能融會(huì)貫通。 ?? 專欄適用人群 :適用于想要從零基礎(chǔ)開始學(xué)習(xí)入門單片機(jī),且有一定C語言基礎(chǔ)的的童鞋

    2024年02月16日
    瀏覽(165)
  • 【【STM32-USART串口協(xié)議】】

    【【STM32-USART串口協(xié)議】】

    USART串口協(xié)議 ?通信的目的:將一個(gè)設(shè)備的數(shù)據(jù)傳送到另一個(gè)設(shè)備,擴(kuò)展硬件系統(tǒng) ?通信協(xié)議:制定通信的規(guī)則,通信雙方按照協(xié)議規(guī)則進(jìn)行數(shù)據(jù)收發(fā) 就是我們并不能在芯片上設(shè)計(jì)完全部的一下子完成所有的設(shè)計(jì),我們總需要一些外設(shè) 所以需要學(xué)會(huì)通信接口 掌握通信協(xié)議來

    2024年02月12日
    瀏覽(26)
  • STM32——USART串口協(xié)議

    STM32——USART串口協(xié)議

    下圖是51單片機(jī)串口通信的區(qū)分,跟stm32差不多,51單片機(jī)的串口通信的uart是只能異步通信,而stm32串口的usart是同步跟異步都可以選擇,同步靠時(shí)鐘線,異步靠比特率,比特率就是通信速度不一樣,可以調(diào)成一樣的。 (1).圖一是串口通信的基本介紹。 (2).圖二是串口通信的連線

    2024年02月03日
    瀏覽(24)
  • STM32單片機(jī)(九)USART串口----第三節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送)

    STM32單片機(jī)(九)USART串口----第三節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送)

    ?? 專欄簡介:本專欄記錄了從零學(xué)習(xí)單片機(jī)的過程,其中包括51單片機(jī)和STM32單片機(jī)兩部分;建議先學(xué)習(xí)51單片機(jī),其是STM32等高級(jí)單片機(jī)的基礎(chǔ);這樣再學(xué)習(xí)STM32時(shí)才能融會(huì)貫通。 ?? 專欄適用人群 :適用于想要從零基礎(chǔ)開始學(xué)習(xí)入門單片機(jī),且有一定C語言基礎(chǔ)的的童鞋

    2024年02月10日
    瀏覽(98)
  • STM32單片機(jī)(九)USART串口----第四節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送+接收)

    STM32單片機(jī)(九)USART串口----第四節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送+接收)

    ?? 專欄簡介:本專欄記錄了從零學(xué)習(xí)單片機(jī)的過程,其中包括51單片機(jī)和STM32單片機(jī)兩部分;建議先學(xué)習(xí)51單片機(jī),其是STM32等高級(jí)單片機(jī)的基礎(chǔ);這樣再學(xué)習(xí)STM32時(shí)才能融會(huì)貫通。 ?? 專欄適用人群 :適用于想要從零基礎(chǔ)開始學(xué)習(xí)入門單片機(jī),且有一定C語言基礎(chǔ)的的童鞋

    2024年02月10日
    瀏覽(90)
  • 【STM32】STM32學(xué)習(xí)筆記-USART串口協(xié)議(25)

    【STM32】STM32學(xué)習(xí)筆記-USART串口協(xié)議(25)

    按數(shù)據(jù)傳送的方式,通訊可分為串行通訊與并行通訊,串行通訊是指設(shè)備之間通過少量數(shù)據(jù)信號(hào)線(一般是8根以下), 地線以及控制信號(hào)線,按數(shù)據(jù)位形式一位一位地傳輸數(shù)據(jù)的通訊方式。而并行通訊一般是指使用8、16、32及64根或更多的數(shù)據(jù)線進(jìn)行傳輸?shù)耐ㄓ嵎绞剑?它們的通

    2024年01月19日
    瀏覽(27)
  • 「STM32入門」USART串口通信

    「STM32入門」USART串口通信

    通信的目的:將一個(gè)設(shè)備的數(shù)據(jù)傳送到另一個(gè)設(shè)備,擴(kuò)展硬件系統(tǒng) 通信協(xié)議:制定通信的規(guī)則,通信雙方按照協(xié)議規(guī)則進(jìn)行數(shù)據(jù)收發(fā) 本文將介紹USART? 概念解釋 TX、RX分別是Transmit和Receive的縮寫,代表發(fā)送、接受數(shù)據(jù) 全雙工的含義是發(fā)送線路和接受線路互不影響,可以同時(shí)進(jìn)

    2024年02月06日
    瀏覽(88)
  • 【STM32】STM32學(xué)習(xí)筆記-USART串口數(shù)據(jù)包(28)

    【STM32】STM32學(xué)習(xí)筆記-USART串口數(shù)據(jù)包(28)

    串口通訊(Serial Communication)是一種設(shè)備間非常常用的串行通訊方式,因?yàn)樗唵伪憬荩虼舜蟛糠蛛娮釉O(shè)備都支持該通訊方式, 電子工程師在調(diào)試設(shè)備時(shí)也經(jīng)常使用該通訊方式輸出調(diào)試信息。 在計(jì)算機(jī)科學(xué)里,大部分復(fù)雜的問題都可以通過分層來簡化。如芯片被分為內(nèi)核層和

    2024年01月18日
    瀏覽(33)
  • stm32學(xué)習(xí)筆記-9 USART串口

    stm32學(xué)習(xí)筆記-9 USART串口

    注:筆記主要參考B站 江科大自化協(xié) 教學(xué)視頻“STM32入門教程-2023持續(xù)更新中”。 注:工程及代碼文件放在了本人的Github倉庫。 從本節(jié)開始,將逐一學(xué)習(xí)STM32的通信接口。首先介紹以下stm32都集成了什么通信外設(shè)。 為了控制或讀取外掛模塊,stm32需要與外掛模塊進(jìn)行通信,來擴(kuò)

    2024年02月14日
    瀏覽(20)
  • STM32CubeMX實(shí)現(xiàn)USART串口通信

    STM32CubeMX實(shí)現(xiàn)USART串口通信

    硬件:stm32f103c8t6核心板 軟件:STM32CubeMX 6.6.1 keil5 mdk 這里就不再詳細(xì)介紹了,詳細(xì)請(qǐng)參考上一篇博客: https://blog.csdn.net/qq_55894922/article/details/127232999?spm=1001.2014.3001.5501 若點(diǎn)擊 Manage embedded software packages 后,出現(xiàn)失敗,則需要隨便點(diǎn)擊其它任一選項(xiàng),進(jìn)行下載一些文件,比如點(diǎn)

    2023年04月17日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包