SYN6288是一款语音播报芯片,可以将文字转化为语音并通过喇叭播放。
模块引脚如下:可见通信方式为串口
模块引脚定义如下:
BN0和BP0:接喇叭
BUSY:忙信号检测,可不接
TX:接单片机RX
RX:接单片机TX
本例程通过串口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);
}
/**
* @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); // 串口发送
}
原作者:卢阿涛
更多回帖