Skip to main content
Graduate II
May 17, 2024
Solved

STM32G4 DAC output HAL+LL naming

  • May 17, 2024
  • 2 replies
  • 1342 views

Hi,

HAL and LL DAC configuration structure and its parameters naming can be confusing. Reference manual claims that DAC "mode" (register ADC->MCR, bits 0..2 or 16..17) can be in one of following four combinations when not used sample and hold mode:
0 -> DAC channel2 is connected to external pin with Buffer enabled
1 -> DAC channel2 is connected to external pin and to on chip peripherals with buffer enabled

2 -> DAC channel2 is connected to external pin with buffer disabled
3 -> DAC channel2 is connected to on chip peripherals with Buffer disabled

These combinations coherent but HAL DAC init struct offers up to six conbinations (Enable/Disable buffer times Internal/External/both connections). Some of them are not accesible. I've listed following configurations:

a) - OK
DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_EXTERNAL;
Resulting configuration: 0 -> DAC channel2 is connected to external pin with Buffer enabled

b) - Misleading
DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_INTERNAL;
Resulting configuration: 1 -> DAC channel2 is connected to external pin and to on chip peripherals with buffer enabled

c) - OK
DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_BOTH;
Resulting configuration: 1 -> DAC channel2 is connected to external pin and to on chip peripherals with buffer enabled

d) - OK
DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;
DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_EXTERNAL;
Resulting configuration: 2 -> DAC channel2 is connected to external pin with buffer disabled

e) - OK
DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;
DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_INTERNAL;
Resulting configuration: 3 -> DAC channel2 is connected to on chip peripherals with Buffer disabled

f) - Misleading
DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;
DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_BOTH;
Resulting configuration: 2 -> DAC channel2 is connected to external pin with buffer disabled


Also LL API have misleading parameter naming:

a) - OK
OutputBuffer = LL_DAC_OUTPUT_BUFFER_ENABLE;
OutputConnection = LL_DAC_OUTPUT_CONNECT_GPIO;
Resulting configuration: 0 -> DAC channel2 is connected to external pin with Buffer enabled

b) - Misleading
OutputBuffer = LL_DAC_OUTPUT_BUFFER_ENABLE;
OutputConnection = LL_DAC_OUTPUT_CONNECT_INTERNAL;
Resulting configuration: 1 -> DAC channel2 is connected to external pin and to on chip peripherals with buffer enabled

c) - OK
OutputBuffer = LL_DAC_OUTPUT_BUFFER_DISABLE;
OutputConnection = LL_DAC_OUTPUT_CONNECT_GPIO;
Resulting configuration: 2 -> DAC channel2 is connected to external pin with buffer disabled

d) - OK
OutputBuffer = LL_DAC_OUTPUT_BUFFER_DISABLE;
OutputConnection = LL_DAC_OUTPUT_CONNECT_INTERNAL;
Resulting configuration: 3 -> DAC channel2 is connected to on chip peripherals with Buffer disabled

You probably should enhance comment of structs
LL_DAC_InitTypeDef
DAC_ChannelConfTypeDef
to cover this confusions. Or/And change macros names. Or better change struct structure to correspond reference manual with four legal combinations.

    This topic has been closed for replies.
    Best answer by Imen.D

     

    Hello @Michal Dudka ,

    Thank you for having reported your feedback.

    I highlighted this request (via the internal ticket number: 181777) to our development team to be analyzed.

    (PS: Internal ticket number 181777 is an internal tracking number and is not accessible or usable by customers).

    2 replies

    Imen.DAnswer
    Technical Moderator
    May 21, 2024

     

    Hello @Michal Dudka ,

    Thank you for having reported your feedback.

    I highlighted this request (via the internal ticket number: 181777) to our development team to be analyzed.

    (PS: Internal ticket number 181777 is an internal tracking number and is not accessible or usable by customers).

    Technical Moderator
    June 5, 2024

    Hi @Michal Dudka,

    About your reported cases Misleading mentioned in the description:

    "b)": not a problem: connection internal requested is provided (with connection to external pin in addition. If needed, can be disconnected from pin by setting GPIO in digital mode)

    "f)": indeed this is a problem because connection DAC_CHIPCONNECT_BOTH requested is not provided, connection is only on GPIO(DAC_CHIPCONNECT_EXTERNAL) 

    About proposal "...change struct structure to correspond reference manual with four legal combinations": the problem is that depending of mode normal or sample & hold, these 4 combinations are different. 

    The 3 parameters {mode; output buffer; connection} are managed in unitary way in drivers:

    • LL driver: only connections gpio and internal proposed (not both, since cannot be guaranteed depending on mode selected) and functions LL_DAC_ConfigOutput() and LL_DAC_SetOutputConnection() with description:  
    * @note On this STM32 series, output connection depends on output mode 
    * (normal or sample and hold) and output buffer state. 
    * - if output connection is set to internal path and output buffer 
    * is enabled (whatever output mode): 
    * output connection is also connected to GPIO pin 
    * (both connections to GPIO pin and internal path). 
    * - if output connection is set to GPIO pin, output buffer 
    * is disabled, output mode set to sample and hold: 
    * output connection is also connected to internal path 
    * (both connections to GPIO pin and internal path).
    • HAL driver: connection of both modes proposed and description missing.

    We propose to update HAL DAC driver: 

    • add an assert for misleading case normal mode + buffer disabled +connection both
    • add descriptions.