Ja, es ist nützlich. Ergebnis des Experiments mit STM32F407VGT6: Beide AF-Pins können gleichzeitig als AF verwendet werden, zumindest wenn diese Pins als AF-Eingänge verwendet werden. Das Experiment bestand darin, TIM1 bei steigender Flanke des externen Triggersignals "TIM1_ETR" auszulösen. Das Signal "TIM1_ETR" kann auf die Pins PE7 und / oder PA12 des MCU-Pakets abgebildet werden.
Das Experiment: Initialisieren Sie beide Pins PE7 und PA12 als AF "TIM1_ETR" für TIM1:
{
GPIO_InitTypeDef GPIO_InitStruct = { 0 };
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pin = GPIO_PIN_7;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); // configure PE7 as AF
GPIO_InitStruct.Pin = GPIO_PIN_12;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // configure PA12 as AF
}
Das Ergebnis - TIM1 wird durch Ansteigen der Flanke an einem der Pins PE7 oder PA12 gestartet.
Dies zeigt den Weg zu MUX (Wechsel) AF-Pins zur Laufzeit:
main
{
GPIO_InitTypeDef GPIO_InitStruct = { 0 };
// Deactivate PA12 input (set as regular input):
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pin = GPIO_PIN_12;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// select PE7 as a trigger source,
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pin = GPIO_PIN_7;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
// Arm the timer
arm_tim1();
/* Now timer will be started by rising edge only on PE7 */
// ... later one can select PA12 as trigger source. Deactivate PE7 (set as regular input):
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pin = GPIO_PIN_7;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
// Activate PA12
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pin = GPIO_PIN_12;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// Arm the timer
arm_tim1();
/* timer will be started by rising edge only on PA12 */
}
Dies kann hilfreich sein, wenn zwei verschiedene Quellen für die Timer-Triggerung benötigt werden. Dies kann uns einen Offboard-MUX-IC ersparen :). Beide Eingänge können gleichzeitig verwendet werden, wenn sie wie am Anfang des Beitrags gezeigt initialisiert wurden. Die Eingänge sind nicht miteinander verbunden. Ich meine, das Signal auf PA12 wird nicht an PE7 übertragen und umgekehrt (da GPIOs als Eingänge festgelegt sind).
Der Code wird von "STM32CubeF4 v5.3" + "Firmware Package V1.24.0 / 08-February-2019" generiert.