前面说了,我要用一块开发板,飞线给BoosterPack来实现把数字信号给到DAC8311实现扬声器有声音。
首先,跳线帽要接到SPI_DAC那边,如图1:
图 1
然后要把板卡上的AMP_ON直接接到GND上,让Amplifier一直打开,不enable是不会有声音的,同时我们做实验不用考虑功耗啥的,所以一直开着没影响,也就是把TPA301的SHUTDOWN管脚接地,如图2
图2
然后,把开发板的3.3V,GND,SPI_NSS,SPI_CLK,SPI_MOSI,一一对应接到板卡上即可,飞线后的效果,如图3,对应的SPI管脚如图4分别是PA4,PA5,PA7
图3
图4
++++++++++++++++++++++++++++++++++++++++完美分割线++++++++++++++++++++++++++++++++++++++++++++++++++
控制采用STM32的硬件SPI1,没有采用软件模拟SPI,这里简单讲下配置,贴一段代码,是配置SPI的
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
这个是设置3个GPIO的属性的,没啥好说的,下面是设置SPI本身的,
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
就说一点,我高亮加粗的那个属性,要设置成软件控制模式,不能是硬件SPI自带的,因为DAC8311一次传输16bit数据,所以NSS管脚要我们自己来控制置高或者置低,看了DAC8311的时序图就一目了然了,如图5
图 5
接下来就是发送数据,函数,从以前自己的代码大致改了下,不是很严谨,见笑了,当然了没有啥要返回的,就是懒得改了。
uint16_t SPIx_ReadWriteByte(uint8_t DataHi,uint8_t DataLo)
{
uint16_t readData = 0;
GPIO_ResetBits(GPIOA,GPIO_Pin_4);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, DataHi);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, DataLo);
GPIO_SetBits(GPIOA,GPIO_Pin_4);
return readData;
}
好了,主要框架就是这样,送过SPI发送,板卡就能发出噗噗噗的响声了,接下来我要研究下,能不能来一段曲子,如果有高人了解相关方法可以回帖告诉我呀。大致代码发个附件吧。
code.rar
(1.78 MB)
|