OpenEdv-开源电子网

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

方波,三角波的频率用示波器测不是设置的值,请大家帮忙分析问题出在哪?

[复制链接]

9

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2014-11-27
在线时间
23 小时
发表于 2015-5-31 19:04:28 | 显示全部楼层 |阅读模式
5金钱
#include "stm32f0xx.h"
#include "math.h"
#include "dac.h"
#include "key.h"

#define DAC_DHR12R1_ADDRESS      0x40007408

extern int key_state,key;
uint32_t DualSine12bit[256];
uint16_t Period_temp=100;
uint16_t Frequency=10,Amplitude_temp=0,Amplitude=0;
uint16_t amplitude_table[5]={ 0,500,1000, 1500, 2047};
uint16_t mode_wave = 0;
uint16_t Idx = 0;
DAC_InitTypeDef            DAC_InitStructure;
DMA_InitTypeDef            DMA_InitStructure;

void TIM_Config(void)
{
 TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  TIM_TimeBaseStructure.TIM_Period = Period_temp;         
  TIM_TimeBaseStructure.TIM_Prescaler = 7;      
  TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;   
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);

  TIM_Cmd(TIM2, ENABLE);
}


int main(void)
{
 
 KEY_Config();
 DAC_Config();
 SystemInit();
 
   DAC_DeInit(); 
   DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;
   DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
   DAC_Init(DAC_Channel_1, &DAC_InitStructure); 
 
   DMA_DeInit(DMA1_Channel3);
   DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R1_ADDRESS;
   DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&DualSine12bit;
   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
   DMA_InitStructure.DMA_BufferSize = 256;
   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_InitStructure.DMA_M2M = DMA_M2M_Disable;
   DMA_Init(DMA1_Channel3, &DMA_InitStructure);

   DMA_Cmd(DMA1_Channel3, ENABLE);
   

  while (1)
  { 
  eriod_temp=6000000/(256*Frequency);
  Amplitude_temp=amplitude_table[Amplitude];
   
  if(mode_wave==1)  ///·?
  {
   for (Idx = 0; Idx < 128; Idx++)
    {
    DualSine12bit[Idx] = Amplitude_temp+Amplitude_temp;  
   }
   for (Idx = 128; Idx < 256; Idx++)
    {
    DualSine12bit[Idx] = Amplitude_temp-Amplitude_temp;  
   }
  }  
  else if(mode_wave==2)  ///??
  {
   for (Idx = 0; Idx < 128; Idx++)
    {
    DualSine12bit[Idx] = Amplitude_temp*Idx/64;  
   }
   for (Idx = 128; Idx < 256; Idx++)
    {
     DualSine12bit[Idx] = (256-Idx)*Amplitude_temp/64; 
   }
  }  
 
  TIM_Config();
  DAC_Cmd(DAC_Channel_1, ENABLE);
  DAC_DMACmd(DAC_Channel_1, ENABLE); 
  KEY_Scan();                 
  if(key_state==0&&key==4)
  {
   if(Frequency<20)   
    Frequency+=5;
    key=0;
  }      
  else if(key_state==0&&key==2)
  {
   if(Frequency>=10)
    Frequency-=5;
    key=0;
  }   
  else if(key_state==0&&key==3)
  {
   mode_wave+=1;
   if(mode_wave==3)
    mode_wave=0;
    key=0;
  }      
   else if(key_state==0&&key==1)
  {  
   if(Amplitude>0)
    Amplitude--;
   if(Amplitude==0)
    Amplitude=5;
    key=0;
  } 
  }
}

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 23:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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