欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STM32+RT+SYN8266播報+紅外定時器程序
[打印本頁]
作者:
herui123456
時間:
2021-12-1 19:46
標題:
STM32+RT+SYN8266播報+紅外定時器程序
老規矩,附上產品圖
IMG_20211201_194429.jpg
(2.95 MB, 下載次數: 71)
下載附件
2021-12-1 19:46 上傳
SYN8266配置文件.c
/**
******************************************************************************
* @File SYN6288.c
* @Author Velscode
* @Brief TTS 芯片 SYN6288驅動源代碼文件(基于STM32F10x)
* 使用了USART2(A2\A3)
******************************************************************************
*/
/* Internal Function Declaration ------------------------------------------- */
void usart2_Init(unsigned int bound);
/* Header Files ------------------------------------------------------------ */
#include "SYN6288.h"
#include "string.h"
/* RT-Thread相關頭文件 */
#include <rthw.h>
#include <rtthread.h>
#include <string.h>
struct STRUCT_USARTx_Fram strUSART_Fram_Record = { 0 };
/**
* @brief 配置嵌套向量中斷控制器NVIC
* @param 無
* @retval 無
*/
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* 嵌套向量中斷控制器組選擇 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/* 配置USART為中斷源 */
NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ_SYN6288;
/* 搶斷優先級*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/* 子優先級 */
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
/* 使能中斷 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/* 初始化配置NVIC */
NVIC_Init(&NVIC_InitStructure);
}
//讀忙
void SYN6288_GPIO_Config ( void )
{
/*定義一個GPIO_InitTypeDef類型的結構體*/
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 配置,工作參數配置
* @param 無
* @retval 無
*/
void SYN688_USART_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
// 打開串口GPIO的時鐘
DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK_SYN6288, ENABLE);
// 打開串口外設的時鐘
DEBUG_USART_APBxClkCmd_SYN6288(DEBUG_USART_CLK_SYN6288, ENABLE);
// 將USART Tx的GPIO配置為推挽復用模式
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);
// 配置串口的工作參數
// 配置波特率
USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
// 配置 針數據字長
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
// 配置停止位
USART_InitStructure.USART_StopBits = USART_StopBits_1;
// 配置校驗位
USART_InitStructure.USART_Parity = USART_Parity_No ;
// 配置硬件流控制
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
// 配置工作模式,收發一起
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
// 完成串口的初始化配置
USART_Init(DEBUG_USART_SYN6288, &USART_InitStructure);
// 串口中斷優先級配置
NVIC_Configuration();
// 使能串口接收中斷
USART_ITConfig(DEBUG_USART_SYN6288, USART_IT_RXNE, ENABLE);
// 使能串口
USART_Cmd(DEBUG_USART_SYN6288, ENABLE);
// 清除發送完成標志
//USART_ClearFlag(USART1, USART_FLAG_TC);
}
//其實是USART2_Send_Byte
/***************** 發送一個字符 **********************/
void Usart_SYN6288_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{
/* 發送一個字節數據到USART */
USART_SendData(pUSARTx,ch);
/* 等待發送數據寄存器為空 */
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
}
/***************** 發送字符串 **********************/
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');
/* 等待發送完成 */
while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
{}
}
//語音合成
void SYN6288_Speech( USART_TypeDef * pUSARTx,char * str )
{
if(SYN6288_Read_GPIO_IN()==Bit_RESET)/* x us后仍為高電平表示數據“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]);
}
/* 語調控制 */
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);
}
/* 語速控制 */
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 ------------------------------------------------------------- */
復制代碼
.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 //最大接收緩存字節數
extern struct STRUCT_USARTx_Fram //串口數據幀的處理結構體
{
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;
/* 開發板硬件相關頭文件 */
/**
******************************************************************************
* @File SYN6288.h
* @Author Velscode
* @Brief TTS 芯片 SYN6288驅動頭文件(基于STM32F10x)
* 使用了USART2(A2\A3)
******************************************************************************
*/
//extern struct STRUCT_USARTx_Fram strUSART_Fram_Record;
/****************************** SYN6288 引腳配置參數定義***************************************/
#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);
/* 語調控制 */
void Intonation(uint8_t Y_L);
/* 語速控制 */
void Speed_pacing(uint8_t Y_L);
/* 人控制 */
void speed_man(uint8_t Y_L);
#endif /*_SYN6288_H_*/
/* End of File ------------------------------------------------------------- */
復制代碼
這里要在stm32f10x.it中添加中斷
// 串口中斷服務函數
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 ) ) //預留1個字節寫結束符
strUSART_Fram_Record .Data_RX_BUF [ strUSART_Fram_Record .InfBit .FramLength ++ ] = ucCh;
}
if ( USART_GetITStatus( DEBUG_USART_SYN6288, USART_IT_IDLE ) == SET ) //數據幀接收完畢
{
strUSART_Fram_Record .InfBit .FramFinishFlag = 1;
ucCh = USART_ReceiveData( DEBUG_USART_SYN6288 ); //由軟件序列清除中斷標志位(先讀USART_SR,然后讀USART_DR)
}
}
復制代碼
如何使用語音播報
1.首先初始化
//語音播報系統
SYN6288_GPIO_Config();
SYN688_USART_Config();
復制代碼
2.然后主函數中使用
//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,"定時十分鐘");
break;
case 98:
//2
str= "· time 20min·";
munite = 20;
hour=0;
second=0;
SYN6288_Speech(DEBUG_USART_SYN6288,"定時二十分鐘");
break;
case 226://3
str= "· time 30min·";
munite = 30;
hour=0;
second=0;
SYN6288_Speech(DEBUG_USART_SYN6288,"定時三十分鐘");
break;
case 34://4
str= "· time 40min·";
munite = 40;
hour=0;
second=0;
SYN6288_Speech(DEBUG_USART_SYN6288,"定時四十分鐘");
break;
case 2://5
str= "· time 50min·";
munite = 50;
hour=0;
second=0;
SYN6288_Speech(DEBUG_USART_SYN6288,"定時五十分鐘");
break;
case 194://6
str= "· time 60min·";
munite = 60;
hour=0;
second=0;
SYN6288_Speech(DEBUG_USART_SYN6288,"定時六十分鐘");
break;
case 224://7
str= "· time 90min·";
hour = 1;
munite = 30;
second=0;
SYN6288_Speech(DEBUG_USART_SYN6288,"定時一個半小時");
break;
case 168://8
str= "· time 2h ·";
hour = 1;
munite = 60;
second=0;
SYN6288_Speech(DEBUG_USART_SYN6288,"定時兩個小時");
break;
case 144://9
SYN6288_Speech(DEBUG_USART_SYN6288,"定時三個小時");
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);/* 恢復APP3線程! */
// if(RT_EOK == uwRet)
// {
// rt_kprintf("恢復APP3線程成功!\n");
// }
// else
// {
// rt_kprintf("恢復APP3線程失敗!失敗代碼:0x%lx\n",uwRet);
// }
}
}
}
復制代碼
Keil代碼下載:
RT紅外定時器+語音提示 代碼.7z
(625.98 KB, 下載次數: 13)
2021-12-1 22:51 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1