Skip to content

Commit b715820

Browse files
authored
Merge pull request stm32duino#1735 from fpistm/review_channel_function
Review get adc/dac/timer channel functions
2 parents bcf0574 + f731fdb commit b715820

File tree

5 files changed

+64
-36
lines changed

5 files changed

+64
-36
lines changed

cores/arduino/stm32/analog.h

+8-2
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,20 @@ extern "C" {
4949
#endif
5050

5151
/* Exported functions ------------------------------------------------------- */
52+
#if defined(HAL_ADC_MODULE_ENABLED) && !defined(HAL_ADC_MODULE_ONLY)
53+
uint32_t get_adc_channel(PinName pin, uint32_t *bank);
54+
uint32_t get_adc_internal_channel(PinName pin);
55+
uint16_t adc_read_value(PinName pin, uint32_t resolution);
56+
#endif
57+
#if defined(HAL_DAC_MODULE_ENABLED) && !defined(HAL_DAC_MODULE_ONLY)
58+
uint32_t get_dac_channel(PinName pin);
5259
void dac_write_value(PinName pin, uint32_t value, uint8_t do_init);
5360
void dac_stop(PinName pin);
54-
uint16_t adc_read_value(PinName pin, uint32_t resolution);
61+
#endif
5562
#if defined(HAL_TIM_MODULE_ENABLED) && !defined(HAL_TIM_MODULE_ONLY)
5663
void pwm_start(PinName pin, uint32_t clock_freq, uint32_t value, TimerCompareFormat_t resolution);
5764
void pwm_stop(PinName pin);
5865
#endif
59-
uint32_t get_pwm_channel(PinName pin);
6066

6167
#ifdef __cplusplus
6268
}

cores/arduino/stm32/timer.h

+2
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,8 @@ uint8_t getTimerClkSrc(TIM_TypeDef *tim);
284284
IRQn_Type getTimerUpIrq(TIM_TypeDef *tim);
285285
IRQn_Type getTimerCCIrq(TIM_TypeDef *tim);
286286

287+
uint32_t getTimerChannel(PinName pin);
288+
287289
#endif /* HAL_TIM_MODULE_ENABLED && !HAL_TIM_MODULE_ONLY */
288290

289291
#ifdef __cplusplus

libraries/SrcWrapper/src/HardwareTimer.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -740,7 +740,7 @@ void HardwareTimer::setMode(uint32_t channel, TimerModes_t mode, PinName pin)
740740
_ChannelMode[channel - 1] = mode;
741741

742742
if (pin != NC) {
743-
if ((int)get_pwm_channel(pin) == timChannel) {
743+
if ((int)getTimerChannel(pin) == timChannel) {
744744
/* Configure PWM GPIO pins */
745745
pinmap_pinout(pin, PinMap_TIM);
746746
#if defined(STM32F1xx)

libraries/SrcWrapper/src/stm32/analog.cpp

+25-33
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,14 @@ static PinName g_current_pin = NC;
101101
#define ADC_REGULAR_RANK_1 1
102102
#endif
103103

104-
/* Private Functions */
105-
static uint32_t get_adc_channel(PinName pin, uint32_t *bank)
104+
/* Exported Functions */
105+
/**
106+
* @brief Return ADC HAL channel linked to a PinName
107+
* @param pin: PinName
108+
* @param bank: pointer to get ADC channel bank if required
109+
* @retval Valid HAL channel
110+
*/
111+
uint32_t get_adc_channel(PinName pin, uint32_t *bank)
106112
{
107113
uint32_t function = pinmap_function(pin, PinMap_ADC);
108114
uint32_t channel = 0;
@@ -218,7 +224,7 @@ static uint32_t get_adc_channel(PinName pin, uint32_t *bank)
218224
#endif
219225
#endif
220226
default:
221-
channel = 0;
227+
_Error_Handler("ADC: Unknown adc channel", (int)(STM_PIN_CHANNEL(function)));
222228
break;
223229
}
224230
#ifdef ADC_CHANNELS_BANK_B
@@ -233,7 +239,14 @@ static uint32_t get_adc_channel(PinName pin, uint32_t *bank)
233239
return channel;
234240
}
235241

236-
static uint32_t get_adc_internal_channel(PinName pin)
242+
/**
243+
* @brief Return ADC HAL internal channel linked to a PinName
244+
* @param pin: specific PinName's for ADC internal. Value can be:
245+
* PADC_TEMP, PADC_TEMP_ADC5, PADC_VREF, PADC_VBAT
246+
* Note that not all of these values ​​may be available for all series.
247+
* @retval Valid HAL internal channel.
248+
*/
249+
uint32_t get_adc_internal_channel(PinName pin)
237250
{
238251
uint32_t channel = 0;
239252
switch (pin) {
@@ -263,41 +276,20 @@ static uint32_t get_adc_internal_channel(PinName pin)
263276
break;
264277
#endif
265278
default:
266-
channel = 0;
279+
_Error_Handler("ADC: Unknown adc internal PiName", (int)(pin));
267280
break;
268281
}
269282
return channel;
270283
}
271284
#endif /* HAL_ADC_MODULE_ENABLED && !HAL_ADC_MODULE_ONLY */
272285

273-
#if defined(HAL_TIM_MODULE_ENABLED) && !defined(HAL_TIM_MODULE_ONLY)
274-
uint32_t get_pwm_channel(PinName pin)
275-
{
276-
uint32_t function = pinmap_function(pin, PinMap_TIM);
277-
uint32_t channel = 0;
278-
switch (STM_PIN_CHANNEL(function)) {
279-
case 1:
280-
channel = TIM_CHANNEL_1;
281-
break;
282-
case 2:
283-
channel = TIM_CHANNEL_2;
284-
break;
285-
case 3:
286-
channel = TIM_CHANNEL_3;
287-
break;
288-
case 4:
289-
channel = TIM_CHANNEL_4;
290-
break;
291-
default:
292-
channel = 0;
293-
break;
294-
}
295-
return channel;
296-
}
297-
#endif /* HAL_TIM_MODULE_ENABLED && !HAL_TIM_MODULE_ONLY */
298-
299286
#if defined(HAL_DAC_MODULE_ENABLED) && !defined(HAL_DAC_MODULE_ONLY)
300-
static uint32_t get_dac_channel(PinName pin)
287+
/**
288+
* @brief Return DAC HAL channel linked to a PinName
289+
* @param pin: specific PinName's for ADC internal.
290+
* @retval Valid HAL channel
291+
*/
292+
uint32_t get_dac_channel(PinName pin)
301293
{
302294
uint32_t function = pinmap_function(pin, PinMap_DAC);
303295
uint32_t channel = 0;
@@ -316,7 +308,7 @@ static uint32_t get_dac_channel(PinName pin)
316308
break;
317309
#endif
318310
default:
319-
channel = 0;
311+
_Error_Handler("DAC: Unknown dac channel", (int)(STM_PIN_CHANNEL(function)));
320312
break;
321313
}
322314
return channel;

libraries/SrcWrapper/src/stm32/timer.c

+28
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,34 @@ uint8_t getTimerClkSrc(TIM_TypeDef *tim)
715715
return clkSrc;
716716
}
717717

718+
/**
719+
* @brief Return HAL timer channel linked to a PinName
720+
* @param pin: PinName
721+
* @retval Valid HAL channel
722+
*/
723+
uint32_t getTimerChannel(PinName pin)
724+
{
725+
uint32_t function = pinmap_function(pin, PinMap_TIM);
726+
uint32_t channel = 0;
727+
switch (STM_PIN_CHANNEL(function)) {
728+
case 1:
729+
channel = TIM_CHANNEL_1;
730+
break;
731+
case 2:
732+
channel = TIM_CHANNEL_2;
733+
break;
734+
case 3:
735+
channel = TIM_CHANNEL_3;
736+
break;
737+
case 4:
738+
channel = TIM_CHANNEL_4;
739+
break;
740+
default:
741+
_Error_Handler("TIM: Unknown timer channel", (int)(STM_PIN_CHANNEL(function)));
742+
break;
743+
}
744+
return channel;
745+
}
718746

719747
#endif /* HAL_TIM_MODULE_ENABLED && !HAL_TIM_MODULE_ONLY */
720748

0 commit comments

Comments
 (0)