LD3320语音识别
LD3302 | 5v(stm32电流不行,需额外供电) | GND | RXD | TXD |
stm32 | PB10 | PB11 |
报错
'C:\ Kei\ TOOLS.INI' does not contain a valid tool path for 'C51'.
The selected device has no corresponding toolchain installed.
Either use'Project-Select Device'to change the device for the project, or install
the missing toolchain.
解决办法:https://blog.csdn.net/limingliang_/article/details/80851656
main.c
void User_handle(uint8 dat) 口令识别后提示收到
void User_handle(uint8 dat)
{
//UARTSendByte(dat);//串口识别码(十六进制)
if(0==dat)
{
G0_flag=ENABLE;
LED=0;
PrintCom("收到\r\n"); /*text.....*/
}
else if(ENABLE==G0_flag)
{
G0_flag=DISABLE;
LED=1;
switch(dat) /*对结果执行相关操作,客户可删除Printcom 串口输出语句替换为其他需要控制的代码*/
{
case 1: /*命令“测试”*/
PrintCom("“代码测试”命令识别成功\r\n"); /*text.....*/
break;
case 2: /*命令“全开”*/
PrintCom("“开发板验证”命令识别成功\r\n"); /*text.....*/
break;
case 3: /*命令“复位”*/
PrintCom("“开灯”命令识别成功\r\n"); /*text.....*/
break;
case 4: /*命令“复位”*/
PrintCom("“关灯”命令识别成功\r\n"); /*text.....*/
break;
case 5: /*命令“复位”*/
PrintCom("“北京”命令识别成功\r\n"); /*text.....*/
break;
case 6: /*命令“复位”*/
PrintCom("“上海”命令识别成功\r\n"); /*text.....*/
break;
case 7: /*命令“复位”*/
PrintCom("“广州”命令识别成功\r\n"); /*text.....*/
break;
default:PrintCom("请重新识别发口令\r\n"); /*text.....*/break;
}
}
else
{
PrintCom("请说出一级口令\r\n"); /*text.....*/
}
}
E:\app\my\LDV7\code\LDChip.c
uint8 LD_AsrAddFixed() 关键字输入
uint8 LD_AsrAddFixed()
{
uint8 k, flag;
uint8 nAsrAddLength;
#define DATE_A 9 /*数组二维数值*/
#define DATE_B 20 /*数组一维数值*/
uint8 code sRecog[DATE_A][DATE_B] = {
"xiao yang",\
"kai fa ban yan zheng",\
"dai ma ce shi",\
"kai deng",\
"guan deng",\
"bei jing",\
"shang hai",\
"guang zhou"
}; /*添加关键词,用户修改*/
uint8 code pCode[DATE_A] = { 0, 1,2,3,4,5,6,7,8
}; /*添加识别码,用户修改*/
flag = 1;
for (k=0; k<DATE_A; k++)
{
if(LD_Check_ASRBusyFlag_b2() == 0)
{
flag = 0;
break;
}
LD_WriteReg(0xc1, pCode[k] );
LD_WriteReg(0xc3, 0 );
LD_WriteReg(0x08, 0x04);
delay(1);
LD_WriteReg(0x08, 0x00);
delay(1);
for (nAsrAddLength=0; nAsrAddLength<DATE_B; nAsrAddLength++)
{
if (sRecog[k][nAsrAddLength] == 0)
break;
LD_WriteReg(0x5, sRecog[k][nAsrAddLength]);
}
LD_WriteReg(0xb9, nAsrAddLength);
LD_WriteReg(0xb2, 0xff);
LD_WriteReg(0x37, 0x04);
}
return flag;
}
编译后自动生成到\obj\V07A.hex文件
下载工具使用stc-isp-15xx-v6.86I.exe
单片机选择STC11L32XE
下载时候拿掉gnd,在连接上就烧录就去了
Ld3320的main.c的PrintCom打印的可以用stm32串口接收
D:\stm32\c8t6-继电器\USER\main.c
/*-----------------------------------------------------*/
/* */
/* 程序main函数,入口函数源文件 */
/* */
/*-----------------------------------------------------*/
#include "stm32f10x.h" //包含需要的头文件
#include "delay.h" //包含需要的头文件
#include "timer2.h" //包含需要的头文件
#include "timer3.h" //包含需要的头文件
#include "timer4.h" //包含需要的头文件
#include "led.h" //包含需要的头文件 LED
#include "ji.h"
#include "USART.h"
//变量声明
u8 RXBUF[20]; //串口存储数组
u8 RXOVER=0; //串口接收标志位
u8 RXCOUNT=0; //串口计数变量
u8 i; //清空数组变量
//函数声明
void RCC_Configuration(void);
void USART_Deal(void);
int main(void)
{
RCC_Configuration();
Delay_Init(); //延时功能初始化
//Usart1_Init(9600); //串口1功能初始化,波特率9600,默认PA9,PA10选9600
//Usart2_Init(115200); //串口2功能初始化,波特率115200
TIM4_Init(500,7200); //TIM4初始化,定时时间 500*7200*1000/72000000 = 50ms
JI_Init();
USART3_Init(9600);
while(1)
{
USART_Deal();
}
}
//外设时钟使能函数
void RCC_Configuration(void)
{
/* GPIOx enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
/* USART2 enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
}
//串口处理函数
void USART_Deal(void)
{
if(RXOVER)
{
RXOVER = 0; //清除接收标志位
switch(RXBUF[0]-48)
{
case 3:JI_On(); //点亮灯
break;
case 4:JI_Off(); //熄灭灯
break;
default: break;
}
USART3_SendString(RXBUF); //发送给pc机上面打印显示
for(i=0;i<20;i++) //将已接收数据的数组清空:共20个字符长度
{
RXBUF[i] = 0; //重置数据缓存区
}
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//始能串口接收
}
}
D:\stm32\c8t6-继电器\HARDWARE\scr\usart.c
#include "USART.h"
/*
PB10 :TXD
PB11 : RXD
*/
//串口IO初始化函数
void USART3_Init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure; //IO端口的初始化
USART_InitTypeDef USART_InitStructure; //串口的初始化
NVIC_InitTypeDef NVIC_InitStructure; //使能中断接收
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能IO端口的时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); //使能串口的时钟
//发送
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //发送引脚
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//接收
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //接收引脚
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = bound; //设置传输的波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //设置传输一帧数据的数据位
USART_InitStructure.USART_StopBits = USART_StopBits_1; //一位停止位
USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验位
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //能使接收的发送
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件流控制
USART_Init(USART3,&USART_InitStructure);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //优先级分组
NVIC_InitStructure.NVIC_IRQChannel= USART3_IRQn; //开启串口3的中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); //使能串口接收
USART_Cmd(USART3,ENABLE); //使能串口3
}
/*
函数名:USART3串口发送函数
功能: 发送数据
入口参数:发送的字符
*/
void USART3_SendString(u8 *str)
{
u8 index=0;
do
{
USART_SendData(USART3,str[index]); //逐一的发送数组中的内容
while(USART_GetFlagStatus(USART3,USART_FLAG_TXE) == RESET); //判断是否发送完 发完为高电平
index++;
}
while(str[index] != 0); //检查字符串结束标志
}
/*
函数名:USART3中断服务函数
功能: 接收数据
注意:接收数据长度可调:RXCOUNT
*/
void USART3_IRQHandler(void)
{
u8 temp;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART3,USART_IT_RXNE);
temp = USART_ReceiveData(USART3);
if(temp == '\n' || RXCOUNT == 20) //判断是否接收到一个完整字符
{
RXCOUNT = 0;
RXOVER =1; //接收数据完成标志位置1
USART_ITConfig(USART3,USART_IT_RXNE,DISABLE);//失能串口接收中断标志
}
else
{
RXBUF[RXCOUNT] = temp; //依次存放到数组中
RXCOUNT++; //字符长度变化
}
}
}
D:\stm32\c8t6-继电器\HARDWARE\inc\USART.h
#ifndef __USART_H
#define __USART_H
#include "stm32f10x.h"
//变量引用
extern u8 RXBUF[20];
extern u8 RXOVER;
extern u8 RXCOUNT;
void USART3_Init(u32 bound);
void USART3_SendString(u8 *str);
#endif
本文作者: 永生
本文链接: https://yys.zone/detail/?id=216
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
发表评论
评论列表 (0 条评论)
暂无评论,快来抢沙发吧!