cancel
Showing results for 
Search instead for 
Did you mean: 

DAC problem with STM32F4

ennioaloisini
Associate III
Posted on March 17, 2014 at 18:51

Dear All,

I have tested the DAC example on the STM32F429 and I have understood the way using / driving the DAC on the STM32F4. I have tried to create my sample code using the STM32F429 Discovery template, but nothing happened.

Here below the code:

RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

GPIO_Init(GPIOA, &GPIO_InitStructure);

  

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);

TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

TIM_TimeBaseStructure.TIM_Period = 0xFF;

TIM_TimeBaseStructure.TIM_Prescaler = 0;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 

TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);

TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);

TIM_Cmd(TIM6, ENABLE);

  

DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;

DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;

DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;

DAC_Init(DAC_Channel_1, &DAC_InitStructure);

DAC_Cmd(DAC_Channel_1, ENABLE);

DAC_SetChannel1Data(DAC_Align_12b_R, 500);

I Have checked with the oscilloscope, but nothing changes.

Then I have tested the DAC_SignalGeneration and it run correctly.

Then I have tried to modify the DAC_SignalGeneration example and I have only changed this piece of code:

while (1)

  {

    /* If the User Button is pressed */

    if (KeyPressed == RESET)

    {            

      DAC_DeInit(); 

      /* select waves forms according to the Key Button status */

      if (SelectedWavesForm == 1)

      {

        /* The sine wave and the escalator wave has been selected */

        /* Escalator Wave generator ------------------------------------------*/

        DAC_Ch1_EscalatorConfig();

        /* Sine Wave generator -----------------------------------------------*/

        DAC_Ch2_SineWaveConfig();

         

      }

      else

      {

        /* The triangle wave and the noise wave has been selected */

        /* Noise Wave generator ----------------------------------------------*/

        DAC_Ch1_NoiseConfig();

        /* Triangle Wave generator -------------------------------------------*/

        DAC_Ch2_TriangleConfig();

      }

      

      KeyPressed = SET; 

    }

  }

 In the following way:

while (1)

  {

    /* If the User Button is pressed */

    if (KeyPressed == RESET)

    {            

      DAC_DeInit(); 

      /* select waves forms according to the Key Button status */

      if (SelectedWavesForm == 1)

      {

        /* The sine wave and the escalator wave has been selected */

        /* Escalator Wave generator ------------------------------------------*/

        //DAC_Ch1_EscalatorConfig();

        /* Sine Wave generator -----------------------------------------------*/

        DAC_Ch2_SineWaveConfig();

         

      }

      else

      {

        /* The triangle wave and the noise wave has been selected */

        /* Noise Wave generator ----------------------------------------------*/

        //DAC_Ch1_NoiseConfig();

        /* Triangle Wave generator -------------------------------------------*/

        //DAC_Ch2_TriangleConfig();

      }

      

      KeyPressed = SET; 

    }

  }

Sincerly I do not understand where is the problem, I have read a lot of things on internet and I have tried to do all the possible changes, but the DAC does not run with and without DMA.

Could someone help me about this problem?

Thanks!
This discussion is locked. Please start a new topic to ask your question.
6 REPLIES 6
chen
Associate II
Posted on March 18, 2014 at 10:23

Hi

A quick glance through your code :

''GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;''

I think this should be : GPIO_Mode_AF

for alternate function mode.

Also, there should be some code to select the Alternate Function for thise pins.

ennioaloisini
Associate III
Posted on March 18, 2014 at 12:53

Hello,

thank you very much for the answer.

I have checked many examples and they configure the pin AN (Analog) not AF.

In the STM32F4XX PINA4 is the DAC 1 and PINA5 is the DAC 2.

Let me know!

Best regards

frankmeyer9
Associate II
Posted on March 18, 2014 at 13:27

In the STM32F4XX PINA4 is the DAC 1 and PINA5 is the DAC 2.

 

Are you sure ?

Better check the datasheet of your F4xx derivate.

And when about it, check that nothing else is connected to the DAC out pins.

The DAC has a rather high output impedance even in buffered mode, and is easily overdriven by other peripherals attached to the line.

Posted on March 18, 2014 at 14:40

Definitely want to check the STM32F429I-DISCO schematic/manual, only PA5 is free on the board.

For the STM32F4-DISCO I had an [DEAD LINK /public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Help%20with%20simple%20ADC%20on%20STM32F4&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&currentviews=593]example about 80% down this thread.
Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
ennioaloisini
Associate III
Posted on March 19, 2014 at 18:55

Thank you very much for the support!

Now it works fine on the EVAL board.

Best regards

mikemillernow
Associate II
Posted on March 19, 2014 at 20:06

Aloisini.,

What did you change to get this to work?  I am facing a similar issue and would like to know the details.

Thanks.

-Mike.