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
公众号:
© 版权声明
THE END
暂无评论内容