云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 音乐播放器课程设计报告

音乐播放器课程设计报告

  • 62 次阅读
  • 3 次下载
  • 2025/12/2 23:33:09

3.3流程图

3.4关键代码

I2s.c代码: #include \#include \

void I2S2_Init(u16 I2S_Standard,u16 I2S_Mode,u16 I2S_Clock_Polarity,u16 I2S_DataFormat)

{

I2S_InitTypeDef I2S_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);//使能SPI2时钟 RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2,ENABLE); //复位SPI2 RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2,DISABLE);//结束复位 I2S_InitStructure.I2S_Mode=I2S_Mode;//IIS模式 I2S_InitStructure.I2S_Standard=I2S_Standard;//IIS标准 I2S_InitStructure.I2S_DataFormat=I2S_DataFormat;//IIS数据长度

4

I2S_InitStructure.I2S_MCLKOutput=I2S_MCLKOutput_Disable;//主时钟输出禁

I2S_InitStructure.I2S_AudioFreq=I2S_AudioFreq_Default;//IIS频率设置 I2S_InitStructure.I2S_CPOL=I2S_Clock_Polarity;//空闲状态时钟电平 I2S_Init(SPI2,&I2S_InitStructure);//初始化IIS

SPI_I2S_DMACmd(SPI2,SPI_I2S_DMAReq_Tx,ENABLE);//SPI2 TX DMA请求使能.

I2S_Cmd(SPI2,ENABLE);//SPI2 I2S EN使能. }

//采样率计算公式:Fs=I2SxCLK/[256*(2*I2SDIV+ODD)] //I2SxCLK=(HSE/pllm)*PLLI2SN/PLLI2SR //一般HSE=8Mhz

//pllm:在Sys_Clock_Set设置的时候确定,一般是8 //PLLI2SN:一般是192~432 //PLLI2SR:2~7 //I2SDIV:2~255 //ODD:0/1

//I2S分频系数表@pllm=8,HSE=8Mhz,即vco输入频率为1Mhz //表格式:采样率/10,PLLI2SN,PLLI2SR,I2SDIV,ODD const u16 I2S_PSC_TBL[][5]= {

{800 ,256,5,12,1}, {1102,429,4,19,0}, {1600,213,2,13,0}, {2205,429,4, 9,1},

//8Khz采样率 //11.025Khz采样率 //16Khz采样率 //22.05Khz采样率

5

{3200,213,2, 6,1}, {4410,271,2, 6,0}, {4800,258,3, 3,1}, {8820,316,2, 3,1}, {9600,344,2, 3,1}, {17640,361,2,2,0}, {19200,393,2,2,0},

//32Khz采样率 //44.1Khz采样率 //48Khz采样率 //88.2Khz采样率 //96Khz采样率 //176.4Khz采样率 //192Khz采样率

};

//设置IIS的采样率(@MCKEN) //samplerate:采样率,单位:Hz //返回值:0,设置成功;1,无法设置. u8 I2S2_SampleRate_Set(u32 samplerate) {

u8 i=0; u32 tempreg=0;

samplerate/=10;//缩小10倍

for(i=0;i<(sizeof(I2S_PSC_TBL)/10);i++)//看看改采样率是否可以支持 { }

RCC_PLLI2SCmd(DISABLE);//先关闭PLLI2S

if(i==(sizeof(I2S_PSC_TBL)/10))return 1;//搜遍了也找不到

if(samplerate==I2S_PSC_TBL[i][0])break;

RCC_PLLI2SConfig((u32)I2S_PSC_TBL[i][1],(u32)I2S_PSC_TBL[i][2]);//设置I2SxCLK的频率(x=2) 设置PLLI2SN PLLI2SR

6

}

RCC->CR|=1<<26; //开启I2S时钟

//等待I2S时钟开启成功.

while((RCC->CR&1<<27)==0);

tempreg=I2S_PSC_TBL[i][3]<<0; //设置I2SDIV tempreg|=I2S_PSC_TBL[i][4]<<8; //设置ODD位 tempreg|=1<<9;

//使能MCKOE位,输出MCK //设置I2SPR寄存器

SPI2->I2SPR=tempreg; return 0;

//I2S2 TX DMA配置

//设置为双缓冲模式,并开启DMA传输完成中断 //buf0:M0AR地址. //buf1:M1AR地址. //num:每次传输数据量

void I2S2_TX_DMA_Init(u8* buf0,u8 *buf1,u16 num) {

NVIC_InitTypeDef NVIC_InitStructure; DMA_InitTypeDef DMA_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);//DMA1时钟使能

DMA_DeInit(DMA1_Stream4);

while (DMA_GetCmdStatus(DMA1_Stream4) != DISABLE){}//等待DMA1_Stream1可配置

/* 配置 DMA Stream */

DMA_InitStructure.DMA_Channel = DMA_Channel_0; //通道0 SPI2_TX通道 DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&SPI2->DR;//外设地址为:(u32)&SPI2->DR

7

搜索更多关于: 音乐播放器课程设计报告 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

3.3流程图 3.4关键代码 I2s.c代码: #include \#include \void I2S2_Init(u16 I2S_Standard,u16 I2S_Mode,u16 I2S_Clock_Polarity,u16 I2S_DataFormat) { I2S_InitTypeDef I2S_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);//使能SPI2时钟 RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2,ENABLE); //复位SPI2 RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2,DISABLE)

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com