LD3320为内核是51单片机,LD3320当输入不同的语句通过串口输出相应的代码,利用STM32与51单片机的串口通讯,将代码传输给STM32实现STM32端口控制。
LD3320程序与STM32全部程序,自己编写程序。
程序代码下载地址https://download.csdn.net/download/qq_42258981/12261782
视频展示
https://www.bilibili.com/video/BV1JE411F7mB/
硬件资源:
1:PB11(USART3_RX),PB10(USART3_TX),STM32的RXD,DS0,DS1
2:LD3320
实验现象:
当说“左侧”DS0亮,DS1灭,串口打印“code is 0”;当说“右侧”DS0灭,DS1灭,串口打印“code is 1”;当说“全开”,DS0与DS1全亮 ,串口打印“code is 2” 。
注意事项:
1:STM32串口,51串口波特率以及电脑端串口调试助手波特率均为9600。
2:51的TX端口与STM32的PB11(USART3_RX)端口连接;51的RX端口不接;STM32的PB10(USART3_TX)端口与STM32的RXD端口连接。
3:DS0,DS1均为STM32Mini板板上硬件资源。
硬件连接图
结果演示
STM32F103RCT语音模块LD3320
51语音程序
添加关键词
uint8 LD_AsrAddFixed()
{
uint8 k, flag;
uint8 nAsrAddLength;
#define DATE_A 11 /*Êý×é¶þάÊýÖµ*/
#define DATE_B 20 /*Êý×éһάÊýÖµ*/
uint8 code sRecog[DATE_A][DATE_B] =
{
"xiao long",\
"zuo ce",\
"you ce",\
"quan kai",\
};
与STM32串口通讯程序
void User_handle(uint8 dat)
{
if(0==dat)
{
G0_flag=ENABLE;
LED=0;
}
else if(ENABLE==G0_flag)
{
G0_flag=DISABLE;
LED=1;
switch(dat)
{
case CODE_1: /*left*/
UARTSendByte(0x00);
SRD1 = 1;
PrintCom("0 Left\r\n");
break;
case CODE_2: /*right*/
UARTSendByte(0x01);
SRD1 = 0;
PrintCom("1 Right\r\n");
break;
case CODE_3: /*Turn On*/
UARTSendByte(0x02);
SRD2 = 1;
PrintCom("2 Turn On\r\n");
break;
default:/*text.....*/
break;
}
}
else
{
PrintCom("come on"); /*text.....*/
}
}
STM32串口3初始化省略,直接上主程序
STM32主程序
int main(void)
{
u8 len;
u16 times=0;
u8 get=0;
HAL_Init();
Stm32_Clock_Init(RCC_PLL_MUL9);
delay_init(72);
uart_init(9600);
uart3_init(9600);
LED_Init();
while(1)
{
if(USART3_RX_STA&0x8000)
{
len=USART3_RX_STA&0x3fff;//
get=USART3_RX_BUF[0]; printf("\r\n\r\ncode is %d\r\n", get);
switch(get)
{
case 0: {LED0=0;LED1=1;} break;
case 1: {LED0=1;LED1=0;} break;
case 2: {LED0=0;LED1=0;} break;
default: {LED0=1;LED1=1;}break;
}
HAL_UART_Transmit(&UART3_Handler,(uint8_t*)USART3_RX_BUF,len,1000);
while(__HAL_UART_GET_FLAG(&UART3_Handler,UART_FLAG_TC)!=SET);
USART3_RX_STA=0;
}
}
}