物理链路层
需要处理VOICE_BUSY与VOICE_DATA线
VOICE_BUSY:PC4 通用输入
VOICE_DATA:PC5 通用推挽输出
BUSE线说明:有声音输出高、无声音时输出低、发协议码之前先判断是否忙碌
while(VOICE_BUSY);
VOICE_SEND(cmd);
数据层(软件层)
通过数据引脚(DATA)发送特定的协议码播报对应的语音
同步头:8ms高,1ms低
数据1:1.5ms高,0.5ms低
数据0:0.5ms高,1.5ms低
每次发送八位数据、先处理高位(MCU发到高位)
数据处理
//伪代码说明:先发送高位
void fun(u8 data)
{
u8 i;
for(i=0;i<8;i++)
{
if(data & 0x80)
{
DATA=1;
}
else
{
DATA=0;
}
data<<=1;
}
}
代码流程分析
1.配置IO(PC4 输入 PC5 输出)
/*
Function name:Voice_Broad_Config
Description:MCU驱动语音模块基本配置
param:None
retval:None
Remarks:
PC5-->通用推挽输出
PC4-->通用输入
*/
void Voice_Broad_Config(void)
{
/*************************库函数********************************/
GPIO_InitTypeDef gpio_InitTypeDef;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);//打开PC时钟
gpio_InitTypeDef.GPIO_Mode=GPIO_Mode_OUT;//通用输出模式
gpio_InitTypeDef.GPIO_OType=GPIO_OType_PP;//输出类型 推挽
gpio_InitTypeDef.GPIO_Pin=GPIO_Pin_5;//引脚
gpio_InitTypeDef.GPIO_PuPd=GPIO_PuPd_NOPULL;//无上下拉
gpio_InitTypeDef.GPIO_Speed=GPIO_Fast_Speed;//速度
GPIO_Init(GPIOC,&gpio_InitTypeDef);
gpio_InitTypeDef.GPIO_Mode=GPIO_Mode_IN;//通用输出模式
gpio_InitTypeDef.GPIO_Pin=GPIO_Pin_4;//引脚
GPIO_Init(GPIOC,&gpio_InitTypeDef);
}
2.同步头
/*
Function name:synchro_head
Description:同步头
param:None
retval:None
Remarks:
8ms高 1ms低
*/
void synchro_head(void)
{
SEND_DATA=1;
time_delay(8000);
SEND_DATA=0;
time_delay(1000);
}
3.数据1
/*
Function name:data_1
Description:数据1
param:None
retval:None
Remarks:
1.5ms高 0.5ms低
*/
void data_1(void)
{
SEND_DATA=1;
time_delay(1500);
SEND_DATA=0;
time_delay(500);
}
4.数据0
/*
Function name:data_0
Description:数据0
param:None
retval:None
Remarks:
0.5ms高 1.5ms低
*/
void data_0(void)
{
SEND_DATA=1;
time_delay(500);
SEND_DATA=0;
time_delay(1500);
}
5.发送协议码(按先发送高位来)
/*
Function name:send_data_high
Description:先发送数据最高位
param:u8 data
retval:None
Remarks:
*/
void send_data_high(u8 data)
{
u8 i;
synchro_head();
for(i=0;i<8;i++)
{
if(data & 0x80)//第二种方法
{
data_1();
}
else
{
data_0();
}
data<<=1;
}
}
6.判断BUSY线不忙的时候发(发声音时忙碌,无声音时不忙碌):注意两句话发出的间隔不能小于等于1ms
for(i=0;i<3;i++)
{
send_data_high(i);
while(REV_DATA);
Delay_us(1100);
}