完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
首先描述一下这个问题的来龙去脉, 端午节前,我同事也发帖子问了一下,但感觉大家感觉没有get到点子上。我再把问题重新描述一下。
目前我们公司用STM32F429做一个音频的扩展应用要用2个音频总线。已经用了一个SAI接口模拟PCM总线,目前还要用一个I2S总线。我们模拟SAI的初始化模式用HAL库进行初始化。不过用逻辑分析仪进行测量,主时钟和帧时钟都没有时钟输出,所以绑定DMA的后续工作也没有继续进行。 我们I2S初始化主要是2个部分 1.GPIO引脚复用。 2.I2S的格式,主从模式、采样位数、采样率等等。 DMA的初始化暂时屏蔽了。以下是部分初始化代码: /* I2S 引脚复用初始化 */ void HAL_I2S_MspInit(I2S_HandleTypeDef *hi2s) { __HAL_RCC_GPIOC_CLK_ENABLE() ; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_SPI2_CLK_ENABLE(); GPIO_InitTypeDef GPIO_Initure1; GPIO_InitTypeDef GPIO_Initure2; GPIO_InitTypeDef GPIO_Initure3; GPIO_Initure1.Pin = GPIO_PIN_10|GPIO_PIN_12|GPIO_PIN_15; GPIO_Initure1.Mode = GPIO_MODE_AF_PP; GPIO_Initure1.Pull=GPIO_PULLUP; GPIO_Initure1.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_Initure1.Alternate = GPIO_AF5_SPI2; GPIO_Initure2.Pin= GPIO_PIN_2; GPIO_Initure2.Mode=GPIO_MODE_AF_PP; GPIO_Initure2.Pull=GPIO_PULLUP; GPIO_Initure2.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_Initure2.Alternate= GPIO_AF6_I2S2ext; GPIO_Initure3.Pin= GPIO_PIN_6; GPIO_Initure3.Mode=GPIO_MODE_AF_PP; GPIO_Initure3.Pull=GPIO_PULLUP; GPIO_Initure3.Speed=GPIO_SPEED_FREQ_HIGH; GPIO_Initure3.Alternate= GPIO_AF5_SPI2; HAL_GPIO_Init(GPIOB, &GPIO_Initure1); //PB10/12/15 复用功能输出 HAL_GPIO_Init(GPIOC, &GPIO_Initure2); HAL_GPIO_Init(GPIOC, &GPIO_Initure3); //PC2/6 复用功能输出 } //设置IIS的采样率(@MCKEN) 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++)//看看改采样率是否可以支持 { if(samplerate==I2S_PSC_TBL[0])break; } ...... ...... } /*I2S 数据格式初始化 */ static void My_I2S2_Init(void) { I2S_HandleTypeDef HI2S; __HAL_I2S_DISABLE(&HI2S); HI2S.Instance = SPI2; HI2S.Init.Mode = I2S_MODE_MASTER_TX; //I2S主机发送工作模式 HI2S.Init.Standard = I2S_STANDARD_PHILIPS; //I2S飞利浦标准 HI2S.Init.DataFormat = I2S_DATAFORMAT_16B; //数据长度16位 HI2S.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; HI2S.Init.AudioFreq = I2S_AUDIOFREQ_16K; HI2S.Init.CPOL = I2S_CPOL_HIGH; HI2S.Init.ClockSource = I2S_CLOCK_PLL; HI2S.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_ENABLE; HI2S.State=HAL_I2S_STATE_RESET; if(HAL_I2S_GetState(&HI2S) == HAL_I2S_STATE_RESET) { HAL_I2S_MspInit(&HI2S); } __HAL_I2S_ENABLE(&HI2S); //SPI2 I2S EN 使能 } int main(void) { Stm32_Clock_Init(384,25,2,8); //设置时钟,192Mhz delay_init(192); //初始化延时函数 My_I2S2_Init(); I2S2_SampleRate_Set(16000); //I2S2_TX_DMA_Init(&buf0[0],&buf1[0],32); while(1) { }; } |
|
相关推荐
2个回答
|
|
我遇到了同样的问题,无法解决
|
|
|
|
这个我后来直接进行寄存器的配置解决了,没有用库函数
|
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 10:13 , Processed in 2.258125 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号