找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10555|回复: 17
收起左侧

STM32控制语音识别SYN6288+合成模块程序YS-LDV7语音识别

  [复制链接]
ID:383531 发表于 2018-8-6 18:11 | 显示全部楼层 |阅读模式
前端日子比赛,买了一块SYN6288的语音合成模块和YS-LDV7语音识别,但是程序是51的,所以自己手动改写成了stm32版的,而且还附带了语音控制开关灯的代码,有需要的可以看一下
  1. #include "stm32f10x.h"
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include  "SYN6288.h"
  5. #define RxBufferSize 10

  6. void RCC_Configuration(void);
  7. void GPIO_Configuration(void);
  8. void NVIC_Configuration(void);
  9. void USART_Configuration(void);
  10. int fputc(int ch, FILE *f);
  11. void delay_nms(u16 time);//延时子程序
  12. extern void SYN_FrameInfo(uint8_t Music,uint8_t *HZdata);

  13. unsigned char RxBuffer[RxBufferSize];
  14. unsigned char CmdBuffer[RxBufferSize];
  15. extern unsigned char Rx_Flag=0;
  16. unsigned char RxCounter=0;
  17. u16 i;
  18. /*-----------------------------------------------------main函数-----------------------------------------------------*/       
  19. int main(void)
  20. {
  21. //USART_ITConfig(USART1, USART_IT_TXE, ENABLE); // 开启发送
  22. RCC_Configuration();
  23. NVIC_Configuration();
  24. GPIO_Configuration();
  25. USART_Configuration();
  26. USART_ClearFlag(USART2,USART_FLAG_TC);//清发送结束位
  27.   serial3_init();
  28. while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);
  29. //  printf("打开LED灯,请输入LEDON!\n");
  30. //  printf("关闭LED灯,请输入LEDOFF!\n");
  31. //  printf("输入错误的话,LED灯闪烁3次!\n");
  32. GPIO_SetBits(GPIOA,GPIO_Pin_8);//PA8置位,LED1灯灭
  33. memset(CmdBuffer,10,0);
  34. while(1)
  35. {
  36. if (Rx_Flag==1)
  37. {
  38. USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); //关闭接收中断
  39. Rx_Flag=0;
  40. RxCounter=0;
  41. if (strstr(CmdBuffer,"LEDOFF\r\n"))
  42. {
  43. GPIO_SetBits(GPIOA,GPIO_Pin_8);//PA8置位,LED1灯灭
  44. memset(CmdBuffer,10,0);
  45. delay_nms(1000);       
  46. SYN_FrameInfo(0,"灯已经关闭了");
  47. }
  48. else if(strstr(CmdBuffer,"LEDON\r\n"))
  49. {
  50. GPIO_ResetBits(GPIOA,GPIO_Pin_8);//PA8清零,LED1灯亮
  51. memset(CmdBuffer,10,0);
  52. delay_nms(1000);       
  53. SYN_FrameInfo(0,"灯已经打开了");
  54. }
  55. else
  56. {
  57. for (i=0;i<3;i++)
  58. {
  59. memset(CmdBuffer,10,0);
  60. GPIO_ResetBits(GPIOA,GPIO_Pin_8);//PA8清零,LED1灯亮
  61. delay_nms(1000); GPIO_SetBits(GPIOA,GPIO_Pin_8);//PA8置位,LED1灯灭
  62. delay_nms(200);
  63.      }
  64.           }
  65. USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //开启接收中断,接收寄存器不空(RXNE=1)时产生中断
  66.     }
  67.         }
  68.                }

  69. /*-------------------------------------------------时钟---------------------------------------------------------*/                                                         

  70. void RCC_Configuration(void)
  71. {
  72. SystemInit();
  73. //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能AFIO的时钟,串口属于复用功能
  74. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA的时钟
  75. RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART1的时钟, USART1挂接到APB2上。其他USART2-5挂接到APB1上
  76. //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
  77. }


  78. /*-------------------------------------------------------GPIO配置---------------------------------------------------*/       
  79. void GPIO_Configuration(void)
  80. {
  81. GPIO_InitTypeDef GPIO_InitStructure;//声明GPIO初始化结构变量。
  82. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //配置管脚PA10/USART1_RX
  83. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮置输入
  84. GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA10
  85. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2; //配置管脚PA9/USART1_TX
  86. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //IO口配置为复用输出口
  87. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  88. GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9
  89. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8; //配置管脚8
  90. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //IO口配置为推挽输出口
  91. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //工作频率50MHz
  92. GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA8口
  93. }


  94. /*-------------------------------------------------NVIC配置---------------------------------------------------------*/       


  95. void NVIC_Configuration(void) //NVIC配置
  96. { //配置NVIC相应的优先级位
  97. NVIC_InitTypeDef NVIC_InitStructure;
  98. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //优先级分组1(0:4,0位抢占优先级、4位子优先级)
  99. NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //设置串口1中断
  100. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 0
  101. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  102. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  103. NVIC_Init(&NVIC_InitStructure);
  104. }



  105. /*----------------------------------------------串口2配置------------------------------------------------------------*/       



  106. void USART_Configuration(void)
  107. {
  108. USART_InitTypeDef USART_InitStructure;
  109. //子优先级为0
  110. //串口中断使能
  111. USART_InitStructure.USART_BaudRate = 9600;
  112. USART_InitStructure.USART_WordLength = USART_WordLength_8b; //USART_WordLength_8b; //8 位数据
  113. //USART_WordLength_9b; //9 位数据
  114. USART_InitStructure.USART_StopBits = USART_StopBits_1;
  115. //USART_StopBits_1 ;//在帧结尾传输 1 个停止位
  116. //USART_StopBits_0.5;//在帧结尾传输 0.5 个停止位
  117. //USART_StopBits_2 ;//在帧结尾传输 2 个停止位
  118. //USART_StopBits_1.5;//在帧结尾传输 1.5 个停止位
  119. USART_InitStructure.USART_Parity = USART_Parity_No;
  120. //USART_Parity_No ;//奇偶失能
  121. //USART_Parity_Even;//偶模式
  122. //USART_Parity_Odd ;//奇模式
  123. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  124. //USART_HardwareFlowControl_None; //硬件流控制失能
  125. //USART_HardwareFlowControl_RTS; //发送请求 RTS使能
  126. //USART_HardwareFlowControl_CTS; //清除发送 CTS使能
  127. //USART_HardwareFlowControl_RTS_CTS;//RTS和 CTS使能
  128. USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;
  129. //USART_Mode_Tx;//发送使能
  130. //USART_Mode_Rx;//接收使能
  131. USART_Init(USART2, &USART_InitStructure);//初始化串口
  132. USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //开启接收中断,接收寄存器不空(RXNE=1)时产生中断
  133. //USART_ITConfig(USART1, USART_IT_TXE, ENABLE); // 开启发送中断,发送寄存器空(TXE=1)时能产生中断
  134. //串口的发送中断有两个,分别是:
  135. // l发送数据寄存器空中断(TXE)
  136. // l发送完成中断(TC)
  137. USART_Cmd(USART2, ENABLE); //启动USART
  138. }

  139. /*----------------------------------------------发送函数------------------------------------------------------------*/       


  140. int fputc(int ch,FILE *f)
  141. {
  142. if(ch=='\n')
  143. {
  144. while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);
  145. USART_SendData(USART2,'\r');
  146. }
  147. while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);
  148. USART_SendData(USART2,ch);
  149. return ch;
  150. }

  151. /*------------------------------------------------------延迟函数----------------------------------------------------*/       

  152. void delay_nms(u16 time)//延时子程序
  153. { u16 i=0;

  154. while(time--)

  155. { i=12000; //自己定义
  156. while(i--) ;
  157. }
  158. }


  159. /*--------------------------------------------------中断服务函数--------------------------------------------------------*/       

  160. //需要设置串口接收中断和定时器3中断,中断时间为1ms
  161. //------------------------------------------------------------------
  162. //函数名:void USART1_IRQHandler(void)
  163. //输入参数:null
  164. //返回参数:null
  165. //说明:串口接收中断服务

  166. void USART2_IRQHandler(void) //串口1 中断服务程序
  167. {
  168. unsigned int i=0;
  169. if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //判断接收寄存器是否非空
  170. {//如果接收寄存器非空,说明检测到中断读入
  171. RxBuffer[RxCounter++]=USART_ReceiveData(USART2); // Read one byte from the receive data register
  172. if (RxBuffer[RxCounter-1]=='\n') //如果检测到换行,则设置接收标志为1.
  173. // \n:换行,光标到下行行首;
  174. // \r:回车,光标到本行行首
  175. {
  176. Rx_Flag=1;
  177. for (i=0;i<RxCounter;i++)//把接收到的数据缓存到CmdBuffer中
  178. {
  179. CmdBuffer[i]=RxBuffer[i];
  180. }
  181. CmdBuffer[RxCounter]=0; //发送缓冲区结束符
  182. RxCounter=0;
  183. }
  184. if(RxCounter == RxBufferSize) //如果接收缓冲区满了。
  185. {
  186. USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); //关闭接收中断
  187. Rx_Flag=1;
  188. CmdBuffer[RxCounter]=0; //接收命令缓冲区结束符
  189. RxCounter=0;
  190. }
  191. }
  192. }

