STM32系列——手把手教你将SYN6288语音播报模块的标准库程序转为hal库使用

目录

前言

1. 原理

2. Cubmx配置

3. keil5编写代码

3.1 main.c

3.2 syn6288.c

3.3 syn6288.h


前言

本教程基于stm32f103c8t6最小系统板,hal库开发。

操作简单,讲解直接清楚,旨在让大家少走弯路。

1. 原理

SYN6288就是用到一个串口资源即可,用STM32开发起来不难。

2. Cubmx配置

配置串口3为异步通信模式 ,注意波特率必须是9600。试过了,115200是不行滴。

不用开启串口中断。

3. keil5编写代码

3.1 main.c

/* USER CODE BEGIN 0 */

/**************芯片设置命令*********************/
uint8_t SYN_StopCom[] = {0xFD, 0X00, 0X02, 0X02, 0XFD}; //停止合成
uint8_t SYN_SuspendCom[] = {0XFD, 0X00, 0X02, 0X03, 0XFC}; //暂停合成
uint8_t SYN_RecoverCom[] = {0XFD, 0X00, 0X02, 0X04, 0XFB}; //恢复合成
uint8_t SYN_ChackCom[] = {0XFD, 0X00, 0X02, 0X21, 0XDE}; //状态查询
uint8_t SYN_PowerDownCom[] = {0XFD, 0X00, 0X02, 0X88, 0X77}; //进入POWER DOWN 状态命令
/* USER CODE END 0 */
/* USER CODE BEGIN 3 */	  
	  //选择背景音乐2。(0:无背景音乐  1-15:背景音乐可选)
		//m[0~16]:0背景音乐为静音,16背景音乐音量最大
		//v[0~16]:0朗读音量为静音,16朗读音量最大
		//t[0~5]:0朗读语速最慢,5朗读语速最快
		//其他不常用功能请参考数据手册
		SYN_FrameInfo(2, "[v7][m1][t5]欢迎使用");
	    HAL_Delay(1000);
	    HAL_Delay(1000);
  }
  /* USER CODE END 3 */

3.2 syn6288.c

#include "syn6288.h"
#include "usart.h"
#include "string.h"

//Music:选择背景音乐。0:无背景音乐,1~15:选择背景音乐
void SYN_FrameInfo(uint8_t Music, uint8_t *HZdata)
{
  /****************需要发送的文本**********************************/
  unsigned  char  Frame_Info[50];
  unsigned  char  HZ_Length;
  unsigned  char  ecc  = 0;  			//定义校验字节
  unsigned  int i = 0;
  HZ_Length = strlen((char*)HZdata); 			//需要发送文本的长度

  /*****************帧固定配置信息**************************************/
  Frame_Info[0] = 0xFD ; 			//构造帧头FD
  Frame_Info[1] = 0x00 ; 			//构造数据区长度的高字节
  Frame_Info[2] = HZ_Length + 3; 		//构造数据区长度的低字节
  Frame_Info[3] = 0x01 ; 			//构造命令字:合成播放命令
  Frame_Info[4] = 0x01 | Music << 4 ; //构造命令参数:背景音乐设定

  /*******************校验码计算***************************************/
  for(i = 0; i < 5; i++)   				//依次发送构造好的5个帧头字节
  {
    ecc = ecc ^ (Frame_Info[i]);		//对发送的字节进行异或校验
  }

  for(i = 0; i < HZ_Length; i++)   		//依次发送待合成的文本数据
  {
    ecc = ecc ^ (HZdata[i]); 				//对发送的字节进行异或校验
  }
  /*******************发送帧信息***************************************/
  memcpy(&Frame_Info[5], HZdata, HZ_Length);
  Frame_Info[5 + HZ_Length] = ecc;
  HAL_UART_Transmit(&huart3,Frame_Info,5 + HZ_Length + 1,10000);
  //USART3_SendString(Frame_Info, 5 + HZ_Length + 1);
}


/***********************************************************
* 名    称: YS_SYN_Set(u8 *Info_data)
* 功    能: 主函数	程序入口
* 入口参数: *Info_data:固定的配置信息变量
* 出口参数:
* 说    明:本函数用于配置,停止合成、暂停合成等设置 ,默认波特率9600bps。
* 调用方法:通过调用已经定义的相关数组进行配置。
**********************************************************/
void YS_SYN_Set(uint8_t *Info_data)
{
  uint8_t Com_Len;
  Com_Len = strlen((char*)Info_data);
  HAL_UART_Transmit(&huart3,Info_data,Com_Len,10000);
 // USART3_SendString(Info_data, Com_Len);
}

3.3 syn6288.h

#ifndef __SYN6288_H
#define __SYN6288_H


#include "stm32f1xx_hal.h"
void SYN_FrameInfo(uint8_t Music, uint8_t *HZdata);
void YS_SYN_Set(uint8_t *Info_data);

#endif

以上就是STM32驱动syn6288的HAL库版本的代码,全部按我这个操作100%一次驱动syn6288。

码字不易,希望喜欢的小伙伴别忘了点赞+收藏+关注,你们的肯定就是我创作的动力。

欢迎大家积极交流,本文未经允许谢绝转载!!!文章来源地址https://uudwc.com/A/Ogn9

原文地址:https://blog.csdn.net/weixin_62261692/article/details/129962861

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年06月16日 02:52
用STC-ISP烧录过程中一直显示“正在检测单片机”的解决办法
下一篇 2023年06月16日 02:52