ich habe jetzt das Programm fertig geschrieben, ich leg meine
Sinustabelle im Speicher ab, greif per DMA zu und schicke es über den
DAC.
Mein problem ist jetzt, ich erhalte ke Signal an PA4 oder PA5?????
Hier mein Code:
#include "stm32f10x_lib.h"
#define DAC_DHR12RD_Address ((u32)0x40007420)
uc16 Sine12bit[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};
u32 DualSine12bit[32];
u8 Idx = 0;
int main(void)
{
/***********************************************************************
************************************************************************
*******************/
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
DAC_InitTypeDef DAC_InitStruct;
DMA_InitTypeDef DMA_InitStruct;
RCC_DeInit();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA,
ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
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);
for (Idx= 0; Idx<32; Idx++)
{
DualSine12bit[Idx] = (Sine12bit[Idx] << 16) + (Sine12bit[Idx]);
}
TIM_TimeBaseStruct.TIM_Prescaler = 0x0;
TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStruct.TIM_Period = 0x19;
TIM_TimeBaseStruct.TIM_ClockDivision = 0x0;
TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStruct);
TIM_SelectOutputTrigger(TIM8, TIM_TRGOSource_Update);
DAC_InitStruct.DAC_Trigger = DAC_Trigger_T8_TRGO;
DAC_InitStruct.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_InitStruct.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
DAC_Init(DAC_Channel_1, &DAC_InitStruct);
DAC_Init(DAC_Channel_2, &DAC_InitStruct);
DMA_DeInit(DMA2_Channel4);
DMA_InitStruct.DMA_PeripheralBaseAddr = DAC_DHR12RD_Address;
DMA_InitStruct.DMA_MemoryBaseAddr = (u32)&DualSine12bit;
DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralDST;
DMA_InitStruct.DMA_BufferSize = 32;
DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;
DMA_InitStruct.DMA_Priority = DMA_Priority_High;
DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA2_Channel4, &DMA_InitStruct);
DMA_Cmd(DMA2_Channel4, ENABLE);
DAC_Cmd(DAC_Channel_1, ENABLE);
DAC_Cmd(DAC_Channel_2, ENABLE);
DAC_DMACmd(DAC_Channel_2, ENABLE);
TIM_Cmd(TIM8, ENABLE);
}