SNR9816TTS 中文TTS语音合成真人发音实时文字转语音模块驱动程序

speak.h

#ifndef __SPEAK_H
#define __SPEAK_H

#include <string.h>

#define USART3_RX_BUFFER_SIZE 256

void USART3_Init(uint32_t baudrate);

void speech(const uint8_t* data, uint16_t len);

void USART3_SendData(uint8_t data);
void voice_module_init(void);
void speech(const uint8_t* data, uint16_t len);

#endif

speak.c

#include "./SYSTEM/sys/sys.h"
#include "./BSP/speak/speak.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"

// 语音模块控制命令
uint8_t VOICE_VOL_CMD[] = { 0xFD, 0x00, 0x06, 0x01, 0x01, 0x5B, 0x76, 0x31, 0x5D };  // [v1]音量设置
uint8_t VOICE_MAN_CMD[] = { 0xFD, 0x00, 0x06, 0x01, 0x01, 0x5B, 0x6D, 0x31, 0x5D };  // [m1]男声
uint8_t VOICE_WOMAN_CMD[] = { 0xFD, 0x00, 0x06, 0x01, 0x01, 0x5B, 0x6D, 0x30, 0x5D }; // [m0]女声

/* 定义和变量声明 */
UART_HandleTypeDef huart3;
uint8_t USART3_RxBuffer[USART3_RX_BUFFER_SIZE];
uint16_t USART3_RxIndex = 0;
uint8_t USART3_RxData;
uint8_t USART3_RxComplete = 0;  // 接收完成标志

/* USART3初始化函数 */
void USART3_Init(uint32_t baudrate) {
    // 使能USART3和GPIOB时钟
    __HAL_RCC_USART3_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();

    // 配置GPIO
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    // PB10作为TX
    GPIO_InitStruct.Pin = GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    // PB11作为RX
    GPIO_InitStruct.Pin = GPIO_PIN_11;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    // 配置UART
    huart3.Instance = USART3;
    huart3.Init.BaudRate = baudrate;
    huart3.Init.WordLength = UART_WORDLENGTH_8B;
    huart3.Init.StopBits = UART_STOPBITS_1;
    huart3.Init.Parity = UART_PARITY_NONE;
    huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    huart3.Init.Mode = UART_MODE_TX_RX;

    // 初始化UART
    if (HAL_UART_Init(&huart3) != HAL_OK) {
//        Error_Handler();
    }
}

void USART3_SendData(uint8_t data)
{
    while((USART3->SR & 0X40) == 0);
    USART3->DR = data;
}

void speech(const uint8_t* data, uint16_t len){
    uint8_t dat_len=0;
    uint16_t i;
    dat_len = len+1;
    USART3_SendData(0xFD);
    USART3_SendData(dat_len>>8);
    USART3_SendData(dat_len);
    USART3_SendData(0x01);
    USART3_SendData(0x01);
    for(i = 0; i < len-1; i++) {
        USART3_SendData(data[i]);
    }
}

// 初始化函数
void voice_module_init(void) {
    // 发送初始化命令序列
    HAL_UART_Transmit(&huart3, VOICE_VOL_CMD, sizeof(VOICE_VOL_CMD), HAL_MAX_DELAY);
}

关注我

GitHub:https://github.com/PastKing

Gitee:https://gitee.com/past-dust

公众号:

图片[1]-SNR9816TTS 中文TTS语音合成真人发音实时文字转语音模块驱动程序 - 昔尘源分享-昔尘源分享

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容