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?
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.
Wenn das Devicesignal ein Ausgang ist, dann kannst Du den Ausgang auf beide GPIOs mappen. Kann fuer das Routing sinnvoll sein.
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 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.