STM32H7: enable dual analogic pad

pull/13073/head
jeromecoutant 2020-06-05 12:14:40 +02:00
parent 538552adea
commit b289d5a08f
2 changed files with 32 additions and 2 deletions

View File

@ -43,7 +43,7 @@ void analogin_init(analogin_t *obj, PinName pin)
// ADC Internal Channels "pins" (Temperature, Vref, Vbat, ...)
// are described in PinNames.h and PeripheralPins.c
// Pin value must be between 0xF0 and 0xFF
if ((pin < 0xF0) || (pin >= 0x100)) {
if ((pin < 0xF0) || (pin >= ALT0)) {
// Normal channels
// Get the peripheral name from the pin and assign it to the object
obj->handle.Instance = (ADC_TypeDef *)pinmap_peripheral(pin, PinMap_ADC);
@ -60,6 +60,21 @@ void analogin_init(analogin_t *obj, PinName pin)
MBED_ASSERT(obj->handle.Instance != (ADC_TypeDef *)NC);
MBED_ASSERT(function != (uint32_t)NC);
#if defined(ALTC)
if (pin == PA_0C) {
HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PA0, SYSCFG_SWITCH_PA0_OPEN);
}
if (pin == PA_1C) {
HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PA1, SYSCFG_SWITCH_PA1_OPEN);
}
if (pin == PC_2C) {
HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC2, SYSCFG_SWITCH_PC2_OPEN);
}
if (pin == PC_3C) {
HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC3, SYSCFG_SWITCH_PC3_OPEN);
}
#endif /* ALTC */
obj->channel = STM_PIN_CHANNEL(function);
obj->differential = STM_PIN_INVERTED(function);

View File

@ -135,9 +135,24 @@ void gpio_init(gpio_t *obj, PinName pin)
// Enable GPIO clock
GPIO_TypeDef *gpio = Set_GPIO_Clock(port_index);
#if defined(ALTC)
if (pin == PA_0C) {
HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PA0, SYSCFG_SWITCH_PA0_CLOSE);
}
if (pin == PA_1C) {
HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PA1, SYSCFG_SWITCH_PA1_CLOSE);
}
if (pin == PC_2C) {
HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC2, SYSCFG_SWITCH_PC2_CLOSE);
}
if (pin == PC_3C) {
HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC3, SYSCFG_SWITCH_PC3_CLOSE);
}
#endif /* ALTC */
// Fill GPIO object structure for future use
obj->mask = gpio_set(pin);
obj->gpio = gpio;
obj->gpio = gpio;
obj->ll_pin = ll_pin_defines[STM_PIN(obj->pin)];
obj->reg_in = &gpio->IDR;
obj->reg_set = &gpio->BSRR;