두 개의 핀이 동일한 대체 기능을 갖도록 구성된 경우 STM32는 어떻게됩니까?


10

STM32F051 매뉴얼을 읽으면 두 개의 핀에서 동일한 대체 기능을 구성 할 수있는 것처럼 보입니다. 예를 들어 동시에 여러 USART1_TX 핀을 가질 수 있습니다. 또는 예를 들어 2 개의 USART_RX 핀이 더 문제가되는 경우입니다. 이 경우 매뉴얼은 자동입니다. 이것이 합법적인가요? 이것이 유용한가요?


2
흥미로운 질문입니다. TX 출력을 다른 핀으로 가져 오거나 몇 군데에서 버퍼링 된 클럭을 얻기 위해 디버깅하는 동안 왜 유용한 지 알 수 있습니다. 검색 해야하는 사람을 구하기 위해 관련 수동 링크를 추가하는 것이 좋습니다.
PeterJ

다시-재미있는 질문. 그러나 두 개의 다른 핀에서 USART_RX를 할당하는 경우는 어떻습니까? 칩 설계자들이 두 가지 소스로부터 내부 경합을 허용하는 것과는 대조적으로 칩 설계자들이 우선 순위 체계를 계획했으면 좋겠다.
Michael Karas

나는 이것을 시도한 적이 없지만 핀 다이어그램에서 내가 기억하는 것을 바탕으로 기본적으로 핀을 내부적으로 연결합니다.
rjp

답변:


5

핀당 레지스터를 사용하여 I / O 기능을 선택하는 프로세서에서는 일반적으로 출력 기능을 충돌없이 여러 핀으로 라우팅 할 수 있습니다. 모든 핀은 동일한 출력을 에코합니다. 입력에 여러 핀을 연결 한 결과는 종종 불특정입니다. 예를 들어 UART에 I / O 핀 3과 4가 UART에 연결되어 있으면 UART가 핀 3과 4를 입력으로 사용하는 "AND"게이트에 연결된 것처럼 작동하거나 마치 연결된 것처럼 작동 할 수 있습니다 한 핀에 연결하고 다른 핀을 무시하거나 중간 정도의 저항을 가진 트랜지스터를 통해 두 핀을 UART의 입력 버퍼에 연결하거나 핀 3이 높고 4가 낮거나 그 반대 인 경우 추가 전류를 끌어 올릴 수 있습니다. 상상할 수있는 다른 일을 할 수도 있습니다. 나는

일부 Microchip 부품 (아마도 일부 STM 부품)에 사용되는 다소 더 나은 설계 방식은 각 I / O 기능에 입력을 받아 들여야하는 핀을 선택하는 멀티플렉서와 ​​I를 표시하는 멀티플렉서를 포함하는 멀티플렉서를 포함시키는 것입니다. 데이터를 출력해야하는 / O 기능. 이러한 설계를 통해 하나의 핀 피드로 여러 I / O 기능을 제공하는 동시에 충돌하는 구성으로 인한 모호성을 제거 할 수 있습니다.


3

예, 유용합니다. STM32F407VGT6 실험 결과 : 적어도이 핀을 AF 입력으로 사용하는 경우 두 AF 핀을 동시에 AF로 사용할 수 있습니다. 실험은 외부 트리거-신호 "TIM1_ETR"의 상승 에지에서 TIM1을 트리거하는 것입니다. "TIM1_ETR"신호는 MCU 패키지의 핀 PE7 및 / 또는 PA12에 매핑 될 수 있습니다.

실험 : TIM1에 대해 핀 PE7 및 PA12를 AF "TIM1_ETR"로 초기화합니다.

{
    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
}

결과-TIM1은 핀 PE7 또는 PA12에서 상승 에지로 시작됩니다.

그러면 런타임에서 AF 핀을 MUX (변경)하는 방법이 나타납니다.

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 */
}

이것은 타이머 트리거링에 두 가지 소스가 필요하므로 도움이 될 수 있습니다. 포스트의 시작 부분에 표시된 것처럼 초기화되면 두 입력을 동시에 사용할 수 있습니다. 입력이 서로 연결되어 있지 않습니다. PA12의 신호가 PE7로 전송되지 않으며 그 반대도 마찬가지입니다 (GPIO가 입력으로 설정되어 있기 때문).

코드는 "STM32CubeF4 v5.3"+ "펌웨어 패키지 V1.24.0 / 2019 년 2 월 08 일"에 의해 생성됩니다.


2

기본적으로 핀은 대체 기능 (예 : UART_RX)에 할당 할 수있는 GPIO입니다. 모든 대체 기능에는 기본 핀과 기능을 다시 매핑 할 수있는 대체 핀이 있습니다. 9.1.5 절 에서 STM32F103참조 매뉴얼 을 확인하면 다음 과 같이 말합니다.

여러 장치 패키지에 대한 주변 장치 I / O 기능의 수를 최적화하기 위해 일부 대체 기능을 다른 핀에 다시 매핑 할 수 있습니다. 소프트웨어에 의해 해당 레지스터를 프로그래밍하여 달성합니다 (177 페이지의 AFIO 레지스터 참조).이 경우 대체 기능은 더 이상 원래 할당에 매핑되지 않습니다 .


새 핀을 지정하면 이전 지정이 제거되므로 기술적으로 동일한 주변 기능에 여러 개의 핀을 연결할 수 없습니다.
dext0rb

1
(적어도 F103에서는 STM32의 다른 파생 제품과 함께 작업하지 않았으므로) 대체 핀을 AF_Output에서 AF_Output으로 설정 한 경우에도 다시 매핑 기능을 사용하지 않고 기능에 할당 할 수 없기 때문에 불가능합니다. GPIO 설정. 다시 매핑 한 후에는 원래 핀에서 더 이상 기능을 사용할 수 없습니다. 이것이 내가 의미하는 바를 분명히하기를 바랍니다.
Manu3l0us

1
이 작업이 완료되는 방법은 매우 다른 다른 아과에. F1 레지스터 구조는이를 금지 할 수 있지만 F3 구조는 다릅니다. 여기서 핀 대신 기능 대신 핀을 대체 기능으로 구성하면 중복 매핑이 가능해 보입니다. 실제로, 귀하는 요청 된 질문의 상황에 응답하지 않습니다. 레지스터 구조가 허용하는 부분에 관한 것 같습니다.
Chris Stratton

1
@Chris Stratton STM32F302 참조 설명서 섹션 8.3.2 : "장치 I / O 핀은 한 번에 하나의 주변 장치의 대체 기능 (AF) 만 I / O 핀에 연결할 수있는 멀티플렉서를 통해 온보드 주변 장치 / 모듈에 연결됩니다. 이러한 방식으로 동일한 I / O 핀에서 사용 가능한 주변 장치간에 충돌이 발생하지 않습니다 . " 그러나 실제로 이것은 하나의 AF에서 여러 I / O에 대해 아무 것도 말하지 않습니다. 입력 핀에 여러 옵션이 있습니까?
Manu3l0us

1
F1x 정보도 고맙습니다. 저도 이것을 사용했습니다 :-)
joeforker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.