|
老規(guī)矩,附上產(chǎn)品圖
SYN8266配置文件.c
- /**
- ******************************************************************************
- * @File SYN6288.c
- * @Author Velscode
- * @Brief TTS 芯片 SYN6288驅(qū)動(dòng)源代碼文件(基于STM32F10x)
- * 使用了USART2(A2\A3)
- ******************************************************************************
- */
- /* Internal Function Declaration ------------------------------------------- */
- void usart2_Init(unsigned int bound);
- /* Header Files ------------------------------------------------------------ */
- #include "SYN6288.h"
- #include "string.h"
- /* RT-Thread相關(guān)頭文件 */
- #include <rthw.h>
- #include <rtthread.h>
- #include <string.h>
- struct STRUCT_USARTx_Fram strUSART_Fram_Record = { 0 };
- /**
- * @brief 配置嵌套向量中斷控制器NVIC
- * @param 無(wú)
- * @retval 無(wú)
- */
- static void NVIC_Configuration(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* 嵌套向量中斷控制器組選擇 */
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
-
- /* 配置USART為中斷源 */
- NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ_SYN6288;
- /* 搶斷優(yōu)先級(jí)*/
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- /* 子優(yōu)先級(jí) */
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- /* 使能中斷 */
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- /* 初始化配置NVIC */
- NVIC_Init(&NVIC_InitStructure);
- }
- //讀忙
- void SYN6288_GPIO_Config ( void )
- {
- /*定義一個(gè)GPIO_InitTypeDef類型的結(jié)構(gòu)體*/
- GPIO_InitTypeDef GPIO_InitStructure;
- /* 配置 LED1 引腳 */
- SYN6288_GPIO_APBxClock_FUN(SYN6288_GPIO_CLK, ENABLE);
- GPIO_InitStructure.GPIO_Pin = SYN6288_GPIO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init ( SYN6288_GPIO_PORT, & GPIO_InitStructure );
-
- }
- /**
- * @brief USART GPIO 配置,工作參數(shù)配置
- * @param 無(wú)
- * @retval 無(wú)
- */
- void SYN688_USART_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
- // 打開(kāi)串口GPIO的時(shí)鐘
- DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK_SYN6288, ENABLE);
-
- // 打開(kāi)串口外設(shè)的時(shí)鐘
- DEBUG_USART_APBxClkCmd_SYN6288(DEBUG_USART_CLK_SYN6288, ENABLE);
- // 將USART Tx的GPIO配置為推挽復(fù)用模式
- GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN_SYN6288;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(DEBUG_USART_TX_GPIO_PORT_SYN6288, &GPIO_InitStructure);
- // 將USART Rx的GPIO配置為浮空輸入模式
- GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN_SYN6288;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(DEBUG_USART_RX_GPIO_PORT_SYN6288, &GPIO_InitStructure);
-
- // 配置串口的工作參數(shù)
- // 配置波特率
- USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
- // 配置 針數(shù)據(jù)字長(zhǎng)
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- // 配置停止位
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- // 配置校驗(yàn)位
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- // 配置硬件流控制
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- // 配置工作模式,收發(fā)一起
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- // 完成串口的初始化配置
- USART_Init(DEBUG_USART_SYN6288, &USART_InitStructure);
-
- // 串口中斷優(yōu)先級(jí)配置
- NVIC_Configuration();
-
- // 使能串口接收中斷
- USART_ITConfig(DEBUG_USART_SYN6288, USART_IT_RXNE, ENABLE);
-
- // 使能串口
- USART_Cmd(DEBUG_USART_SYN6288, ENABLE);
- // 清除發(fā)送完成標(biāo)志
- //USART_ClearFlag(USART1, USART_FLAG_TC);
- }
- //其實(shí)是USART2_Send_Byte
- /***************** 發(fā)送一個(gè)字符 **********************/
- void Usart_SYN6288_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
- {
- /* 發(fā)送一個(gè)字節(jié)數(shù)據(jù)到USART */
- USART_SendData(pUSARTx,ch);
-
- /* 等待發(fā)送數(shù)據(jù)寄存器為空 */
- while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
- }
- /***************** 發(fā)送字符串 **********************/
- void Usart_SSYN6288_endString( USART_TypeDef * pUSARTx, char *str)
- {
- unsigned int k=0;
- do
- {
- Usart_SYN6288_SendByte( pUSARTx, *(str + k) );
- k++;
- } while(*(str + k)!='\0');
-
- /* 等待發(fā)送完成 */
- while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
- {}
- }
- //語(yǔ)音合成
- void SYN6288_Speech( USART_TypeDef * pUSARTx,char * str )
- {
-
- if(SYN6288_Read_GPIO_IN()==Bit_RESET)/* x us后仍為高電平表示數(shù)據(jù)“1” */
- {
- char * p = str;
- int len = 0,check=0xFD,i;
-
- while( *p++ != 0 )
- {
- len++;
-
- }
-
- len+=3;
-
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0xFD);
-
- Usart_SYN6288_SendByte( DEBUG_USART_SYN6288,len / 256 );
- Usart_SYN6288_SendByte( DEBUG_USART_SYN6288,len % 256 );
- check = check ^ ( len / 256 ) ^ ( len % 256 );
-
- Usart_SYN6288_SendByte( DEBUG_USART_SYN6288,0x01 );
- Usart_SYN6288_SendByte( DEBUG_USART_SYN6288,0x01 );
- check = check ^ 0x01 ^ 0x01;
-
- for( i = 0; i < len-3; i++ )
- {
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,*str);
- check ^= ( *str );
- str++;
- }
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,check);
-
- rt_thread_delay(150*len);
- }
- }
- /* 音量控制 */
- void Volinme(uint8_t Y_L)
- {
- uint8_t num ;
- num = Y_L+48;
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0xFD);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x00);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x06);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x01);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x01);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x5B);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x76);
- //控制音量
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,num);
-
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x5D);
- // uint8_t num[9] ;
- //
- // num[0] = 0xFD;
- // num[1] = 0x00;
- // num[2] = 0x06;
- // num[3] = 0x01;
- // num[4] = 0x01;
- // num[5] = 0x5B;
- // num[6] = 0x76;
- // //控制音量
- // num[7] = Y_L+48;
- // num[8] = 0x5D;
- //
- // Usart_SendByte(DEBUG_USARTx,num[8]);
- }
- /* 語(yǔ)調(diào)控制 */
- void Intonation(uint8_t Y_L)
- {
- uint8_t num ;
- num = Y_L+48;
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0xFD);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x00);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x06);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x01);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x01);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x5B);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x74);
- //控制音量
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,num);
-
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x5D);
-
- }
- /* 語(yǔ)速控制 */
- void Speed_pacing(uint8_t Y_L)
- {
- uint8_t num ;
- num = Y_L+48;
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0xFD);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x00);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x06);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x01);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x01);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x5B);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x73);
- //控制音量
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,num);
-
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x5D);
-
- }
- /* 人控制 */
- void speed_man(uint8_t Y_L)
- {
- uint8_t num ;
- num = Y_L+48;
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0xFD);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x00);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x07);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x01);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x01);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x5B);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x6D);
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x35);
- //控制音量
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,num);
-
- Usart_SYN6288_SendByte(DEBUG_USART_SYN6288,0x5D);
-
- }
- /* End of File ------------------------------------------------------------- */
復(fù)制代碼 .h
- #ifndef _SYN6288_H_
- #define _SYN6288_H_
- #include "stm32f10x.h"
- #include <stdio.h>
- #include <stdbool.h>
- #if defined ( __CC_ARM )
- #pragma anon_unions
- #endif
- /******************************* ESP8266 外部全局變量聲明 ***************************/
- #define RX_BUF_MAX_LEN 1024 //最大接收緩存字節(jié)數(shù)
- extern struct STRUCT_USARTx_Fram //串口數(shù)據(jù)幀的處理結(jié)構(gòu)體
- {
- char Data_RX_BUF [ RX_BUF_MAX_LEN ];
-
- union {
- __IO u16 InfAll;
- struct {
- __IO u16 FramLength :15; // 14:0
- __IO u16 FramFinishFlag :1; // 15
- } InfBit;
- };
-
- } strUSART_Fram_Record;
- /* 開(kāi)發(fā)板硬件相關(guān)頭文件 */
- /**
- ******************************************************************************
- * @File SYN6288.h
- * @Author Velscode
- * @Brief TTS 芯片 SYN6288驅(qū)動(dòng)頭文件(基于STM32F10x)
- * 使用了USART2(A2\A3)
- ******************************************************************************
- */
- //extern struct STRUCT_USARTx_Fram strUSART_Fram_Record;
- /****************************** SYN6288 引腳配置參數(shù)定義***************************************/
- #define SYN6288_GPIO_APBxClock_FUN RCC_APB2PeriphClockCmd
- #define SYN6288_GPIO_CLK RCC_APB2Periph_GPIOB
- #define SYN6288_GPIO_PORT GPIOB
- #define SYN6288_GPIO_PIN GPIO_Pin_2
- #define SYN6288_Read_GPIO_IN() GPIO_ReadInputDataBit ( SYN6288_GPIO_PORT, SYN6288_GPIO_PIN )
- // 串口2-USART2
- #define DEBUG_USART_SYN6288 USART3
- #define DEBUG_USART_CLK_SYN6288 RCC_APB1Periph_USART3
- #define DEBUG_USART_APBxClkCmd_SYN6288 RCC_APB1PeriphClockCmd
- #define DEBUG_USART_BAUDRATE 9600
- // USART GPIO 引腳宏定義
- #define DEBUG_USART_GPIO_CLK_SYN6288 (RCC_APB2Periph_GPIOB)
- #define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd
-
- #define DEBUG_USART_TX_GPIO_PORT_SYN6288 GPIOB
- #define DEBUG_USART_TX_GPIO_PIN_SYN6288 GPIO_Pin_10
- #define DEBUG_USART_RX_GPIO_PORT_SYN6288 GPIOB
- #define DEBUG_USART_RX_GPIO_PIN_SYN6288 GPIO_Pin_11
- #define DEBUG_USART_IRQ_SYN6288 USART3_IRQn
- #define DEBUG_USART_IRQHandler_SYN6288 USART3_IRQHandler
- void SYN6288_GPIO_Config ( void );
- void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch);
- void SYN6288_Speech( USART_TypeDef * pUSARTx,char * str );
- void SYN688_USART_Config(void);
- void Usart_SYN6288_SendByte( USART_TypeDef * pUSARTx, uint8_t ch);
- void SYN_FrameInfo(char *HZdata);
- void Usart_SSYN6288_endString( USART_TypeDef * pUSARTx, char *str);
- /* 音量控制 */
- void Volinme(uint8_t Y_L);
- /* 語(yǔ)調(diào)控制 */
- void Intonation(uint8_t Y_L);
- /* 語(yǔ)速控制 */
- void Speed_pacing(uint8_t Y_L);
- /* 人控制 */
- void speed_man(uint8_t Y_L);
- #endif /*_SYN6288_H_*/
- /* End of File ------------------------------------------------------------- */
復(fù)制代碼 這里要在stm32f10x.it中添加中斷
- // 串口中斷服務(wù)函數(shù)
- void DEBUG_USART_IRQHandler_SYN6288(void)
- {
- uint8_t ucCh;
- if ( USART_GetITStatus ( DEBUG_USART_SYN6288, USART_IT_RXNE ) != RESET )
- {
- ucCh = USART_ReceiveData( DEBUG_USART_SYN6288 );
-
- if ( strUSART_Fram_Record .InfBit .FramLength < ( RX_BUF_MAX_LEN - 1 ) ) //預(yù)留1個(gè)字節(jié)寫結(jié)束符
- strUSART_Fram_Record .Data_RX_BUF [ strUSART_Fram_Record .InfBit .FramLength ++ ] = ucCh;
- }
-
- if ( USART_GetITStatus( DEBUG_USART_SYN6288, USART_IT_IDLE ) == SET ) //數(shù)據(jù)幀接收完畢
- {
- strUSART_Fram_Record .InfBit .FramFinishFlag = 1;
-
- ucCh = USART_ReceiveData( DEBUG_USART_SYN6288 ); //由軟件序列清除中斷標(biāo)志位(先讀USART_SR,然后讀USART_DR)
- }
- }
復(fù)制代碼
如何使用語(yǔ)音播報(bào)
1.首先初始化
- //語(yǔ)音播報(bào)系統(tǒng)
- SYN6288_GPIO_Config();
- SYN688_USART_Config();
復(fù)制代碼 2.然后主函數(shù)中使用
- //APP2
- static void APP2_thread_entry(void* parameter)
- {
- rt_uint8_t key=0;
- rt_uint8_t dispBuff[100];
- rt_uint8_t t=0;
- rt_uint8_t *str=0;
- while(1)
- {
- key=Remote_Scan();
-
- if(key)
- {
- switch(key)
- {
- case 162:
- //1
- str= "· time 10min·";
- munite = 10;
- hour=0;
- second=0;
- SYN6288_Speech(DEBUG_USART_SYN6288,"定時(shí)十分鐘");
-
- break;
-
- case 98:
- //2
- str= "· time 20min·";
- munite = 20;
- hour=0;
- second=0;
- SYN6288_Speech(DEBUG_USART_SYN6288,"定時(shí)二十分鐘");
- break;
-
- case 226://3
- str= "· time 30min·";
- munite = 30;
- hour=0;
- second=0;
- SYN6288_Speech(DEBUG_USART_SYN6288,"定時(shí)三十分鐘");
- break;
-
- case 34://4
- str= "· time 40min·";
- munite = 40;
- hour=0;
- second=0;
- SYN6288_Speech(DEBUG_USART_SYN6288,"定時(shí)四十分鐘");
- break;
-
- case 2://5
- str= "· time 50min·";
- munite = 50;
- hour=0;
- second=0;
- SYN6288_Speech(DEBUG_USART_SYN6288,"定時(shí)五十分鐘");
- break;
-
- case 194://6
- str= "· time 60min·";
- munite = 60;
- hour=0;
- second=0;
- SYN6288_Speech(DEBUG_USART_SYN6288,"定時(shí)六十分鐘");
- break;
-
- case 224://7
- str= "· time 90min·";
- hour = 1;
- munite = 30;
- second=0;
- SYN6288_Speech(DEBUG_USART_SYN6288,"定時(shí)一個(gè)半小時(shí)");
- break;
-
- case 168://8
- str= "· time 2h ·";
- hour = 1;
- munite = 60;
- second=0;
- SYN6288_Speech(DEBUG_USART_SYN6288,"定時(shí)兩個(gè)小時(shí)");
- break;
-
- case 144://9
- SYN6288_Speech(DEBUG_USART_SYN6288,"定時(shí)三個(gè)小時(shí)");
- str= "· time 3h ·";
- hour = 2;
- munite = 60;
- second=0;
-
- break;
-
- case 152:
- str= "detected code 0";
- name();
-
- break;
-
- case 104:
- str= "detected code *";
-
- break;
-
- case 176:
- str= "detected code #";
-
- break;
-
- case 24:
- str= "detected code ↑";
-
- break;
-
- case 16:
- str= "detected code ←";
-
- break;
-
- case 74:
- str= "detected code ↓";
-
- break;
-
- case 90:
- str= "detected code →";
- break;
-
- case 56:
- str= "detected code OK ";
- break;
-
- default:
- str= "EMOURE";
-
- break;
- }
- Draw_Font16B(4,100,BRRED,str); //顯示SYMBOL
- key = 0;
- // uwRet = rt_thread_resume(APP3_thread);/* 恢復(fù)APP3線程! */
- // if(RT_EOK == uwRet)
- // {
- // rt_kprintf("恢復(fù)APP3線程成功!\n");
- // }
- // else
- // {
- // rt_kprintf("恢復(fù)APP3線程失敗!失敗代碼:0x%lx\n",uwRet);
- // }
-
- }
-
- }
- }
復(fù)制代碼 Keil代碼下載:
RT紅外定時(shí)器+語(yǔ)音提示 代碼.7z
(625.98 KB, 下載次數(shù): 13)
2021-12-1 22:51 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|