音频数据的Flash读取与DAC播放(精简)

一、创建STM32CUBEMX工程

芯片选择F103C8
在这里插入图片描述
配置定时器
在这里插入图片描述
打开外部时钟
请添加图片描述
配置时钟请添加图片描述
配置PC13为output对应板子上的LED请添加图片描述
设置堆栈大小为4K,导出请添加图片描述

二、KEIL下的配置

将flash.c 和flash.h添加到工程中
在这里插入图片描述
在main.c文件中添加flash.h头文件
并定义两个变量数组
请添加图片描述
请添加图片描述
在main函数中添加以下代码

/* USER CODE BEGIN 1 */
	uint8_t i;
	uint8_t FlashTest[] = "Hello This is a Flash Test DEMO";

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */
	
FlashWriteBuff( DEVICE_INFO_ADDRESS, FlashTest,sizeof(FlashTest) );        // 写入数据到Flash
	
	for(i=0;i<255;i++)
		FlashWBuff[i] = i;
	
FlashWriteBuff( DEVICE_INFO_ADDRESS + sizeof(FlashTest), FlashWBuff,255 );  // 写入数据到Flash
FlashReadBuff(  DEVICE_INFO_ADDRESS + sizeof(FlashTest),FlashRBuff,255  );  // 从Flash中读取数

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

编译
DEBUG下选择STlink请添加图片描述
将程序下载到单片机中请添加图片描述

请添加图片描述
下载完成请添加图片描述
点击进入debug,在view下打开memory1窗口请添加图片描述
打开watch1窗口请添加图片描述
Periodic Windows Update开启变量自动更新
请添加图片描述
将变量FlashWBuff 和 FlashRBuff加入到 Watch1请添加图片描述
在memory1中输入要观察的地址0x800c000请添加图片描述
运行程序,可以看到数组FlashRBuff中内容与数组FlashWBuff中内容一样请添加图片描述
定义好的句子写到了地址0x0800c000中了请添加图片描述

三、基于片内Flash的提示音播放程序

1、获取正弦信号
点击左上角的文件,新建,音频文件,采样率2000Hz,声道单声道,位深度16位
请添加图片描述
点击效果,生成,音调请添加图片描述
设置如下请添加图片描述
点击文件,导出,文件
在这里插入图片描述
格式设置如下
请添加图片描述
完成
二、截取音乐中的音频
随便找一首音乐,点击截取一段音频请添加图片描述
右键,点击存储选取,点击更改,配置如下请添加图片描述
点击确定,完成

打开软件WavToC,这是一个将WAV文件转化成C语言代码的文件
点击右下角的打开文件请添加图片描述
选择我们刚才生成的wav文件
请添加图片描述
点击生成代码,便自动生成出代码
请添加图片描述
请添加图片描述
可以点击试听,试一试是不是正确的声音,正弦波会发出嘟的声音
打开mdk文件在bsp_dac.c下的函数中,替换内容,就可以输出不同的波形。
请添加图片描述

四、参考文章

https://blog.csdn.net/qq_46467126/article/details/122098829?spm=1001.2014.3001.5501
https://blog.csdn.net/weixin_52288941/article/details/122147152?spm=1001.2014.3001.5501

版权声明:本文为CSDN博主「一晴྅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_56393108/article/details/122240501

一、创建STM32CUBEMX工程

芯片选择F103C8
在这里插入图片描述
配置定时器
在这里插入图片描述
打开外部时钟
请添加图片描述
配置时钟请添加图片描述
配置PC13为output对应板子上的LED请添加图片描述
设置堆栈大小为4K,导出请添加图片描述

二、KEIL下的配置

将flash.c 和flash.h添加到工程中
在这里插入图片描述
在main.c文件中添加flash.h头文件
并定义两个变量数组
请添加图片描述
请添加图片描述
在main函数中添加以下代码

/* USER CODE BEGIN 1 */
	uint8_t i;
	uint8_t FlashTest[] = "Hello This is a Flash Test DEMO";

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */
	
FlashWriteBuff( DEVICE_INFO_ADDRESS, FlashTest,sizeof(FlashTest) );        // 写入数据到Flash
	
	for(i=0;i<255;i++)
		FlashWBuff[i] = i;
	
FlashWriteBuff( DEVICE_INFO_ADDRESS + sizeof(FlashTest), FlashWBuff,255 );  // 写入数据到Flash
FlashReadBuff(  DEVICE_INFO_ADDRESS + sizeof(FlashTest),FlashRBuff,255  );  // 从Flash中读取数

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

编译
DEBUG下选择STlink请添加图片描述
将程序下载到单片机中请添加图片描述

请添加图片描述
下载完成请添加图片描述
点击进入debug,在view下打开memory1窗口请添加图片描述
打开watch1窗口请添加图片描述
Periodic Windows Update开启变量自动更新
请添加图片描述
将变量FlashWBuff 和 FlashRBuff加入到 Watch1请添加图片描述
在memory1中输入要观察的地址0x800c000请添加图片描述
运行程序,可以看到数组FlashRBuff中内容与数组FlashWBuff中内容一样请添加图片描述
定义好的句子写到了地址0x0800c000中了请添加图片描述

三、基于片内Flash的提示音播放程序

1、获取正弦信号
点击左上角的文件,新建,音频文件,采样率2000Hz,声道单声道,位深度16位
请添加图片描述
点击效果,生成,音调请添加图片描述
设置如下请添加图片描述
点击文件,导出,文件
在这里插入图片描述
格式设置如下
请添加图片描述
完成
二、截取音乐中的音频
随便找一首音乐,点击截取一段音频请添加图片描述
右键,点击存储选取,点击更改,配置如下请添加图片描述
点击确定,完成

打开软件WavToC,这是一个将WAV文件转化成C语言代码的文件
点击右下角的打开文件请添加图片描述
选择我们刚才生成的wav文件
请添加图片描述
点击生成代码,便自动生成出代码
请添加图片描述
请添加图片描述
可以点击试听,试一试是不是正确的声音,正弦波会发出嘟的声音
打开mdk文件在bsp_dac.c下的函数中,替换内容,就可以输出不同的波形。
请添加图片描述

四、参考文章

https://blog.csdn.net/qq_46467126/article/details/122098829?spm=1001.2014.3001.5501
https://blog.csdn.net/weixin_52288941/article/details/122147152?spm=1001.2014.3001.5501

版权声明:本文为CSDN博主「一晴྅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_56393108/article/details/122240501

生成海报
点赞 0

一晴྅

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

将音频编解码器添加到嵌入式系统的 5 个技巧

嵌入式系统播放音频的能力正在成为一个相当普遍的功能。音频为用户提供了很好的反馈,但如今有如此多的高保真音频可用,使用哔哔声和啁啾声不再削减它。开发人员当然可以使用分立组件和 DAC 从系统中获得不错的音频&#xff0