OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7293|回复: 10

求助 关于stm32 DAC的问题

[复制链接]

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-9-7
在线时间
0 小时
发表于 2013-9-7 16:19:55 | 显示全部楼层 |阅读模式

一共用到两个stm32板子

第一个板子用ADC采集声音信号,使之变为数字信号

经USART通信 连接到第二个开发板

第二个开发板接收到USART传过来的数据 发送到DAC  使之还原成声音信号

下面是DAC的部分程序  请各位大神看看  哪里出错了  用示波器看不到波形啊

int main(void)
{
 RCC_INIT_();
 NVIC_INIT_();
 GPIO_INIT_();
 USART_INIT_();
 DAC_INIT_();
 while(1)
 {
  DAC_SetChannel1Data(DAC_Align_8b_R,USART_ReceiveData(USART1));
// DAC->DHR12R1=USART_ReceiveData(USART1);
  DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
 }
}


 

void GPIO_INIT_(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;       
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA , &GPIO_InitStructure);
   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA , &GPIO_InitStructure);
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA , &GPIO_InitStructure);
}

void DAC_INIT_(void)
{
DAC_InitTypeDef DAC_InitStructure;
 
 DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
 DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
 DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
 DAC_Init(DAC_Channel_1, &DAC_InitStructure);
 
 DAC_Cmd(DAC_Channel_1, ENABLE);
DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
 DAC_DMACmd(DAC_Channel_1, DISABLE);
 }

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-9-7
在线时间
0 小时
 楼主| 发表于 2013-9-7 16:23:11 | 显示全部楼层
原子大哥给看看吧~~~~~~~~~~@正点原子
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-7 17:51:51 | 显示全部楼层
AD的数据采集速度,USART的传输速度,还有DAC的转换速度,三者关系你考虑了吗
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-7 17:54:33 | 显示全部楼层
115200bps的串口速度,1秒钟能传1.6k字节。你AD一秒钟采集多少数据,然后DAC需要多少数据才能保证声音连续?
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-9-7
在线时间
0 小时
 楼主| 发表于 2013-9-9 21:30:57 | 显示全部楼层
回复【4楼】ricefat:
---------------------------------
你能帮我看看这个程序哪里出错了么?

DAC的PA.4在示波器上面没波形啊       (只是单独的DAC程序)

int main(void)
{
RCC_INIT_();
GPIO_INIT_();
DAC_INIT_();

while(1)
{
DAC_SetChannel1Data(DAC_Align_12b_R,0x4fa0);//USART_ReceiveData(USART1)
DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
_delay_us(10);
}
}

void RCC_INIT_(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus=RCC_WaitForHSEStartUp();
if(HSEStartUpStatus==SUCCESS)
{
   RCC_HCLKConfig(RCC_SYSCLK_Div1);
 RCC_PCLK2Config(RCC_HCLK_Div1);
 RCC_PCLK1Config(RCC_HCLK_Div2);
 FLASH_SetLatency(FLASH_Latency_2);
 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
 //选择PLL时钟源为HSE1分频,倍数频为9,则PLL=8MHZ*9=72MHZ
 RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
 RCC_PLLCmd(ENABLE);
 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
 while(RCC_GetSYSCLKSource()!=0x08);
}
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_USART1, ENABLE);
}

void DAC_INIT_(void)
{
DAC_InitTypeDef DAC_InitStructure; 
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );   //使能PORTA通道时钟 
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );   //使能DAC通道时钟  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;  // 端口配置 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;   //模拟输入 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
  GPIO_Init(GPIOA, &GPIO_InitStructure); 

DAC_InitStructure.DAC_Trigger=DAC_Trigger_None; //不使用触发功能 TEN1=0 
DAC_InitStructure.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生 
DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置 
DAC_InitStructure.DAC_OutputBuffer=DAC_OutputBuffer_Disable ; //DAC1输出缓存关闭 BOFF1=1 
  DAC_Init(DAC_Channel_1,&DAC_InitStructure);  //初始化DAC通道1 

DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC1 
}




辛苦啦 谢谢
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-9 21:34:47 | 显示全部楼层
回复【5楼】Echo_Rabbit:
---------------------------------
可以参考下我们的例程。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-9-7
在线时间
0 小时
 楼主| 发表于 2013-9-9 21:44:46 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子大哥

我就是用的库函数这个版本的书

不过我不需要ADC也不用屏


就是用的书上的DAC

只是没搞懂为什么PA.4要输出高  所以注释掉了
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-9 22:44:51 | 显示全部楼层
回复【7楼】Echo_Rabbit:
---------------------------------
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;  // 端口配置 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;   //模拟输入 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
  GPIO_Init(GPIOA, &GPIO_InitStructure);  
PA4怎么设置成输入了
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-9-7
在线时间
0 小时
 楼主| 发表于 2013-9-10 07:07:35 | 显示全部楼层
回复【8楼】ricefat:
---------------------------------
 回复【8楼】ricefat:
---------------------------------
恩   是模拟输入

芯片中文手册是这么写的:


注意:  一旦使能DACx通道,相应的GPIO引脚(PA4或者PA5)就会自动与DAC的模拟输出相连
(DAC_OUTx)。为了避免寄生的干扰和额外的功耗,引脚PA4或者PA5在之前应当设置成模拟输
入(AIN)。
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-9-7
在线时间
0 小时
 楼主| 发表于 2013-9-10 11:08:54 | 显示全部楼层
回复【8楼】ricefat:
---------------------------------
还有  ADC与DAC的转换频率怎样统一呢?出来的声音不对啊

ADC的采样频率是8900多
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-10 15:10:51 | 显示全部楼层
回复【10楼】Echo_Rabbit:
---------------------------------
不懂啦,还没搞过DAC
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-13 07:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表