使用USART3(PB10,PB11)引脚连接模块的对应引脚,模块还有一个BY忙碌检测引脚,低电平表示语音模块空闲,高电平表示语音模块忙碌,这里连的是PA7。VCC接3~5V。
**USART3部分程序**
#include "usart3.h"/*****************************************USART3***************************************/
/*PB10 USART3_TX                                                                                                                                            */
/*PB11 USART3_RX                                                                                                                                            */
/*                                                                                                                                                                      */
/**************************************************************************************/
void Usart3Init(u32 pclk1, u32 bound)
{RCC->APB2ENR |= 0x01 << 3;//使能PB时钟RCC->APB1ENR |= 0x01 << 18;//使能USART3时钟RCC->APB2ENR |= 0x01 << 0;//AFIO时钟GPIOB->CRH &= ~(0x0F << 4 * 2);GPIOB->CRH |= 0x0A << 4 * 2;//PB10(TX)复用功能推挽输出GPIOB->CRH &= ~(0x0F << 4 * 3);GPIOB->CRH |= 0x08 << 4 * 3;//PB11(RX)输入模式AFIO->MAPR &= ~AFIO_MAPR_USART3_REMAP;//USART3没有重印象USART3->CR1 &= ~(0x01 << 12);//一个起始位,八个数据位USART3->CR1 &= ~(0x01 << 10);//禁止校验控制USART3->CR2 &= ~(0x03 << 12);//一个停止位float temp;u16 mantissa;u16 fraction;temp = (float)(pclk1 * 1000000) / (bound * 16);//得到USARTDIVmantissa = temp;//得到整数部分fraction = (temp - mantissa) * 16;//得到小数部分mantissa <<= 4;mantissa += fraction;USART3->BRR = mantissa;//波特率设置USART3->CR1 &= ~(0x01 << 12);//一个起始位,八个数据位USART3->CR1 &= ~(0x01 << 9);//禁止校验//    USART3->CR1 |= 0x01 << 7;//发送缓冲区空中断使能
//    USART3->CR1 |= 0x01 << 6;//使能发送完成中断
//    USART3->CR1 |= 0x01 << 5;//接收缓冲区非空中断使能USART3->CR1 |= 0x01 << 3;//发送使能USART3->CR1 |= 0x01 << 2;//接收使能u32 priority = 0;NVIC_SetPriorityGrouping(7 - 2);priority = NVIC_EncodePriority(7 - 2, 2, 1);NVIC_SetPriority(USART3_IRQn, priority);NVIC_EnableIRQ(USART3_IRQn);USART3->CR1 |= 0x01 << 13;//使能usart3
}//串口3发送一个字节函数
void USART3SendByte(u8 byte)
{//等待发送数据寄存器空 while((USART3->SR & 0x01 << 7) == 0);USART3->DR = byte;
}

SYN6288模块程序

#include "syn6288.h"//SYN6288语音模块
//芯片忙检测引脚初始化    PA7
//读低电平表示芯片空闲
//读高电平表示芯片忙
void SYN6288PortInit(void)
{RCC->APB2ENR |= 0x01 << 2;//使能PA时钟GPIOA->CRL &= ~((unsigned int)0x0f << 7 * 4);GPIOA->CRL |= (unsigned int)0x08 << 7 * 4;//输入模式
//  GPIOA->BSRR |= 0x01 << 7;//默认上拉
}//语音合成
//芯片支持以下命令帧格式:“帧头FD+数据区长度+数据区”格式。(最大206个字节)
//上位机发送给SYN6288芯片的所有命令和数据都需要用"帧"的方式进行封装后传输
void SYN6288SpeechSynthesis(char *str)
{char *p = NULL;p = str;int len = 0, i;char checksum;//异或校验while(*p++ != 0)//计算待发送文本长度{len++;}  len += 3;//计算数据区长度//等待CHIP空闲,低电平表示空闲while(SynBusy_Sta);delay_ms(2);/*测试得出这里要加至少2ms的延时,不然如果连续发送语音会发生某些语音丢失的情况,只延时1ms也会丢失,直接加载后面的8ms上也会发生丢失的情况*/USART3SendByte(FRAME_HEAD);//发送帧头USART3SendByte(len >> 8);//发送数据区长度高八位USART3SendByte(len);//发送数据区长度低八位checksum = FRAME_HEAD ^ (len >> 8) ^ (len);//校验和USART3SendByte(SPEECH_SYSTHESIS_CMD);//发送语音合成播放命令字USART3SendByte(GBK_WITHOUT_BGM);//发送命令参数->不加背景音乐,文本GBK编码格式checksum = checksum ^ SPEECH_SYSTHESIS_CMD ^ SPEECH_SYSTHESIS_CMD;//发送文本内容for(i = 0; i < len - 3; i++){USART3SendByte(*str);checksum ^= *str;str++;}USART3SendByte(checksum);//发送异或检验delay_ms(8);//数据手册要求帧与帧之间的发送间隔必须超过8ms
}

SYN6288.h

#ifndef __SYN6288_H__
#define __SYN6288_H__#include <stm32f10x.h>
#include "sys.h"
#include "usart3.h"
#include "systick.h"
#include "string.h"#define SynBusy_Sta    PAin(7)//syn6288状态忙检测引脚,低电平表示CHIP空闲,高电平表示忙#define SYN_USART_BAUD          9600
#define FRAME_HEAD              0xFD//帧头
#define SPEECH_SYSTHESIS_CMD    0x01
#define GB2132_WITHOUT_BGM      0x00
#define GBK_WITHOUT_BGM         0x01void SYN6288PortInit(void);
void SYN6288SpeechSynthesis(char *str);#endif

MAIN.c

#define USART3_BAUD  SYN_USART_BAUD//封装语音函数
void Rap_And_God(void)
{SYN6288SpeechSynthesis("淡黄的长裙");SYN6288SpeechSynthesis("蓬松的头发");SYN6288SpeechSynthesis("牵着我的手看最新展出的油画");SYN6288SpeechSynthesis("无人的街道");SYN6288SpeechSynthesis("在空荡的家里");SYN6288SpeechSynthesis("就只剩我一个人狂欢的趴体");SYN6288SpeechSynthesis("就当是一场梦");SYN6288SpeechSynthesis("醒了还是很感动");SYN6288SpeechSynthesis("还是很想被你保护我心里的惨痛");SYN6288SpeechSynthesis("喜欢我很辛苦");SYN6288SpeechSynthesis("其实我都清楚");SYN6288SpeechSynthesis("放心这世界很大我记得你的叮嘱");
}int main(void)
{SYN6288PortInit();Usart3Init(36, USART3_BAUD);Rap_And_God();while(1){};
}

STM32F103C8T6驱动SYN6288语音模块(暂时做到能播放连续语音,其他诸如背景音乐的功能还没做)相关推荐

  1. STM32 使用SYN6288语音模块

    文章目录 前言 一.SYN6288介绍 二.SYN6288原理讲解 三.数据的异或校验 四.代码编写 1.串口的初始化 2.SYN6288代码编写 3.main函数逻辑 总结 前言 本篇文章带大家学习 ...

  2. 基于stm32物联网开发板(3)--SYN6288语音模块

    基于stm32物联网开发板(3)–SYN6288语音模块 1.SYN6288语音模块展示示例 SYN6288语音模块 2.概述   SYN6288-A语音合成模块是一款性价比更高,效果更自然的一款中高 ...

  3. 从头开始写STM32F103C8T6驱动库(一)——STM32CubeMX创建并调整工程结构

    系列文章目录 Github开源地址 从头开始写STM32F103C8T6驱动库(一)--STM32CubeMX创建并调整工程结构 从头开始写STM32F103C8T6驱动库(二)--编写系统初始化程序 ...

  4. 从头开始写STM32F103C8T6驱动库(二)——编写系统初始化程序,配置时钟树

    系列文章目录 Github开源地址 从头开始写STM32F103C8T6驱动库(一)--STM32CubeMX创建并调整工程结构 从头开始写STM32F103C8T6驱动库(二)--编写系统初始化程序 ...

  5. STM32F103C8T6驱动舵机SG90 配置定时器TIM2,TIM3,TIM4的多种重映射模式下的不同IO口

    STM32F103C8T6驱动舵机SG90 配置定时器TIM2,TIM3,TIM4的多种重映射模式下的不同IO口 1.使用到的工具介绍 2.整个简单介绍 3.程序的介绍 1.使用到的工具介绍: kei ...

  6. 从头开始写STM32F103C8T6驱动库(四)——编写延时函数,详解Systick

    系列文章目录 Github开源地址 从头开始写STM32F103C8T6驱动库(一)--STM32CubeMX创建并调整工程结构 从头开始写STM32F103C8T6驱动库(二)--编写系统初始化程序 ...

  7. Android BroadcastReceiver中播放提示语音有时失效问题

    Android BroadcastReceiver 千万不要做耗时的操作,如果有耗时的操作,请让OnReceive 中调用service. @Override public void onReceiv ...

  8. 干了5Android开发还没掌握-binder-机制、驱动核心源码?我劝你早点改行吧

    bwr.read_consumed = 0; if (copy_to_user(ubuf, &bwr, sizeof(bwr))) ret = -EFAULT; goto out; } } i ...

  9. Qt5.4.1播放视频语音文件

    首先.pro文件添加 multimedia和multimediawidgets QT += multimedia multimediawidgets .cpp或者.h文件导入qmediaplayer. ...

最新文章

  1. 三:CAP与Base理论
  2. 深度学习(九)caffe预测、特征可视化python接口调用
  3. 微服务组件记事本:Skywalking执行效果 · 多图篇
  4. 2017蓝桥杯省赛---java---C---2(兴趣小组)
  5. python对象的复制问题
  6. 微信开发---微信网页授权、JS-SDK和微信公众号的基本设置
  7. dev控件ASPxComboBox设置ReadOnly=true后
  8. 电脑外接显示器或ipad分屏
  9. 2020年58同城产品笔试题
  10. mysql脏写_图解脏写、脏读、不可重复读、幻读
  11. FileZilla Server源码分析--大漠落日5节
  12. 简单的学生成绩录入查询系统
  13. STM32CubeMx使用教程(一)——安装CubeMx
  14. 【2D多目标跟踪】Quasi-Dense Similarity Learning for Multiple Object Tracking阅读笔记
  15. 推荐:12条经过验证的创业赚钱秘诀!(转)
  16. 计算机通信与网络(一)
  17. gitee 链接报错
  18. java object比较排序
  19. 金山词霸字典转换工具
  20. 数字图像处理(Digital Image Processing)

热门文章

  1. CSS学习笔记|MDN-CSS选择器
  2. Android 安全卸载U盘的方法
  3. 车速与档位匹配关系_汽车档位与速度的匹配,速度与档位匹配的标准
  4. Linux 学习笔记(六):Linux
  5. hint: Updates were rejected because a pushed branch tip is behind its remote
  6. 给tomcat7w.exe改名字
  7. 【转】如何在网上查找免费电子书
  8. 审计需要掌握的计算机语言,审计人员应该具备的素质
  9. PTA---C++实现,计算正方体、圆柱体的表面积、体积
  10. ACM必学知识点清单