2017-08-16 140 views
0

嘗試在 前進之前獲得一些簡單的DAC輸出。有一個萬用表輸出A2 ,但這似乎永遠不會從約1V6變化,無論我把什麼值 放入DAC2輸出功能。STM32 F446RE簡單的DAC輸出;我錯過了什麼?

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

回答

1

我不使用HAL這樣一個簡單的外圍

使能時鐘,配置GPIO引腳

用於信道1

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

通道2

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

用於波形生成(使用TIM6和DAC通道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

確定該作品! STM32F446RE NUCLEO DAC OUTPUT簡單示例 不受限於定時器和/或DMA等。已解決!

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); 
     //} 

    } 

} 
相關問題