野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21490|回复: 2

DAC输出区间问题

[复制链接]
发表于 2014-6-18 19:02:29 | 显示全部楼层 |阅读模式
用MINI板跑了一下DAC的例程,发现DAC的1通道最低电平也是2.4V,2通道的最低电平接近0V.示波器截了两张图,下面贴出来。dac范围不是应该从0V开始吗,这两个通道用的是同一组数据啊。新手轻喷,因为要用到DAC,还请各位大神帮忙看看。板子上的源代码如下:
#include "bsp_dac.h"
#define DAC_DHR12RD_Address      0x40007420 //0x40007420
/* 波形数据 ---------------------------------------------------------*/
const uint16_t Sine12bit[32] = {
2448,2832,3186,3496,3751,3940,4057,4095,4057,3940,
3751,3496,3186,2832,2448,2048,1648,1264,910,600,345,
156,39,0,39,156,345,600,910,1264,1648,2048
};

uint32_t DualSine12bit[32];

/**
  * @brief  使能DAC的时钟,初始化GPIO
  * @param  无
  * @retval 无
  */
static void DAC_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
DAC_InitTypeDef  DAC_InitStructure;
  /* 使能GPIOA时钟 */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

/* 使能DAC时钟 */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

  /* DAC的GPIO配置,模拟输入 */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);


  /* 配置DAC 通道1 */
  DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;      //使用TIM2作为触发源
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; //不使用波形发生器
  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable; //不使用DAC输出缓冲
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);
  /* 配置DAC 通道2 */
  DAC_Init(DAC_Channel_2, &DAC_InitStructure);
  /* 使能通道1 由PA4输出 */
  DAC_Cmd(DAC_Channel_1, ENABLE);
  /* 使能通道2 由PA5输出 */
  DAC_Cmd(DAC_Channel_2, ENABLE);
  /* 使能DAC的DMA请求 */
  DAC_DMACmd(DAC_Channel_2, ENABLE);
}

/**
  * @brief  配置TIM
  * @param  无
  * @retval 无
  */
static void DAC_TIM_Config(void)
{

TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;

/* 使能TIM2时钟,TIM2CLK 为72M */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  /* TIM2基本定时器配置 */
// TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  TIM_TimeBaseStructure.TIM_Period = 19;                //定时周期 20  
  TIM_TimeBaseStructure.TIM_Prescaler = 0x0;              //预分频,不分频 72M / (0+1) = 72M
  TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;          //时钟分频系数
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   //向上计数模式
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  /* 配置TIM2触发源 */
  TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);
/* 使能TIM2 */
  TIM_Cmd(TIM2, ENABLE);
}
/**
  * @brief  配置DMA
  * @param  无
  * @retval 无
  */
static void DAC_DMA_Config(void)
{
DMA_InitTypeDef  DMA_InitStructure;
/* 使能DMA2时钟 */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);

/* 配置DMA2 */
  DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12RD_Address;     //外设数据地址
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&DualSine12bit ;    //内存数据地址 DualSine12bit
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;           //数据传输方向内存至外设
  DMA_InitStructure.DMA_BufferSize = 32;                 //缓存大小为32字节
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;    //外设数据地址固定
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;         //内存数据地址自增
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; //外设数据以字为单位
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;     //内存数据以字为单位
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;             //循环模式
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;           //高DMA通道优先级
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;              //非内存至内存模式
  DMA_Init(DMA2_Channel4, &DMA_InitStructure);

  /* 使能DMA2-14通道 */
  DMA_Cmd(DMA2_Channel4, ENABLE);
}

/**
  * @brief  DAC初始化函数
  * @param  无
  * @retval 无
  */
void DAC_Mode_Init(void)
{
uint32_t Idx = 0;  
DAC_Config();
DAC_TIM_Config();
DAC_DMA_Config();

/* 填充正弦波形数据,双通道右对齐*/
  for (Idx = 0; Idx < 32; Idx++)
  {
    DualSine12bit[Idx] = (Sine12bit[Idx] << 16) + (Sine12bit[Idx]);
  }
}


scope_0.png
scope_1.png
回复

使用道具 举报

发表于 2014-6-18 19:04:57 | 显示全部楼层
DAC的通道1是PA4引脚,与板子上的FLASH芯片共用了,你在ISO-MINI板子左侧找到一个丝印写着PA4-CS的地方,把它的跳帽拔掉即可
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-18 19:15:23 | 显示全部楼层
仰平心 发表于 2014-6-18 19:04
DAC的通道1是PA4引脚,与板子上的FLASH芯片共用了,你在ISO-MINI板子左侧找到一个丝印写着PA4-CS的地方,把 ...

强烈支持,非常感谢哥们,谢谢啊,解决了,屏幕拆下来看到了。
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 23:58 , Processed in 0.031277 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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