|
因?yàn)槭褂玫倪@個(gè)單片機(jī)是雙串口,所以和一般的但串口的51單片機(jī)的串口收發(fā)函數(shù)不同;
所以在使用syn6288語(yǔ)音合成模塊的時(shí)候遇到了一些問(wèn)題,在此向大佬求助;
如果有老哥有相關(guān)例程就好了,下面附上我自己修改之后的文件
單片機(jī)源程序如下:
- #include "config.h"
- #include "USART.h"
- #include "delay.h"
- #include <string.h>
- #include <stdio.h>
- #define uchar unsigned char
- #define uint unsigned int
- /************* 功能說(shuō)明 **************
- 雙串口全雙工中斷方式收發(fā)通訊程序。
- 通過(guò)PC向MCU發(fā)送數(shù)據(jù), MCU收到后通過(guò)串口把收到的數(shù)據(jù)原樣返回.
- ******************************************/
- /************* 本地常量聲明 **************/
- /************* 本地變量聲明 **************/
- /************* 本地函數(shù)聲明 **************/
- //SYN6288語(yǔ)音模塊函數(shù)
- /*
- VCC--5V
- RXD--P1.1
- TXD--P1.0
- GND--GND
- */
- //用串口2發(fā)送一字節(jié)數(shù)據(jù)
- void UART2_SendByte(uchar DAT)
- {
- TX2_Buffer[COM2.TX_write] = DAT; //裝發(fā)送緩沖
- if(++COM2.TX_write >= COM_TX2_Lenth) COM2.TX_write = 0;
- if(COM2.B_TX_busy == 0) //空閑
- {
- COM2.B_TX_busy = 1; //標(biāo)志忙
- SET_TI2(); //觸發(fā)發(fā)送中斷
- }
-
- }
- //串口2發(fā)送字符串?dāng)?shù)據(jù)
- void UART2_SendString(uchar *DAT, uchar len)
- {
- uchar i;
- for(i = 0; i < len; i++)
- {
- TX2_write2buff(*DAT++);
- }
- }
- //Music: 0:無(wú)背景音樂(lè) 1~15:選擇背景音樂(lè) 語(yǔ)音讀字符串輸出
- void SYN_FrameInfo(uchar Music, uchar *HZdata)
- {
- /****************需要發(fā)送的文本**********************************/
- uchar Frame_Info[50];
- uchar HZ_Length;
- uchar ecc = 0; //定義校驗(yàn)字節(jié)
- uint i = 0;
- HZ_Length = strlen((char*)HZdata); //需要發(fā)送文本的長(zhǎng)度
- /*****************幀固定配置信息**************************************/
- Frame_Info[0] = 0xFD ; //構(gòu)造幀頭FD
- Frame_Info[1] = 0x00 ; //構(gòu)造數(shù)據(jù)區(qū)長(zhǎng)度的高字節(jié)
- Frame_Info[2] = HZ_Length + 3; //構(gòu)造數(shù)據(jù)區(qū)長(zhǎng)度的低字節(jié)
- Frame_Info[3] = 0x01 ; //構(gòu)造命令字:合成播放命令
- Frame_Info[4] = 0x01 | Music << 4 ; //構(gòu)造命令參數(shù):背景音樂(lè)設(shè)定
- /*******************校驗(yàn)碼計(jì)算***************************************/
- for(i = 0; i < 5; i++) //依次發(fā)送構(gòu)造好的5個(gè)幀頭字節(jié)
- {
- ecc = ecc ^ (Frame_Info[i]); //對(duì)發(fā)送的字節(jié)進(jìn)行異或校驗(yàn)
- }
- for(i = 0; i < HZ_Length; i++) //依次發(fā)送待合成的文本數(shù)據(jù)
- {
- ecc = ecc ^ (HZdata[i]); //對(duì)發(fā)送的字節(jié)進(jìn)行異或校驗(yàn)
- }
- /*******************發(fā)送幀信息***************************************/
- memcpy(&Frame_Info[5], HZdata, HZ_Length);
- Frame_Info[5 + HZ_Length] = ecc;
- UART2_SendString(Frame_Info, 5 + HZ_Length + 1);
- }
- //語(yǔ)音模塊設(shè)定函數(shù)
- /************* 外部函數(shù)和變量聲明 *****************/
- /**************語(yǔ)音芯片設(shè)置命令*********************/
- uchar SYN_StopCom[] = {0xFD, 0X00, 0X02, 0X02, 0XFD}; //停止合成
- uchar SYN_SuspendCom[] = {0XFD, 0X00, 0X02, 0X03, 0XFC}; //暫停合成
- uchar SYN_RecoverCom[] = {0XFD, 0X00, 0X02, 0X04, 0XFB}; //恢復(fù)合成
- uchar SYN_ChackCom[] = {0XFD, 0X00, 0X02, 0X21, 0XDE}; //狀態(tài)查詢
- uchar SYN_PowerDownCom[] = {0XFD, 0X00, 0X02, 0X88, 0X77}; //進(jìn)入POWER DOWN 狀態(tài)命令
- void UART_config(void)
- {
- COMx_InitDefine COMx_InitStructure; //結(jié)構(gòu)定義
- COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
- COMx_InitStructure.UART_BRT_Use = BRT_Timer1; //使用波特率, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
- COMx_InitStructure.UART_BaudRate = 9600ul; //波特率, 一般 110 ~ 115200
- COMx_InitStructure.UART_RxEnable = ENABLE; //接收允許, ENABLE或DISABLE
- COMx_InitStructure.BaudRateDouble = DISABLE; //波特率加倍, ENABLE或DISABLE
- COMx_InitStructure.UART_Interrupt = ENABLE; //中斷允許, ENABLE或DISABLE
- COMx_InitStructure.UART_Polity = PolityLow; //中斷優(yōu)先級(jí), PolityLow,PolityHigh
- COMx_InitStructure.UART_P_SW = UART1_SW_P30_P31; //切換端口, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17(必須使用內(nèi)部時(shí)鐘)
- COMx_InitStructure.UART_RXD_TXD_Short = DISABLE; //內(nèi)部短路RXD與TXD, 做中繼, ENABLE,DISABLE
- USART_Configuration(USART1, &COMx_InitStructure); //初始化串口1 USART1,USART2
- COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
- COMx_InitStructure.UART_BaudRate = 9600ul; //波特率, 110 ~ 115200
- COMx_InitStructure.UART_RxEnable = ENABLE; //接收允許, ENABLE或DISABLE
- COMx_InitStructure.UART_Interrupt = ENABLE; //中斷允許, ENABLE或DISABLE
- COMx_InitStructure.UART_Polity = PolityLow; //中斷優(yōu)先級(jí), PolityLow,PolityHigh
- COMx_InitStructure.UART_P_SW = UART2_SW_P10_P11; //切換端口, UART2_SW_P10_P11,UART2_SW_P46_P47
- USART_Configuration(USART2, &COMx_InitStructure); //初始化串口2 USART1,USART2
-
- }
- /**********************************************/
- void main(void)
- {
- UART_config();
- while(1)
- {
- uchar idata weight_str[50];
- int m=135;
- sprintf(weight_str,"%s%d%s","[v6][t2]當(dāng)前的體重為",m,"斤");
- //選擇背景音樂(lè)2。(0:無(wú)背景音樂(lè) 1-15:背景音樂(lè)可選)
- //m[0~16]:0背景音樂(lè)為靜音,16背景音樂(lè)音量最大
- //v[0~16]:0朗讀音量為靜音,16朗讀音量最大
- //t[0~5]:0朗讀語(yǔ)速最慢,5朗讀語(yǔ)速最快
- //其他不常用功能請(qǐng)參考數(shù)據(jù)手冊(cè)
- SYN_FrameInfo(0, weight_str);
- /*SYN_FrameInfo(0, "[v6][t2]您的體重是");
- delay(2000);
- SYN_FrameInfo(0, p);
- delay(2000);
- SYN_FrameInfo(0, "斤");*/
-
- //暫停合成,此時(shí)沒(méi)有用到,用于展示函數(shù)用法
- //YS_SYN_Set(SYN_SuspendCom);
- delay_ms(100);
- }
- }
復(fù)制代碼 |
-
-
語(yǔ)音程序.7z
2022-5-26 21:09 上傳
點(diǎn)擊文件名下載附件
42.88 KB, 下載次數(shù): 11
這是我自己修改的程序
|