Ich möchte ein Funksignal z.B. an PB8 eines STM32F103 dekodieren (Puls-Pausen-Modulation). Dazu sind die Puls- bzw. Pausenzeiten zu bestimmen. Puls: Dauer zwischen steigender und fallender Flanke Pause: Dauer zwischen fallender und steigender Flanke (Periode: Dauer zwischen zwei [steigenden] Flanken) Da gibt es einige Möglichkeiten: Polling, Interrupts, Timer Capture. Offenbar ist es aber auch möglich, den Timer bzw. zwei Capture Units so zu konfigurieren, dass mit ein und demselben Pin (PB8 = TIM4_CH3) beide Zeiten (low/high oder Puls und Periode) messen lässt. Sinnvoll wäre evtl. ein Reset des Timers bei steigender Flanke sowie jeweils Capture bei fallender (Pulsdauer prüfen) und steigender Flanke (Periode, Pause berechnen). Der Interrupt nach einer Periode könnte die Dekodierung durchführen. Leider finde ich aber bislang keine Doku (AN4013), die die Möglichkeiten dieser Timer/Capture-Verknüpfung etwas ausführlicher darstellt. In "Figure 100. General-purpose timer block diagram" (RM0008 www.st.com/resource/en/reference_manual/cd00171190.pdf ) sind die Capture-Einheiten 1&2 sowie 3&4 paarweise verknüpft, jedoch ist TI3FP4 kein gültiger Parameter für die Funktion TIM_SelectInputTrigger(). Ist die Master/Slave-Funktion nur für Channels 1 und 2 möglich? Auch AN4776 beschreibt dies nicht explizit. Eine (andere?) Art der paarweise Zuordnung lässt sich wohl über die TIM_ICInitTypeDef.TIM_ICSelection vornehmen? Lässt sich dort auch der automatische Reset konfigurieren?
Ich verstehe nicht, wodurch im Slave-Mode die zweite Capture-Einheit ausgewählt wird. ST Beispiele der SPL, einzusehen z.B. https://github.com/g4lvanix/STM32F1-workarea/tree/master/Project/STM32F10x_StdPeriph_Examples/TIM/PWM_Input Die readme.txt erwähnt den verwendeten Master/Slave Mode überhaupt nicht.
1 | /* TIM3 configuration: PWM Input mode ------------------------ |
2 | The external signal is connected to TIM3 CH2 pin (PA.01), |
3 | The Rising edge is used as active edge, |
4 | The TIM3 CCR2 is used to compute the frequency value |
5 | The TIM3 CCR1 is used to compute the duty cycle value |
6 | ------------------------------------------------------------ */ |
7 | |
8 | TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; |
9 | TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; |
10 | TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; |
11 | TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; |
12 | TIM_ICInitStructure.TIM_ICFilter = 0x0; |
13 | |
14 | TIM_PWMIConfig(TIM3, &TIM_ICInitStructure); |
15 | |
16 | /* Select the TIM3 Input Trigger: TI2FP2 */ |
17 | TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2); |
18 | |
19 | /* Select the slave Mode: Reset Mode */ |
20 | TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); |
21 | |
22 | /* Enable the Master/Slave Mode */ |
23 | TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); |
24 | |
25 | /* TIM enable counter */ |
26 | TIM_Cmd(TIM3, ENABLE); |
27 | |
28 | /* Enable the CC2 Interrupt Request */ |
29 | TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE); |
Soweit klar: Capture mit Channel 2. Nur wie kommt Channel 1 ins Spiel? Er wird nicht explizit konfiguriert. Der ausgewählte "Input Trigger" TIM_TS_TI2FP2 führt laut o.g. Diagramm gar nicht auf IC1, das wäre TI2FP1. Ist das Beispiel also fehlerhaft? Oder ist TI2FP2 nur für den Reset per "Slave mode controller" zuständig? Dann stellt sich die Frage, was IC1 auslöst ja erst recht (und wieso ist das dann eine fallende Flanke?).
Postest du hier unter verschiedenen Namen in einem Thread? Das ist ein absolutes No-Go!
Tut mir sehr leid. Hat auf die Fragen aber keinen Einfluss. Ich habe noch folgende Dokumente gefunden: http://www.st.com/content/ccc/resource/training/technical/product_training/c4/1b/56/83/3a/a1/47/64/STM32L4_WDG_TIMERS_GPTIM.pdf/files/STM32L4_WDG_TIMERS_GPTIM.pdf/jcr:content/translations/en.STM32L4_WDG_TIMERS_GPTIM.pdf Sehr allgemein. Schlagworte: "input remapping", "clear-on-capture mode", "PWM input mode". http://homepage.cem.itesm.mx/carbajal/Microcontrollers/SLIDES/STM32F3%20Timers.pdf "PWM Input mode" ist widersprüchlich zum Beipiel: - "IC1 and IC2 must be configured to be connected together to the PWM signal" (passiert im Beispiel nicht) - "IC1 and IC2 active edges must have opposite polarity" (passiert im Beispiel nicht) - "IC1 or IC2 is selected as trigger input and the slave mode controller is configured in reset mode" (passiert im Beispiel)
Das Geheimnis liegt in der Funktion TIM_PWMIConfig(). Sie konfiguriert den anderen Kanal (1 oder 2, nicht 3/4) gleich mit!
No Go schrieb: > Tut mir sehr leid. Hat auf die Fragen aber keinen Einfluss. Aber vielleicht auf die (fehlenden) Antworten? Daß du jetzt mit dem 3. Nicknamen in deinem eigenen Thread schreibst, kann man nur noch unverschämt nennen.
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.