#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;
}
}
}
|