历史上的今天
今天是:2025年07月24日(星期四)
2018年07月24日 | STM32 PCM1770调试
2018-07-24 来源:eefocus
本文初步介绍了PCM1770配置方法与调试过程,希望能起到抛砖引玉的作用。
PCM1770是24位的DAC,支持I2S信号输入,可直接驱动耳机,也可加后级功放来驱动喇叭,应用电压范围为-0.3V至4V,普通的3V3就可以。
如图1所示,该DAC对22KHZ以上频率有60dB的衰减,相当于自带一个低通滤波,减少了后级的干扰。
如图2所示,该DAC在3V3电压条件下有100dB的信噪比,72dB的分离度确实低了点,用来玩玩还行。
图1
图2
接下来讲PCM1770的上电时序,芯片手册中如图3对上电时序描写的很清楚,就是在VCC起来至少1ms之后,将PD引脚拉高,在1024个内部系统时钟后,芯片内部会自动复位,之后双输出会拉高表示复位成功。可以利用GPIO进行PD的操作,也可利用单片机内部的Reset引脚进行硬件复位,我采用了第二种方法,复位电路如图4,时序如图5,CH1是RESET端(PD),CH2是VCC,可见,PD拉高是在VCC拉高1.2ms之后,满足PCM1770的复位时序要求。
图3
图4 图5
再来看看PCM1770的配置寄存器和寄存器的写入时序,常用到的寄存器如图6,关于软件静音、音量衰减、模拟混合等功能可按自己的需求去配置,因为我们用到的数据传输格式为I2S,故在这里必须要配置音频数据传输格式选择寄存器,由图7可得,输出传输数据协议的选择主要是配置FMT寄存器的3个位,使用I2S进行数据传输需将FMT配置为001,从图6看出FMT的3个位位于寄存器3,地址为03h,因此可知要写入数据为0000 0011 0000 0001b。
图6
图7
图8
图9
寄存器的写入时序如图8和图9,图8对其进行了简单的描述,就是指MS拉低,MC作为时钟运行,MD发送16位的数据,前8位为写入寄存器的地址,后8位为写入的数据;图9对时序进行了详细的规定,对此编写的简单代码如下。
void init_hardware(){
int i=15;
GPIO_ResetBits(GPIOC, GPIO_Pin_10);//MC
delay_nms(2);
GPIO_ResetBits(GPIOC, GPIO_Pin_7);//MS
delay_nms(2);
while(i>=0){
delay_nms(1);
GPIO_ResetBits(GPIOC, GPIO_Pin_10);//第1次上升沿
if(i==0){
GPIO_SetBits(GPIOC, GPIO_Pin_12);
}else if(i==9){
GPIO_SetBits(GPIOC, GPIO_Pin_12);
}else if(i==8){
GPIO_SetBits(GPIOC, GPIO_Pin_12);
}else{
GPIO_ResetBits(GPIOC, GPIO_Pin_12);
}
delay_nms(1);
GPIO_SetBits(GPIOC, GPIO_Pin_10);
i--;
}
GPIO_SetBits(GPIOC, GPIO_Pin_12);//MD
delay_nms(2);
史海拾趣
|
defun( gfe_HelloWorld ()prog( () mark = axlDBTransactionStart() axlControlRaise(\'options) HelloWorld_form_file = \"./HelloWorld.form\" _c ...… 查看全部问答> |
|
新兴的无线技术标准 随着人们对无线技术在过程工业中的应用兴趣持续增长,各种可用技术的数量也随之增加――要求为这些应用中的现场网络提供特定标准的愿望也增加了。 为过程工业而开发的无线标准目前有三个,分别是:WirelessHART(无线HART)、 ...… 查看全部问答> |
|
请问DC综合的乘法器是什么类型的?有必要再用verilog专门写一个乘法器吗? 大家好: 请问DC对于“*”综合出来的乘法器是什么类型的?有必要再用verilog专门写一个乘法器吗?现在我的工作时钟为20m左右,数据位数为32位的,需要乘法器在一个时 ...… 查看全部问答> |
|
在上一个文档中我给大家介绍了TI图形驱动库的结构,分为三层:显示驱动层,图形基元层,小工具层。其中显示驱动层是需要我们程序员自己补充的。现在我们来具体谈谈如果来补充和书写底层驱动函数。从ti的文档中我们可以看出,我们需要补充的就是tDis ...… 查看全部问答> |
|
各位兄弟大家好! 本人是学习单片机的新人,不仅是PIC,51单片机以前也没有接触过。 由于工作需要,从现在起需要学习PIC单片机,想听取各位兄弟的意见。 我的问题是汇编语言和C语言各自有什么特点,对于我这样的新手来 ...… 查看全部问答> |
|
STM32F103的USART1接收数据不一致,请香版主和各位兄弟帮忙 我使用英倍特的MCBSTM32开发板,用其USART1进行收发一串数据。 我现在的问题: 串口配置:波特率1200,1个起始位,8位数字,1个EVEN校验,一个停止位 STM32配置:波特率1200,1个起始位,9位数字,1个EVEN校验,一个停止位 串口发送数据: ...… 查看全部问答> |
|
#include <stdio.h> main() { int *Memory; Memory=(int *)malloc(100*sizeof(int)); .......... } 在编译是通过的。但连接是出现以下问题 Error[e16]: Segment DATA16_Z (size: 0x7d0 align: 0x1) is too long for segment definition ...… 查看全部问答> |




