mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32F334R8 - TIM1/NVIC Fragen


Autor: Gf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe hier ein NUCLEO-F334R8 vor mir. Darauf befindet sich ein 
STM32F334R8.
2 grundlegende Fragen welche mich schon seit geraumer Zeit beschäftigen.
1.) Man kann, laut Beschreibung, den TIM1 mit 144Mhz laufen lassen. Sehe 
ich das richtig, dass dies nur mit einem HSE möglich ist (also einen 
externen Clock den man ggf. "drauflöten" müsste?). Mit den internen 8Mhz 
komme ich über die Multiplikatoren usw. ja nicht dort hin soweit ich das 
begriffen habe.
2.) Im Zusammenhang mit dem Board will mir der NVIC nicht einleuchten. 
Es steht ja, dass es 73 maskable interrupt channels gibt. Bei den EXTI 
Registern sehe/finde ich jedoch nur 38 zum konfigurieren. Wo ist der 
Rest?

Autor: rmu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ad 1.)

Auf dem Nucleo kann man den 8MHz Takt vom Quarz des Debuggers auch zur 
Nucleo-CPU weiterleiten, dazu müssen eventuell 1-2 Lötbrücken gesetzt 
werden, siehe Doku. IIRC ist das mit MCO beschriftet.

ad 2.)

Die diverse Peripherie hat auch Interrupts, teilweise sogar mehrere pro 
Gerät. Im Datenblatt sollte es eine Liste geben welcher Vektor zu 
welcher Peripherpie gehört.

Autor: Gf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, einen 8Mhz hätte ich ja intern auch (HSI). Aber der wird vor der 
PLLSRC ja mal /2 dividiert. beim PLLMUL könnt ich x16 und nochmal die x2 
für den TIM1 dann bin ich aber erst bei 128Mhz.
Das selbe würde ja für einen 8Mhz über den HSE Eingang gelten soweit ich 
das dem DB entnehmen kann.

Es gibt den Abschnitt "External and internal interrupt/event line 
mapping". Aber da kann ich ja auch nur auswählen, welcher der GPIOs auf 
die jeweiligen EXTIx Interrupt Lines durch geht.
Ja es gibt da eine Tabelle im Kapitel Interrupts (NVIC), die hat aber 84 
Einträge wovon einige reserviert sind usw. Mir fehlt da leider total die 
Beschreibung, wie das zusammenhängt.

Autor: rmu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum soll man mit den Multiplikatoren nicht "dorthin" kommen. Z.b. 
SysClk von HSI oder HSE über die PLL auf 72MHz einstellen, dann lässt 
sich TIM1 mit x2 davon betreiben. RCC_CFGR3.

Das mit den Interrupts verstehe ich nicht. Wo ist das Problem?

Autor: Gf (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ja schon klar, dass ich die auf 72Mhz konfigurieren muss aber das schaff 
ich mit den vorhandenen Multiplikatoren ja nicht. Da bräuchte ich in der 
PLL ja einen Multiplikator von 18, der geht aber nur bis 16. Bei PLLSRC 
komm ich ja mit max 4Mhz rein wenn ich HSI nehme (Anhang).

Wie gesagt, ich verstehe nicht, wo ich die 72 Interrupts konfigurieren 
kann. Ich bin mal so frei und verlinke das Manual:
http://www.st.com/content/ccc/resource/technical/d...

12.1.3 S. 189 ist ja eine schöne Liste. Wie konfiguriere ich die alle? 
Außerdem hab ich die Einträge in Liste nicht abgezählt, also ohne die 
Reserved, das müssten ja weniger sein als 72.
Mit den folgenden EXTI_xxx Registern kann ich doch nur die "external 
lines" konfigurieren oder (also EXTI0-EXTI35).

Ich kenn mich zwar mit dem Prinzip der uCs aus, ist aber leider schon 
länger her, dass ich damit zu tun hatte und der war damals auch 
definitiv einfacher.

Autor: rmu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es scheint man kann mit HSI echt nur 64MHz erreichen. Also HSE oder MCO 
vom ST-Link mit 8MHz verwenden.

Der NVIC ist ein Standard ARM Cortex-Gerät und im allgemeinen Cortex-M4 
Programming Manual beschrieben. 
http://www.st.com/content/ccc/resource/technical/d...

Autor: Gf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich dann beim HSE mit 8Mhz nicht das selbe Problem? Wird ja wieder 
mindestens durch 2 dividiert bevor er bei der PLL landet.

Okay, besten Dank. Das werd ich mir mal zu Gemüte führen.

Autor: rmu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit HSE auf 8MHz geht das schon:

PREDIV = 0, PLLXTPRE = 0, PLLSRC = 1, PLLMUL = 9

Warum man den HSI nur halbiert in die PLL füttern kann versteh ich 
allerdings  nicht.

Autor: Gf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah verstehe, den div kann man auch auf 0 setzten. Hab da nur den 
"Schaltplan" angeschaut und mir gedacht da ist auch 2 das Minimum weil 0 
nicht angeführt ist.
Besten Dank!

Ich fürchte bzgl. der Interrupts werd ich nochmal auf dich zurückkommen 
müssen, aber da schau ich mir mal das Programming Manual an und dann.
Über die CMSIS (also die Funktionen, Strukturen, ...) ist es eh recht 
einleuchtend es zu konfigurieren. Ich will aber halt genauer wissen, 
welche Register da wo wie gesetzt werden und wie das zusammenhängt.

Autor: Gf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, wie vermutet muss ich jetzt noch einmal bzgl. der Interrupts fragen. 
Ich seh im Programming Manual das NVIC_ISERx. Ich hab mir auch den Code 
etwas näher angeschaut, was beim Einschalten des Interrupts für z.B. 
TIM2 passiert. Ich schaffe es jetzt jedoch nicht den Konnex 
herzustellen, wie diese Zeile mit meinem STM32 zusammenpasst.

    NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & 
(uint8_t)0x1F);

Autor: rmu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gf schrieb:
> So, wie vermutet muss ich jetzt noch einmal bzgl. der Interrupts
> fragen.
> Ich seh im Programming Manual das NVIC_ISERx. Ich hab mir auch den Code
> etwas näher angeschaut, was beim Einschalten des Interrupts für z.B.
> TIM2 passiert. Ich schaffe es jetzt jedoch nicht den Konnex
> herzustellen, wie diese Zeile mit meinem STM32 zusammenpasst.
>
>     NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
>       (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel &
> (uint8_t)0x1F);

Ich auch nicht ;-)

Spass beiseite, der Code setzt einfach ein Bit im passenden ISER. Bei 
meinem F304 hat TIM2 z.B. IRQ-Nr. 28, das würde also Bit 28 im ISER0 
entsprechen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.