音频数据的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

一晴྅

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

暂无评论

相关推荐

音频数据的Flash读取与DAC的播放

一、Flash地址空间的数据读取 1.Flash简介 在 STM32 芯片内部有一个 FLASH 存储器,它主要用于存储代码,我们在电脑上编写好应用程序后,使用下载器把编译后的代码文件烧录到该内部

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

一、创建STM32CUBEMX工程 芯片选择F103C8 配置定时器 打开外部时钟 配置时钟 配置PC13为output对应板子上的LED 设置堆栈大小为4K,导出 二、KEIL下的配置 将flash.c 和flash

使用STM32F103的DAC功能实现音频输出

一、DAC简介 DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC相反。在常见的数字信号系统中,大部分传感器