流变分析器的工作过程中,涉及接触高温和物体缠绕的物体,为防止意外的出现,适时地发出语音提示是十分必要的安全措施之一。
将串口与MP3语音模块相结合,在适当的时机触发语音播报即可实现这样要求。
MP3语音模块及其引脚排列如图1所示,在一般情况下,它只需与开发板连接3条线,即5V电源、GND及串口发送信号端,这里是连接UART4_TX即引脚PB3。
图1 模块引脚排列
MP3语音模块工作的波特率为9600bps,为便于其控制指令是存放在数组中,即:
uint8_t cmd3[] = {0X7E, 0xFF, 0x06, 0X03, 00, 00, 01, 0xFE, 0xF7, 0XEF};
实现指定提示内容的指令生成函数为:
void playn(uint16_t index)
{
int i;
uint8_t checksum = 0;
cmd3[5] = (uint8_t)(index >> 8);
cmd3[6] = (uint8_t)(index);
for (i=2; i<8; i++)
{
checksum += cmd3[i];
}
cmd3[8] = (uint8_t)~checksum;
}
基于感应触发的语音提示功能测试主程序为:
int main(void)
{
uint8_t f,p,i;
IWDT_Init(FL_IWDT_PERIOD_4000MS);
FL_Init();
SVD_Init(SVD_MONTIOR_VDD, FL_SVD_WARNING_THRESHOLD_GROUP11, FL_SVD_REFERENCE_1P0V);
while(false == SVD_Result_Confirmed(SVD_HIGHER_THRESHOLD, 2000U/*us*/));
RMU_BOR_Init(FL_RMU_BOR_THRESHOLD_2P00V);
SystemClockInit();
MF_UART4_Init();
TSI_Init();
FL_IWDT_ReloadCounter(IWDT);
TSI_Widget_EnableAll();
FL_IWDT_ReloadCounter(IWDT);
TSI_Start();
FL_IWDT_ReloadCounter(IWDT);
f=0;
p=0;
while(1)
{
FL_IWDT_ReloadCounter(IWDT);
PowerDownMonitoring();
TSI_Debug_Handler();
FL_IWDT_ReloadCounter(IWDT);
if(TSI_GETSTAT_SCAN_CPLT())
{
TSI_CLRSTAT_SCAN_CPLT();
TSI_Widget_UpdateAll();
if(TSI_WidgetList.slider.sliderStatus==1)
{
f=TSI_WidgetList.slider.centerPos/50;
if(f!=p)
{
printf("N= %d\n\r",f);
playn(f);
for(i=0;i<10;i++)
{
FL_UART_WriteTXBuff(UART4, cmd3[i]);
while(FL_UART_IsActiveFlag_TXBuffEmpty(UART4) != 0x01UL);
}
p=f;
}
}
}
}
}
经程序的编译与下载,其测试效果如图2和图3所示,说明设计功能正确。
图2 触发值测试
图3 提示指令测试