Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13705
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-10 20:52
文章分类

全部博文(10)

文章存档

2015年(10)

我的朋友

分类: C/C++

2015-02-09 09:36:45

只有给外设开启了时钟, 才能操作和控制外设。

//

产生三角波

在上述代码基础上加入下面代码,其中部分代码替代

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

     TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;

  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

  TIM_TimeBaseStructure.TIM_Period = 0xF;         

  TIM_TimeBaseStructure.TIM_Prescaler = 0xF;      

  TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;   

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 

  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);

 

  DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;

  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_Triangle;

  DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_TriangleAmplitude_2047;

 

3.3 利用DMA产生正弦波(DAC2)和直流电压值(DAC1

uint16_t g_Wave[128];

uint16_t DAC1_Value[1];

 

 const uint16_t SineData[32] = {

                       2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056,

                       3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909,

                       599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647};

 

void RCC_DAC_Config(void)

{

RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

}

 

void GPIO_DAC_Config(void)

{        

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

GPIO_Init(GPIOA,&GPIO_InitStructure);

}

 

 

void DAC_Config(void)

{

uint32_t i=0;

DMA_InitTypeDef DMA_InitStructure;

DAC_InitTypeDef DAC_InitStructure;

 

DAC1_Value[0]=4096*0.612;

for(i=0;i<32;i++)

{

//g_Wave[i]=DAC2_SineWave[i] *0.606; //Vpp =2.0V

g_Wave[i]=SineData[i] *0.606; //Vpp =2.0V

}

RCC_DAC_Config();

GPIO_DAC_Config();

 

         TIM_PrescalerConfig(TIM2,0,TIM_PSCReloadMode_Update);

 

TIM_SetAutoreload(TIM2, 22);

TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);

 

  DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;

  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;

  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;

#if  0

DAC_Init(DAC_Channel_1, &DAC_InitStructure);        

 

DMA_DeInit(DMA2_Channel3);

  DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R1_Address;

  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&DAC1_Value;

DMA_InitStructure.DMA_BufferSize = 1;

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;

  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

  DMA_InitStructure.DMA_Priority = DMA_Priority_High;

  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

 

DMA_Init(DMA2_Channel3, &DMA_InitStructure);

  DMA_Cmd(DMA2_Channel3, ENABLE);

 

 

DAC_Cmd(DAC_Channel_1, ENABLE);

  DAC_DMACmd(DAC_Channel_1, ENABLE);

  TIM_Cmd(TIM2, ENABLE);

 

#else

DAC_Init(DAC_Channel_2, &DAC_InitStructure);        

 

DMA_DeInit(DMA2_Channel4);

DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R2_Address;

DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&g_Wave;

DMA_InitStructure.DMA_BufferSize = 32;

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

DMA_InitStructure.DMA_Priority = DMA_Priority_High;

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

 

DMA_Init(DMA2_Channel4,&DMA_InitStructure);

DMA_Cmd(DMA2_Channel4,ENABLE);

 

DAC_Cmd(DAC_Channel_2,ENABLE);

DAC_DMACmd(DAC_Channel_2,ENABLE);

 

TIM_Cmd(TIM2,ENABLE);

 

#endif

}

阅读(471) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~