资源简介
STM32CubeIDE Audio播放音频,DAC + TIM + DMA
随言:
建议下载该例程看看源码,但是由于官方使用的是外部TF卡存储音频,有一个读取外部数据拷贝到SRAM的延时问题,故官方使用了双缓存区方式。
而我只想简单播放音频,故我找了一段15秒的16KHz_8bit_wav格式音频,直接转成C语言数组存在芯片内部flash。由于是放在内部flash,故不用担心数据拷贝的速度问题,所以我使用单缓冲区就可以了。甚至可以不需要把内部flash数据拷贝到缓存区,直接让DMA指向flash数据的地址。
音频的采样位数为8bit 16bit 24bit 32bit,采样位数越高当然音质越好,但是相对的存储也急剧增加。
注意:STM32F4的DAC最大分辨率为12bit,故我们只能使用8bit的音频。还有就是一般高采样位数音频转低采样位数音频的一定要适当加入抖动(噪声)。
代码片段和文件信息
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
* © Copyright (c) 2020 STMicroelectronics.
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license
* the “License“; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include “main.h“
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include “datas.h“
#include
#include
#include
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
DAC_HandleTypeDef hdac;
DMA_HandleTypeDef hdma_dac1;
TIM_HandleTypeDef htim6;
UART_HandleTypeDef huart1;
/* USER CODE BEGIN PV */
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_DAC_Init(void);
static void MX_TIM6_Init(void);
static void MX_USART1_UART_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
#define BUFFER_SIZE (1024)
uint8_t Buffer0[BUFFER_SIZE] = {0};
uint8_t Buffer1[BUFFER_SIZE] = {0};
void Music_Player(void)
{
uint32_t DataLength = 0;
uint8_t* DataAddress = NULL;
#if 1
DataLength = sizeof(data) - 0x2c;
DataAddress = (unsigned char *)(data + 0x2c);
memset(Buffer0 0 BUFFER_SIZE);
memset(Buffer1 0 BUFFER_SIZE);
HAL_TIM_base_Start(&htim6);
while(1)
{
if(DataLength >= BUFFER_SIZE)
{
memcpy(Buffer0 DataAddress BUFFER_SIZE);
DataLength -= BUFFER_SIZE;
DataAddress += BUFFER_SIZE;
HAL_DAC_Start_DMA(&hdac DAC_CHANNEL_1 (uint32_t *)Buffer0 BUFFER_SIZE DAC_ALIGN_8B_R);
while(HAL_DAC_GetState(&hdac) != HAL_DAC_STATE_READY);
}
else break;
}
HAL_TIM_base_Stop(&htim6);
HAL_DAC_
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 25778 2020-05-25 16:38 DAC Audio3\.cproject
文件 7466 2020-05-25 16:38 DAC Audio3\.mxproject
文件 1299 2020-05-19 09:55 DAC Audio3\.project
文件 2372 2020-05-25 09:39 DAC Audio3\.settings\language.settings.xm
文件 1469034 2020-05-25 16:44 DAC Audio3\Core\Inc\datas.h
文件 2181 2020-05-25 16:38 DAC Audio3\Core\Inc\main.h
文件 16342 2020-05-25 16:38 DAC Audio3\Core\Inc\stm32f4xx_hal_conf.h
文件 2144 2020-05-25 16:38 DAC Audio3\Core\Inc\stm32f4xx_it.h
文件 10669 2020-05-26 13:46 DAC Audio3\Core\Src\main.c
文件 7374 2020-05-25 16:38 DAC Audio3\Core\Src\stm32f4xx_hal_msp.c
文件 5937 2020-05-25 16:38 DAC Audio3\Core\Src\stm32f4xx_it.c
文件 2675 2020-05-19 09:55 DAC Audio3\Core\Src\syscalls.c
文件 1468 2020-05-19 09:55 DAC Audio3\Core\Src\sysmem.c
文件 26457 2020-02-26 14:28 DAC Audio3\Core\Src\system_stm32f4xx.c
文件 23547 2020-02-26 14:28 DAC Audio3\Core\Startup\startup_stm32f407zgtx.s
文件 7538 2020-05-25 10:27 DAC Audio3\DAC Audio3 Debug.launch
文件 5968 2020-05-25 16:38 DAC Audio3\DAC Audio3.ioc
文件 3661 2020-05-26 14:24 DAC Audio3\Debug\Core\Src\main.d
文件 1375524 2020-05-26 14:24 DAC Audio3\Debug\Core\Src\main.o
文件 375 2020-05-26 14:24 DAC Audio3\Debug\Core\Src\main.su
文件 3597 2020-05-25 16:38 DAC Audio3\Debug\Core\Src\stm32f4xx_hal_msp.d
文件 1094848 2020-05-25 16:38 DAC Audio3\Debug\Core\Src\stm32f4xx_hal_msp.o
文件 383 2020-05-25 16:38 DAC Audio3\Debug\Core\Src\stm32f4xx_hal_msp.su
文件 3649 2020-05-25 16:38 DAC Audio3\Debug\Core\Src\stm32f4xx_it.d
文件 1089108 2020-05-25 16:38 DAC Audio3\Debug\Core\Src\stm32f4xx_it.o
文件 475 2020-05-25 16:38 DAC Audio3\Debug\Core\Src\stm32f4xx_it.su
文件 3853 2020-05-26 14:24 DAC Audio3\Debug\Core\Src\subdir.mk
文件 45 2020-05-19 14:55 DAC Audio3\Debug\Core\Src\syscalls.d
文件 78312 2020-05-19 14:55 DAC Audio3\Debug\Core\Src\syscalls.o
文件 637 2020-05-19 14:55 DAC Audio3\Debug\Core\Src\syscalls.su
............此处省略165个文件信息
相关资源
- 基于MSP430的DAC7811控制-C语言
- MyDAC7.6.11
- UniDac 8.0.1〖D7200710.110.210.3〗一键安装
- unidac7.0.1源码版
- unidac8.25for XE10.4.7z
- unidac 7.26 for delphi 10.2 tokyo 安装版
- STM32实战系列源码,按键/定时器/PWM
- DAC0832输出正弦波,C语言实现
- 自主访问控制DAC与带有互斥角色约束
- DAC8831 MSP430 c语言控制程序
- 51 波形发生器 仿真 DAC0832
- ATmega16与DAC0832连接用DA产生正弦波
- DAC8411程序C语言版用KEIL调试通过
- UniDac for delphi7
- 课程设计报告--dac0832实现锯齿波的输
- DAC8552生成正弦波程序
评论
共有 条评论