ARM技术william hill官网
直播中

h1654155272.9717

8年用户 1259经验值
擅长:电源/新能源
私信 关注
[经验]

可以将文字转化为语音并通过喇叭播放的SYN6288语音播报芯片介绍

一、硬件介绍

SYN6288是一款语音播报芯片,可以将文字转化为语音并通过喇叭播放。

二、引脚连接

模块引脚如下:可见通信方式为串口

模块引脚定义如下:

BN0和BP0:接喇叭
BUSY:忙信号检测,可不接
TX:接单片机RX
RX:接单片机TX

三、软件实现

1. 串口配置

本例程通过串口2进行测试。

/**
 * @name: 
 * @function: 引脚配置
 * [url=home.php?mod=space&uid=1141835]@Return[/url] {*}
 * @author: lengyuefeng
 * @Date: 2022-11-25 20:33:41
 */
void bsp_usart3_gpioConfig(void)
{
    /* enable GPIO clock */
    rcu_periph_clock_enable(BSP_USART3_GPIO_RCU);

    /* configure the USART0 TX pin and USART0 RX pin */
    gpio_af_set(BSP_USART3_TX_PORT, GPIO_AF_7, BSP_USART3_TX_PIN);
    gpio_af_set(BSP_USART3_RX_PORT, GPIO_AF_7, BSP_USART3_RX_PIN);

     /* configure USART0 TX as alternate function push-pull */
    gpio_mode_set(BSP_USART3_TX_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, BSP_USART3_TX_PIN);
    gpio_output_options_set(BSP_USART3_TX_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, BSP_USART3_TX_PIN);

    /* configure USART0 RX as alternate function push-pull */
    gpio_mode_set(BSP_USART3_RX_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, BSP_USART3_RX_PIN);
    gpio_output_options_set(BSP_USART3_RX_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, BSP_USART3_RX_PIN);

}
/**
 * @name: 
 * @function: 串口配置
 * [url=home.php?mod=space&uid=3142012]@param[/url] {uint32_t} bound:波特率
 * @return {*}
 * @author: lengyuefeng
 * @Date: 2022-11-25 20:36:50
 */
void bsp_usart3_usartConfig(uint32_t bound)
{
    /* enable USART clock */
    rcu_periph_clock_enable(BSP_USART3_RCU);

    /* USART configure */
    usart_deinit(BSP_USART3_USART);
    usart_baudrate_set(BSP_USART3_USART, bound);
    usart_receive_config(BSP_USART3_USART, USART_RECEIVE_ENABLE);
    usart_transmit_config(BSP_USART3_USART, USART_TRANSMIT_ENABLE);
    usart_enable(BSP_USART3_USART);                 
}

2. SYN6288播放函数

/**
 * @name: 
 * @function: 发送文本信息
 * @param {uint8_t} backSound: 背景音乐
 *                     0:无背景音乐
 *                     1~15:选择背景音乐
 * @param {uint8_t} *text:要发送的文本
 * @return {*}
 * @author: lengyuefeng
 * @Date: 2022-11-24 17:22:01
 */
static uint8_t dri_syn6288_sendText(uint8_t backSound,uint8_t *text)
{
    uint8_t tempBuf[DRI_SYN6288_BUFFER_LENGTH],i,crc = 0;
    uint16_t textLength; // 文本长度

    textLength = strlen((uint8_t*)text);
    /* 帧固定配置信息 */
    tempBuf[0] = 0xFD;    // 帧头
    // tempBuf[1] = textLength >> 8;    // 数据长度高字节
    tempBuf[1] = 0x00;    // 数据长度高字节
    tempBuf[2] = (textLength & 0xff) + 3;    // 数据长度低字节
    tempBuf[3] = 0x01;    // 构造命令字:合成播放命令
    /* 字节高5位表示背景音乐,低3位表示编码格式 0是GB2312编码 */
    tempBuf[4] = 0x01|(backSound << 4);    // 构造命令参数:背景音乐设定
    /* 校验码计算 */
    for(i = 0; i < 5; i++)
    {
        crc = crc ^ tempBuf[i];     // 对发送的字节进行异或校验
    }

    for(i = 0; i < textLength; i++)
    {
        crc = crc ^ text[i];         //对发送的字节进行异或校验
    }
    /* 发送数据 */
    memcpy(&tempBuf[5], text, textLength);
    tempBuf[5 + textLength] = crc;
    DRI_SYN6288_SEND_BUFFER(tempBuf,5 + textLength + 1); // 串口发送
}

原作者:卢阿涛

更多回帖

发帖
×
20
完善资料,
赚取积分