簡體   English   中英

STM32 F446RE簡單DAC輸出; 我想念什么?

[英]STM32 F446RE simple DAC output; what am I missing?

嘗試在前進之前獲得一些簡單的DAC輸出。 在輸出A2上有一個萬用表,但無論我將什么值輸入DAC2輸出功能,這似乎從1V6都不會改變。

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

我沒有將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;

好的,這個工作! 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);
        //}

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM