3636#include "PeripheralPins.h"
3737
3838// These variables are used for the "free" function
39- static int pa4_used = 0 ;
40- static int pa5_used = 0 ;
39+ static int channel1_used = 0 ;
40+ #if defined(DAC_CHANNEL_2 )
41+ static int channel2_used = 0 ;
42+ #endif
4143
4244#if STATIC_PINMAP_READY
4345#define ANALOGOUT_INIT_DIRECT analogout_init_direct
@@ -108,14 +110,14 @@ static void _analogout_init_direct(dac_t *obj, const PinMap *pinmap)
108110 sConfig .DAC_OutputSwitch = DAC_OUTPUTSWITCH_ENABLE ;
109111#endif
110112
111- if (pinmap -> pin == PA_4 ) {
112- pa4_used = 1 ;
113+ if (obj -> channel == DAC_CHANNEL_1 ) {
114+ channel1_used = 1 ;
113115 }
114-
115- if (pinmap -> pin == PA_5 ) {
116- pa5_used = 1 ;
116+ #if defined( DAC_CHANNEL_2 )
117+ if (obj -> channel == DAC_CHANNEL_2 ) {
118+ channel2_used = 1 ;
117119 }
118-
120+ #endif
119121 if (HAL_DAC_ConfigChannel (& obj -> handle , & sConfig , obj -> channel ) != HAL_OK ) {
120122 error ("HAL_DAC_ConfigChannel failed" );
121123 }
@@ -137,21 +139,26 @@ void analogout_init(dac_t *obj, PinName pin)
137139void analogout_free (dac_t * obj )
138140{
139141 // Reset DAC and disable clock
140- if (obj -> pin == PA_4 ) {
141- pa4_used = 0 ;
142+ if (obj -> channel == DAC_CHANNEL_1 ) {
143+ channel1_used = 0 ;
142144 }
143- if (obj -> pin == PA_5 ) {
144- pa5_used = 0 ;
145+ #if defined(DAC_CHANNEL_2 )
146+ if (obj -> channel == DAC_CHANNEL_2 ) {
147+ channel2_used = 0 ;
145148 }
146-
147- if ((pa4_used == 0 ) && (pa5_used == 0 )) {
149+ #endif
150+ if ((channel1_used == 0 )
151+ #if defined(DAC_CHANNEL_2 )
152+ & & (channel2_used == 0 )
153+ #endif
154+ ) {
148155 __HAL_RCC_DAC1_FORCE_RESET ();
149156 __HAL_RCC_DAC1_RELEASE_RESET ();
150157 __HAL_RCC_DAC1_CLK_DISABLE ();
151158 }
152159
153160#if defined(DAC2 )
154- if (obj -> pin == PA_6 ) {
161+ if (obj -> dac == DAC_2 ) {
155162 __HAL_RCC_DAC2_FORCE_RESET ();
156163 __HAL_RCC_DAC2_RELEASE_RESET ();
157164 __HAL_RCC_DAC2_CLK_DISABLE ();
0 commit comments