久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11762|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九热精品视频 | 天天操夜夜操 | 久久99精品久久久久久 | 亚洲精品av在线 | 中文字幕一区在线 | 日本激情视频中文字幕 | 日韩欧美在线视频播放 | 精品欧美一区二区精品久久久 | 99在线免费视频 | 午夜激情影院 | 久久69精品久久久久久久电影好 | 不卡一二区 | 国产ts人妖一区二区三区 | 日韩国产中文字幕 | 视频一区二区中文字幕 | 羞羞的视频在线观看 | 亚洲高清在线观看 | 日韩一区二区三区四区五区六区 | 国产亚洲一区二区三区在线 | 日本精品视频 | 亚洲日日操 | 亚洲精品观看 | 免费观看一级特黄欧美大片 | 国产精品亚洲视频 | 国产农村妇女精品一区 | 国产欧美精品一区二区三区 | 亚洲一二三区精品 | 99re视频精品 | 国产精品欧美一区二区三区 | 免费成人高清在线视频 | 欧美成视频在线观看 | 在线观看中文字幕 | 国产中文字幕亚洲 | 日本 欧美 国产 | 午夜精品久久久久久久久久久久 | 国产91亚洲精品一区二区三区 | 综合久久av | 色资源在线视频 | 精品欧美一区二区三区久久久 | 国产高清视频在线观看 | 久久精品|