2017-08-16 6 views
0

Vous essayez d'obtenir une sortie DAC simple avant que avance. Avoir un multimètre sur la sortie A2 mais cela semble ne jamais changer d'environ 1V6 pour toute la valeur je mis dans la fonction de sortie DAC2.STM32 F446RE sortie DAC simple; Qu'est-ce que je rate?

#include "stm32f4xx.h" 
    #include "stm32f4xx_dac.h" 

    void io_config(void) 
    { 
    GPIO_InitTypeDef GPIO_InitStructure; 

    /* DMA1 & DMA2 clock and GPIOA & GPIOC clock enable */ 
    RCC_AHB1PeriphClockCmd(/*RCC_AHB1Periph_DMA1 | RCC_AHB1Periph_DMA2 |*/ 
      RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOB, ENABLE); 

    /* DAC Periph clock, TIM2 clock enable */ 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC | RCC_APB1Periph_TIM2, ENABLE); 

    /* ADC1 Periph Clock enable */ 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; 
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 
    GPIO_Init(GPIOA, &GPIO_InitStructure); 
    } 

    DAC_InitTypeDef dac_init_s; 

    int main(void) 
    { 
    unsigned int i, adcr; 
    i = adcr = 0; 

    io_config(); 

    DAC_StructInit(&dac_init_s); 
    //dac_init_s.DAC_OutputBuffer = DAC_OutputBuffer_Disable; 
    DAC_Init(DAC_Channel_2, &dac_init_s); 

    while(1) { 


     DAC_SetChannel2Data(DAC_Align_12b_R,500); 
    } 
} 

Répondre

1

Je n'utilise HAL pour une si simple périphérique

Activer horloge, configurer la broche GPIO

pour le canal 1

DAC -> CR |= DAC_CR_EN1; 
DAC -> DHR12R1 = 454 /* your value */ 

pour le canal 2

DAC -> CR |= DAC_CR_EN2; 
DAC -> DHR12R2 = 454 /* your value */ 

Pour la génération de formes d'ondes (en utilisant TIM6 et DAC Channel 1)

TIM6 -> DIER &= ~(TIM_DIER_UDE); 
TIM6 -> DIER |= TIM_DIER_UDE; 
TIM6 -> PSC = /* PSC value */ 
TIM6 -> ARR = /* PSC value */ 
TIM6 -> CR2 |= TIM_CR2_MMS_1; 

DAC -> CR &= ~(DAC_CR_MAMP1 | DAC_CR_WAVE1); 
DAC -> CR = DAC_CR_DMAEN1 | DAC_SR_DMAUDR1 | DAC_CR_TEN1 | DAC_CR_BOFF1; 
DAC -> CR |= DAC_CR_EN1; 

DMA1_Stream5 -> NDTR = /* Number of samples */ 
DMA1_Stream5 -> PAR = (uint32_t)&(DAC -> DHR12R1); 
DMA1_Stream5 -> M0AR = (uint32_t)(/* address of the waveform data */); 
DMA1_Stream5 -> CR = (DMA_SxCR_TEIE | DMA_SxCR_CHSEL | DMA_SxCR_CIRC | DMA_SxCR_DIR_0 | DMA_SxCR_EN | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_MINC | DMA_SxCR_PL_0); 

TIM6 -> CR1 |= TIM_CR1_CEN; 
1

OK this! STM32F446RE NUCLEO DAC OUTPUT exemple simple pas lié à des minuteries et/ou DMA etc. RESOLU !!!

http://imgur.com/a/wuq4a

varsågod!

#include "stm32f4xx.h" 
#include "stm32f4xx_dac.h" 



void io_config2 (void) { 


     // Enable clocks for port A and DAC 
     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); 


     GPIO_InitTypeDef GPIO_InitStructure; 


     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_4; 
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; 
     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 
     GPIO_Init(GPIOA, &GPIO_InitStructure); 

     /* DAC channel 2 Configuration */ 
     DAC_InitTypeDef DAC_InitStructure2; 
     DAC_InitStructure2.DAC_Trigger = DAC_Trigger_None; 
     DAC_InitStructure2.DAC_WaveGeneration = DAC_WaveGeneration_None; 
     DAC_InitStructure2.DAC_OutputBuffer = DAC_OutputBuffer_Enable; 
     DAC_Init(DAC_Channel_2, &DAC_InitStructure2); 

     /* DAC channel 1 Configuration */ 
     DAC_InitTypeDef DAC_InitStructure1; 
     DAC_InitStructure1.DAC_Trigger = DAC_Trigger_None; 
     DAC_InitStructure1.DAC_WaveGeneration = DAC_WaveGeneration_None; 
     DAC_InitStructure1.DAC_OutputBuffer = DAC_OutputBuffer_Enable; 
     DAC_Init(DAC_Channel_1, &DAC_InitStructure1); 

     /* Enable DAC Channel 1 and 2 */ 
     DAC_Cmd(DAC_Channel_2, ENABLE); 
     DAC_Cmd(DAC_Channel_1, ENABLE); 
} 


DAC_InitTypeDef dac_init_s; 

int main(void) 
{ 
    unsigned int i, adcr, j, k; 
    i = adcr = j = k = 0; 

    io_config2(); 
    //DAC_Cmd(DAC_Channel_2, ENABLE); 
    DAC_Cmd(DAC_Channel_1, ENABLE); 


    while(1) { 


#define OVAL 4095 

     //DAC_Cmd(DAC_Channel_2, DISABLE); 
     //DAC_SetChannel2Data(DAC_Align_12b_R, OVAL); 
     DAC_SetChannel1Data(DAC_Align_12b_R, OVAL); /* 1000/4096 * 3V3 == 0V8 */ 

     //if (OVAL != DAC_GetDataOutputValue (DAC_Channel_2)) { 
      j = DAC_GetDataOutputValue (DAC_Channel_1); 
      k = DAC_GetDataOutputValue (DAC_Channel_2); 
     //} 

    } 

}