基于STM32的物联网智能家居语音控制系统设计
目录第1章引言71.1选题的背景及意义71.2智能家居技术的发展历程81.2.1国内智能家居技术发展情况91.2.2国外智能家居技术的发展情况91.3本课题研究目标及主要研究内容91.3.1研究目标91.3.2研究内容和方法101.3.3主要考核要求或指标10第2章单片机及相关器件介绍112.1主控芯片简介112.2主要器件介绍——LD3320112.2.1功能介绍122.2.2电路说明132.3DC3V-6V直流减速电机142.4电机驱动模块152.5继电器模块152.5.1继电器介绍152.5.2电磁继电器工作原理162.5.3继电器模块电路17第3章系统软件设计183.1MDK5简介183.2FlyMcu代码烧写工具193.3sourceinsight介绍193.4程序流程图213.5软件功能代码223.5.1主程序部分223.5.2STM32的IO输出部分223.5.3语音控制部分233.5.4外部按键控制24第4章系统硬件设计254.1元器件清单254.2电路原理图简介264.3硬件实物成果图27第5章系统调试与系统效果展示285.1系统软硬件调试285.1.1硬件检查285.1.2硬件功能检查285.2软件功能模块的调试285.3智能家居语音控制系统效果展示295.3.1房间灯控制295.3.2大厅灯控制305.3.3取暖器控制305.3.3窗帘开关控制315.4智能家居语音控制系统不足与展望31第7章参考文献34程序36第5章系统调试与系统效果展示5.1系统软硬件调试完成了软件的编程和硬件的搭建之后,下一步的主要工作就是对软硬件系统进行整体的调试工作了。调试工作对于整个设计来说必不可少,以防止硬件连接错误造成的元器件损坏,同时也能够有效避免设计的不合理带来的安全问题。系统软硬件调试主要包含两个主要内容,一个是对硬件部分的检查和调试。另外一个则是对软件系统进行检查和调试。如果软件和硬件都没有问题,接下来则是对软硬件系统进行整体调试。5.1.1硬件检查硬件检查主要包含以下三个方面的检查:1.检查硬件焊接是不是有虚焊。2.对照电路图检查是不是有焊接错误。3.线路连接是不是有问题。5.1.2硬件功能检查硬件功能检查则是根据编写的语言要求,通电之后检查是不是能按照程序运行。该过程可以设置简单的LED显示来判断硬件电路连接有无故障。
5.2软件功能模块的调试软件功能调试则是对软件部分的程序进行详细检查,其中包含函数初始化部分,包括按键的初始化定义,LED用到的GPIO口定义,以及定时器和外部中断的初始化定义等。一旦出现了Bug或者程序没有按照指定想法运行,该部分出现错误的可能性较大,因此,初始化部分也是软件检查的第一步。本文转载自http://www.biyezuopin.vip/onews.asp?id=14488接下来则对主函数中的功能程序部分进行详细检查,因为程序可能出现跑飞或者卡死的情况,或者出现同一个IO口重复定义或者使用,导致排插困难的情况。因此,需要对用到的每一个模块进行软件功能模块的调试,从而确保所用到的每一个功能模块都能够正常工作,最后才能进行整体软硬件的调试。5.3智能家居语音控制系统效果展示在完成智能家居语音控制系统的软硬件调试之后,发现了一系列问题,解决各种问题之后,接下来就到了系统效果展示的环节。由于调试工程中将问题都一一解决了,因此,软硬件联合测试比较顺利。下图21是系统通电之后的效果图。该系统中通过充电宝给取暖器进行加热,为了保证实验过程中的安全性,图中采用加热片来代替取暖器。通过STM32的IO口来控制继电器的通断从而来控制取暖器的加热与否,也能够实现效果。
/***************************飞音云电子******************************文件名称:LDV4语音识别开发板基础版驱动程序**CPU:STM32f103RCT6**晶振:8MHZ**波特率:9600bit/S**配套产品信息:YS-LDV4语音识别开发板**说明:本程序具备语音识别、串口通信、开发板基本功能演示。***************************飞音云电子******************************//*************端口信息*********************接线说明LD3320接口STM32接口*RSTPB6*CSPB8*WR/SPISPB9*P2/SDCKPB3*P1/SDOPB4*P0/SDIPB5*IRQPC1*A0PB7*RDPA0--------------------------*K1RST(复位键)*K2PA1(U盘处罚按键(加强版程序才有))*K3PA2(未定义功能)*LED1PC4(流水灯)*LED2PC2(流水灯)*LED3PC3(流水灯)*LED4PC0(流水灯)*****************************************/#include"includes.h"/*Privatefunctionprototypes-----------------------------------------------*/voidRCC_Configuration(void);//voidNVIC_Configuration(void);voidUSART_Configuration(void);voidPrintCom(USART_TypeDef*USARTx,uint8_t*Data);voidPrintComBit(USART_TypeDef*USARTx,uint8_tData);externvoidLD3320_main(void);/************************************************************名称:主函数*功能:程序入口*入口参数:无*出口参数:无*说明:无*调用方法:无**********************************************************/intmain(void){/*SystemClocksConfiguration*/RCC_Configuration();//外设时钟配置delay_init(72);//延时函数初始化USART_Configuration();//USART配置LD3320_main();//LD3320主函数函数while(1){};}/************************************************************名称:voidUSART_Configuration(void)*功能:串口配置*入口参数:*出口参数:*说明:*调用方法:**********************************************************/voidUSART_Configuration(void){USART_InitTypeDefUSART_InitStructure;GPIO_InitTypeDefGPIO_InitStructure;USART_InitStructure.USART_BaudRate=9600;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;/*ConfigureUSART1*/USART_Init(USART1,&USART_InitStructure);//类似与GPIO口,配置完后初始化一次USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//使能接收中断USART_ITConfig(USART1,USART_IT_TXE,ENABLE);//使能发送中断USART_Cmd(USART1,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//USART1TXGPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出GPIO_Init(GPIOA,&GPIO_InitStructure);//A端口GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//USART1RXGPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//复用开漏输入GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//A端口}/************************************************************名称:voidPrintCom(USART_TypeDef*USARTx,uint8_t*Data)*功能:串口数据打印*入口参数:*出口参数:*说明:*调用方法:**********************************************************/voidPrintCom(USART_TypeDef*USARTx,uint8_t*Data){while(*Data){USART_SendData(USARTx,*Data++);/*发送单个数据*/while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET);/*检查指定的USART标志位即RESET=1时发送完成*/}}voidPrintComBit(USART_TypeDef*USARTx,uint8_tData){USART_SendData(USARTx,Data);/*发送单个数据*/while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET);/*检查指定的USART标志位即RESET=1时发送完成*/}/************************************************************名称:voidRCC_Configuration(void)*功能:配置外设时钟*入口参数:*出口参数:*说明:*调用方法:**********************************************************/voidRCC_Configuration(void){SystemInit();/*EnableUSART1,GPIOA,GPIOxandAFIOclocks*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOE,ENABLE);//开启相关的AHP外设时钟/*EnableUSART2clock*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);}/***@briefConfiguresthedifferentGPIOports.*@paramNone*@retval:None*/