本帖最后由 jinglixixi 于 2024-1-23 20:37 编辑
KT148A语音芯片是一种受MCU 控制的功能器件,并以单线通讯的方式工作,俗称一线串口,但可不是 UART 那样的通信呦。其通信协议是非标准化的,需按其标准来生成。
该芯片各引脚的作用如表1所示:
以该芯片制作的功能模块如图1所示,图2是其电路原理图。在使用时,需通过SPK接口来外接一个8欧姆的扬声器。
图1 功能模块
图2原理图
在进行语音播放前,需使用USB转TTL通讯模块来下载语音片段,然后即可通过TRIG键来进行播放测试。每按下一次,即播放一段,并自动指向下一段语音片段。
在下载语音片段时,需将USB转TTL通讯模块的TX引脚连接到语音模块的PB1,并按下DOWN下载键以进入语音下载模式。
语音片段下载的软件如图3所示,需注意的是语音片段的文件格式为*.f1a,普通格式的MP3文件需通过软件来完成转换。
图3 软件界面
有了前面的准备工作,就可以在CH32X035上编程进行单线通讯了。通过程序的控制,可任意指定播放的语音片段。整个电路的硬件构成见图4所示,测试是通过开发板上的按键来触发语音段的播放,在实际应用中,则是根据工作的进程来自动触发相应语音段的播放,以起到操作提示的效果。
图4 硬件构成
在PB8连接语音模块PB1的情况下,相应的软件设计如下。
将PB8配置成数据发送引脚及PB7配置按键检测引脚的函数为:
- void BSP_TX_Init(void)
- {
- GPIO_InitTypeDefGPIO_InitStructure = {0};
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
-
实现高低电平输出的语句定义为:
#define IO1_HIGH() GPIO_WriteBit(GPIOB, GPIO_Pin_8, Bit_SET);
#define IO1_LOW() GPIO_WriteBit(GPIOB, GPIO_Pin_8, Bit_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);
- IO1_LOW();
- HAL_DelayUs(170);
- }
- else
- {
- IO1_HIGH();
- HAL_DelayUs(170);
- IO1_LOW();
- HAL_DelayUs(500);
- }
- dat = dat>>1;
- }
- IO1_HIGH();
- }
语音播放的测试主程序为:
- int main(void)
- {
- u8 i=0;
- int n=1,M=6;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- SystemCoreClockUpdate();
- Delay_Init();
- BSP_LED_Init();
- BSP_LED_On();
- GPIO_Toggle_INIT();
- BSP_TX_Init();
- while(1)
- {
- if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7)==1)
- {
- GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);
- oneline_send_one_data(n);
- if(n<M) n=n+1;
- else
- n=1;
- }
- else
- {
- GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);
- }
- }
- }
经程序的编译和下载,证明程序正确且有效。
演示视频:
播放器加载失败: 未检测到Flash Player,请到
安装
语音播报