STM32F4 Alternativfunktionen: Pins doppelt vorhanden

Gast #4151039
Lesenswert?

Ich möchte mit der Resolver-Funktion von Timer 1 spielen - und sehe nun, 
daß es die beiden Eingangspins Pins laut Datasheet doppelt gibt.

Alternate Function 1:
TIM1_CH1 - GPIO E9
TIM1_CH1 - GPIO A8

TIM1_CH2 - GPIO E11
TIM1_CH2 - GPIO A9

Reicht es aus, wenn ich nur den betreffenden I/O parametriere und die 
Eingänge passen von alleine oder muß ich da noch irchendwo was 
umschalten um nen Konflikt zu vermeiden?
#4151356
Lesenswert?

Anders herum wird ein Schuh daraus.
Die Signale von TIM1 liegen sind nur einmal vorhanden und per 
Multiplexer auf einen Pin gemapped werden.

Such dir den Pin aus und konfiguriere den entsprechenden Pin als 
Alternate Function 1.

Wenn du das Datenblatt liest, dann gibt es eine riesige Liste zu den 
einzelnen Pins in denen alle Alternativen Pinfunktionen aufgelistet 
sind. Pin E8 und A9 haben eine ganze Menge an anderen 
Funktionsmöglichkeiten.
Gast #4151417
Lesenswert?

Uwe Bonnes (Firma: TU Darmstadt) (uwebonnes) schrieb:
>Kann fuer das Routing sinnvoll sein.
Ja, dachte ich mir; hab mich früher zu PIC-Zeiten darüber geärgert.


Alexander Liebhold (alexander82) schrieb:
>Such dir den Pin aus und konfiguriere den entsprechenden Pin als
>Alternate Function 1.
Hebsch gemacht:
1
uint32_t configEncoder(void){
2

3

4
    // Enable GPIO Peripheral clock for Resolver GPIO A8 & GPIO A9
5
    RCC->AHB1ENR |=  RCC_AHB1ENR_GPIOAEN;
6

7
    GPIO_InitTypeDef GPIO_InitStructure;
8

9
    GPIO_InitStructure.Pin = GPIO_PIN_8;
10
    GPIO_InitStructure.Mode =  GPIO_MODE_AF_PP;
11
    GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
12
    GPIO_InitStructure.Pull = GPIO_PULLUP;
13
    GPIO_InitStructure.Alternate = GPIO_AF1_TIM1;
14

15
    GPIO_InitStructure.Pin = GPIO_PIN_9;
16
    HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
17

18

19

20
    /* First and foremost: Enable TIM1 clock */
21
      RCC->APB2ENR |=  RCC_APB2ENR_TIM1EN;
22

23
      TIM_HandleTypeDef TimHandle;
24
      
25
    /* Set TIM1 instance */
26
    TimHandle.Instance = TIM1;
27

28
    TimHandle.Init.Prescaler = 0;
29
    TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
30
    TimHandle.Init.Period = 9999;
31
    TimHandle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
32
    TimHandle.Init.RepetitionCounter = 0xFF;  // DEBUG: ohne Funktion?
33
    HAL_TIM_Base_Init(&TimHandle);
34

35

36
    TIM_Encoder_InitTypeDef sConfigure;
37

38
    sConfigure.EncoderMode = TIM_ENCODERMODE_TI12;
39
    sConfigure.IC1Polarity = TIM_ICPOLARITY_BOTHEDGE;
40
    sConfigure.IC1Selection = TIM_ICSELECTION_DIRECTTI;
41
    sConfigure.IC1Prescaler = TIM_ICPSC_DIV1;
42
    sConfigure.IC1Filter = 0;
43
    sConfigure.IC2Polarity = TIM_ICPOLARITY_BOTHEDGE;
44
    sConfigure.IC2Selection = TIM_ICSELECTION_DIRECTTI;
45
    sConfigure.IC2Prescaler = TIM_ICPSC_DIV1;
46
    sConfigure.IC2Filter = 0;
47

48
    // send errorcode to caller:
49
    return HAL_TIM_Encoder_Init(&TimHandle,  &sConfigure);
50
    
51
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren