语音模块的简介
“智能锁开发平台”板载一个语音芯片和一个
8
欧
1W
的喇叭,可以通过语音芯片和喇叭来播放
40
段语音 提示信息以及门铃音乐等。
语音芯片内的语音数据出厂时已经固化,用户不能自行烧录改变。
一:直流参数
电源电压:2.0V-5.5V(投CODE前请先确定好电压,使内部晶振产生更加 符合规格)
静态电流:小于10UA
这个模块的原理图如下所示
如下所示为每个引脚对应的功能
这个模块和单片机的通信时序为
1)
语言芯片内部语音编号数据输入管脚的空闲状态为“低电平”状态。
2)
在每发一个语言编号数据信号前必须要有一个同步头,同步头格式为“
8ms
的高电平
+1ms
的低电平
”
。
3)
“
1.5ms
的高电平
+0.5ms
的低电平”表示数据“
1
”,“
0.5ms
的高电平
+1.5ms
的低电平”表示数据“
0
”。
4)
数据传输顺序为:先发送数据的最高位
BIT7
,在发送
N-1
位,最后发送数据的最低位
BIT0
。
语音模块使用分析
语言芯片的“语言芯片测试管脚(
PA0
)”通过一个按键和地连接,每按下一次按键,则会自动切换播放芯 片内部下一首语音。“语言芯片忙碌状态管脚(PB0
)”连接到
MCU
的
PC4
管脚,“语言输入管脚(
PA1
)” 连接到 MCU
的
PC5
管脚,
只有在“语言输入管脚(PA1)”按语言芯片的通信时序发送“语音编号”表中对应 的编号指令
就可以播放相应的语言声音。
PB0脚(忙碌):有声音时输出高电平,无声音输出低电平。
语音编号表为
![](https://img-blog.csdnimg.cn/direct/748611ba80a549109664e2654e1198c2.png)
单片机按照一定的时序发送其中相应的指令给语音模块
语言芯片内部语音编号数据输入管脚(PA1)实现相应的播报
相关的代码如下
void VOICE_Init(void)
{
//开启时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
//初始化GPIOC
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed;
GPIO_Init(GPIOC,&GPIO_InitStruct);
}
这段为相应的初始化过程,配置了GPIO的初始化以及开启相应的时钟
void High(void)
{
GPIO_SetBits(GPIO_DATA_PORT,GPIO_PIN_DATA);
Delay_us(1500);
GPIO_ResetBits(GPIO_DATA_PORT,GPIO_PIN_DATA);
Delay_us(500);
}
高电平的条件为1.5ms的高电平加上0.5ms的低电平,代码如上
void Low(void)
{
GPIO_SetBits(GPIO_DATA_PORT,GPIO_PIN_DATA);
Delay_us(500);
GPIO_ResetBits(GPIO_DATA_PORT,GPIO_PIN_DATA);
Delay_us(1500);
}
低电平的条件为1.5ms的低电平加上0.5ms的高电平,配置低电平代码如上
void VoiceSendData(uint8_t data)
{
uint8_t i = 0;
GPIO_SetBits(GPIO_DATA_PORT,GPIO_PIN_DATA);
Delay_ms(8);
GPIO_ResetBits(GPIO_DATA_PORT,GPIO_PIN_DATA);
Delay_ms(1);
for(i = 0;i<8;i++)
{
if((data&0x80) == 0x80)
{
High();
}
else
{
Low();
}
data <<= 1;
}
GPIO_ResetBits(GPIO_DATA_PORT,GPIO_PIN_DATA);
}
这段的代码表示了单片机向语音模块的相应引脚发送相应指令的时序实现相应的语音播报
在每发一个语言编号数据信号前必须要有一个同步头
同步头过后为循环8次从高位到底为发送一个字节的指令相应的时序
发送完了之后把数据这个引脚重新置为低电平