Tak, jest to przydatne. Wynik eksperymentu na STM32F407VGT6: Oba piny AF mogą być używane jednocześnie jako AF, przynajmniej jeśli te piny są używane jako wejścia AF. Eksperyment polegał na wyzwoleniu TIM1 na zboczu narastającym zewnętrznego wyzwalacza - sygnał „TIM1_ETR”. Sygnał „TIM1_ETR” może być mapowany na piny PE7 i / lub PA12 pakietu MCU.
Eksperyment: Zainicjuj oba piny PE7 i PA12 jako AF „TIM1_ETR” dla 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
}
Wynik - TIM1 jest uruchamiany przez zbocze narastające na dowolnym z pinów PE7 lub PA12.
Ujawnia to drogę do pinów MUX (zmiana) AF w czasie wykonywania:
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 */
}
Może to być pomocne, ponieważ do uruchomienia timera potrzebne są dwa różne źródła, co może uratować nas poza MUX IC :). Oba wejścia mogą być używane jednocześnie, jeśli są inicjalizowane, jak pokazano na początku postu. Wejścia nie są ze sobą połączone, to znaczy sygnał na PA12 nie jest przesyłany do PE7 i odwrotnie (ponieważ GPIO są ustawione jako wejścia).
Kod jest generowany przez „STM32CubeF4 v5.3” + „Pakiet oprogramowania układowego V1.24.0 / 08-luty-2019”.