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


von Gf (Gast)


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?

von rmu (Gast)


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.

von Gf (Gast)


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.

von rmu (Gast)


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?

von Gf (Gast)


Angehängte Dateien:

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/document/reference_manual/71/30/2e/f3/20/5b/46/c1/DM00093941.pdf/files/DM00093941.pdf/jcr:content/translations/en.DM00093941.pdf

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.

von rmu (Gast)


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/document/programming_manual/6c/3a/cb/e7/e4/ea/44/9b/DM00046982.pdf/files/DM00046982.pdf/jcr:content/translations/en.DM00046982.pdf

von Gf (Gast)


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.

von rmu (Gast)


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.

von Gf (Gast)


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.

von Gf (Gast)


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);

von rmu (Gast)


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.

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
Noch kein Account? Hier anmelden.