复制代码



DDLQ8D@0_F6~CX[`_0W7E(4.png

STM32控制SYN6288语音合成模块.rar

829.25 KB, 下载次数: 228, 下载积分: 黑币 -5

123

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:228731 发表于 2018-8-10 09:36 | 显示全部楼层
不错学习学习!
回复

使用道具 举报

ID:232530 发表于 2018-10-15 21:51 | 显示全部楼层
谢谢分享,想搞个语音识别的
回复

使用道具 举报

ID:421057 发表于 2018-11-5 14:40 | 显示全部楼层
正好用到,谢谢楼主分享
回复

使用道具 举报

ID:421057 发表于 2018-11-5 15:04 | 显示全部楼层
谢谢分享,正在使用
回复

使用道具 举报

ID:368791 发表于 2018-11-6 22:33 来自手机 | 显示全部楼层
不错不错。。。
回复

使用道具 举报

ID:422110 发表于 2018-11-7 00:25 | 显示全部楼层
第一次浏览网站,学习学习,谢谢楼主
回复

使用道具 举报

ID:470540 发表于 2019-1-19 14:19 | 显示全部楼层
多谢分享
回复

使用道具 举报

ID:486884 发表于 2019-3-8 14:32 | 显示全部楼层
感谢楼主分享 认真学习
回复

使用道具 举报

ID:582913 发表于 2019-7-12 15:45 | 显示全部楼层
怎么一堆错误啊
回复

使用道具 举报

ID:583733 发表于 2019-7-14 00:02 | 显示全部楼层
有机会想各版主聊一下,关与语音控制这块的知识。
回复

使用道具 举报

ID:583733 发表于 2019-7-14 00:03 | 显示全部楼层
有机会想和楼主聊聊关与语音控制这块的知识。
回复

使用道具 举报

ID:531037 发表于 2019-7-17 16:44 | 显示全部楼层
大佬感谢你的资料
回复

使用道具 举报

ID:92810 发表于 2019-8-8 17:20 | 显示全部楼层
谢谢楼主分享了!!
回复

使用道具 举报

ID:638399 发表于 2020-3-21 01:12 | 显示全部楼层
请问stm32F4用的话,需要改哪里呢
回复

使用道具 举报

ID:254405 发表于 2020-3-21 05:43 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:582085 发表于 2020-4-26 13:04 | 显示全部楼层
特别感谢楼主扥分享  但是有一些备注好像忘改了 不太熟练结果有些地方看了好久 不太熟练的师兄看的时候要注意一下备注
回复

使用道具 举报

ID:793401 发表于 2021-3-27 10:46 | 显示全部楼层
请问您使用的STM32的具体型号是什么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表