【ACM32G103RCT6开发板测评】+语音模块播放控制
[复制链接]
KT148A语音芯片是一种受MCU 控制的功能器件,它以单线通讯方式工作,俗称一线串口,但可不是 UART 通信呦。其通信协议也是非标准的,需按其标准来使用。
该芯片各引脚的作用如表1所示:
以该芯片制作的功能模块如图1所示,图2是其电路原理图。在使用时,需通过SPK接口来外接8欧姆的扬声器。
图1 功能模块
图2原理图
在进行语音播放控制前,需使用USB转TTL通讯模块来下载语音片段,然后即可通过按键TRIG来进行播放测试。每按下一次,即播放一次,并自动指向下一段语音片段。
在下载语音片段时,需将USB转TTL通讯模块的TX引脚连接到语音模块的PB1,并按下DOWN下载键以进入语音下载模式。
语音片段下载的软件如图3所示,需注意的是语音片段的文件格式需为*.f1a。
图3 软件界面
有了前面的准备工作,就可以在ACM32G103开发板上编程进行单线通讯控制了。通过程序的控制,可任意指定播放的语音片段。整个电路的硬件构成见图4所示,测试是通过开发板上的按键来触发语音段的播放,在设计应用时,则是根据实际的工作进程来自动触发相应语音段的播放,以起到操作提示的效果。
图4 硬件构成
在PB8连接语音模块PB1的情况下,相应的软件设计如下。
将PB8配置成数据发送引脚的函数为:
voidBSP_TX_Init(void)
{
GPIO_InitTypeDefGPIO_InitStruct;
__HAL_RCC_GPIOB_CLK_ENABLE ();
GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Drive = GPIO_DRIVE_LEVEL3;
GPIO_InitStruct.Alternate = GPIO_FUNCTION_0;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
实现高低电平输出的语句定义为:
#define IO1_HIGH() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET)
#define IO1_LOW() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET)
播放指定语音段的函数为:
void oneline_send_one_data(u8 dat)
{
u8 i = 0 ;
IO1_LOW() ; /*现将总线拉低*/
HAL_DelayUs (5000) ;
for(i=0 ; i<8 ;i++)
{
if(dat & 0x01){
IO1_HIGH() ;
HAL_DelayUs(500); /*延时600us*/
IO1_LOW();
HAL_DelayUs (170) ; /*延时200us*/
}
else
{
IO1_HIGH() ;
HAL_DelayUs (170); /*延时200us*/
IO1_LOW();
HAL_DelayUs (500) ; /*延时600us*/
}
dat = dat >> 1 ; /*发送的时候,先发送最高位,再发送次高位,以此类推*/
}
IO1_HIGH() ; /*空闲时将该脚拉高即可*/
}
语音播放的测试主程序为:
void APP_Test(void)
{
int n=1;
BSP_LED_Init();
BSP_PB_Init();
BSP_LED_On();
while(1)
{
if(BSP_PB_GetState()==1)
{
BSP_LED_On();
oneline_send_one_data(n); //播放对应声音
if(n<M) n=n+1;
else
n=1;
}
else
{
BSP_LED_Off();
}
};
}
经程序的编译和下载,证明程序正确且有效。
|