Hi,
ich habe ein Display an einem STM32L053R8 hängen. Es wird über SPI
angesprochen. Anfangs war der STM auf 4MHz eingestellt mit einem SPI
Prescaler von 2. Da aber 320x240Pixel mit je 16Bit seeeehr lange
Übertragungszeiten bei 2MHz SPI Takt verursachen, wollte ich den Takt
etwas hochdrehen. Der HSI taktet mit 16MHz und wird durch 4 geteilt. Das
Einfachste war also den Teiler weg zu nehmen. Das hat nach Anpassung des
voltage scale auf Range2 auch geklappt.
8MHz sind schon deutlich besser, aber ich würde gern rausholen was geht.
Deshalb habe ich auch noch PLL aktiviert. PLL_N auf 8 und PLL_M auf 4 ->
32MHz Systemtakt und 16MHz SPI Takt. So steht es auch als Grenze im
Datenblatt.
Nur fällt der Takt mit der Einstellung auf 8MHz (SPI) ab (Voltage scale
natürlich auf Range1).
Dann probierte ich den Systemprescaler von 4 wieder einzustellen und
entsprechend PLL_N auf 32 zu stellen. Das führte dazu das ein SPI Takt
von 2MHz generiert wurde.
Wenn ich PLL_N auf 16 runterstelle klappt alles wie es sollte und ich
erhalte 8MHz SPI bzw. 12MHz bei PLL_N = 24. Ebenso ohne dem
Systemprescaler und mit PLL_N = 4 bzw 6.
Warum kann ich den Systemtakt nicht auf 32MHz stellen obwohl es im
Datenblatt so eingetragen ist?
Meine SystemInit():
1
RCC->APB1ENR|=(RCC_APB1ENR_PWREN);/* set Power Enable Bit */
2
3
/* The voltage scaling allows optimizing the power consumption when
4
* the device is clocked below the maximum system frequency.
5
* Range1: Up to 32MHz -> VOS_0
6
* Range2: Up to 16MHz -> VOS_1
7
* Range3: Up to 4,2MHz -> VOS
8
*/
9
MODIFY_REG(PWR->CR,PWR_CR_VOS,PWR_CR_VOS_0);
10
11
/* Enable the Internal High Speed oscillator (HSI or HSIdiv4) */
Mit PLLMUL x8 und HSI /1 müsste der VCO mit 128MHz laufen. Offiziell
kann er aber "nur" 96MHz. Warum stellst du den PLLDIV so hoch ein? Das
kostet doch unnötig Strom, nimm halt etwas in der Mitte.
Das doch nur ein Zweizeiler (bei IAR):
FLASH_ACR_bit.LATENCY = 1; RCC_CFGR = 0x414D0000; RCC_CR = 0x1050300;
while(! RCC_CR_bit.PLLRDY); RCC_CFGR_bit.SW = 3;
Dazu muesste Mann nur das DB/Referenzmanual nicht nur lesen
sondern auch verstehen.
> Warum kann ich den Systemtakt nicht auf 32MHz stellen obwohl es im> Datenblatt so eingetragen ist?
Die Antuinogeneration ist wohl unfaehig.
Mehmet K. schrieb:
>> RCC_CFGR = 0x414D0000; RCC_CR = 0x1050300;>> Sehr aussagekraeftige Befehle.
Naja, beinahe. Die Konstanten sollten natürlich dezimal sein ;)
> Es könnte doch so einfach sein: Benötigte> Taktfrequenz in ein Register schreiben und gut ist!
Rat mal was die beiden Zuweisungen machen :-)
>> RCC_CFGR = 0x414D0000; RCC_CR = 0x1050300;
Wenn statt dessen eine ganze A4-Seite voll eine ganze Litanei
angestimmt wird, ist wohl kaum der Kaefer schuld.
Immerhin: Das PLL-Register eines 56002 ist da intuitiver.
P.L. schrieb im Beitrag #4913053:
> EINE Angabe pro Peripherie und für die MCU-Programmabarbeitung- mehr> brauchts aus Anwendersicht nicht.
Es geht bei µCs nicht um Anwender. In der Industrie geht es um
Stückzahlen. Die Programmierung muss nicht anwenderfreundlich sein, wenn
das fertige Produkt 100k mal verkauft wird. Wenn es einfach sein soll,
dann nimmt man halt eine SPS oder ähnliches. Dafür kostet die auch mehr.
Abgesehen davon stellst du dir das ein bisschen einfach vor. Sagen wir
mal es gäbe ein Register für die Taktfrequenz des Controllers. Was macht
der Controller wenn du was einstellst, was er nicht generieren kann?
Einfach weil es keine passende Kombination aus Teiler und Multiplikator
gibt? Im Endeffekt läuft es doch wieder darauf hinaus, dass ich
nachschauen muss, ob meine Wunschfrequenz überhaupt möglich ist.
avr schrieb:> der Controller wenn du was einstellst, was er nicht generieren kann?> Einfach weil es keine passende Kombination aus Teiler und Multiplikator> gibt? Im Endeffekt läuft es doch wieder darauf hinaus, dass ich> nachschauen muss, ob meine Wunschfrequenz überhaupt möglich ist.
Wenn man nicht auf HSI laufen soll (30s Toleranz pro Stunde!), sondern
man den HSE mit Quartz nutzen will, was dann? Der kann jede Frequenz
haben. Soll der µC das etwa messen? Mit dem ungenauen HSI als Referenz?
avr schrieb:> Was macht> der Controller wenn du was einstellst, was er nicht generieren kann?> Einfach weil es keine passende Kombination aus Teiler und Multiplikator> gibt?
Du bist ein Kind der heutigen Technik :-)
Einstellbar kann/soll natürlich nur etwas sein, was die Hardware dann
auch ermöglicht. Intelligente Hardware verbirgt ihren inneren Aufbau
samt aller Abhängigkeiten vor dem Anwender. Sie ermöglicht maximale
Unabhängigkeit aller Peripheriemodule voneinander. Daneben ermöglicht
das Clockmanagement wesentlich mehr Auswahl und Auflösung und kommt
inkl. eines hochgenauen Zeitgebers als Basis-> dahin sollte sich die
Entwicklung mal bewegen statt immer nur auf "dumme" Leistung und ein
Universum an Konfigurationsmöglichkeiten zu setzen, die ja doch nur von
der hölzernen Begrenztheit heutiger Hardware künden und den
Softwareaufwand samt Fehlerpotential aufblasen. Threadthemen wie dieses
hier könnten endlich Vergangenheit sein!
Nop schrieb:> man den HSE mit Quartz nutzen will, was dann? Der kann jede Frequenz> haben. Soll der µC das etwa messen? Mit dem ungenauen HSI als Referenz?
Was man von außen anschließt muß man dem intelligenteren Controller im
Programm schlicht nur bekannt machen.
P.L. schrieb:> avr schrieb:>> Die Programmierung muss nicht anwenderfreundlich sein>> Mit dieser Einstellung wird das nie was!
Doch und zwar wenn es um Stückzahlen geht. Bei µCs ist der Preis ein
starker Faktor. Wenn du damit nicht zurecht kommst, warum programmierst
du dann µCs? Es gibt fertige Embedded-Linux-Module, auf denen so
ziemlich alles abstrahiert ist. Dafür zahlt man eben mehr. Ich verstehe
wirklich nicht, wo dein Problem ist.
Es macht auch gar keinen Sinn, für so eine Funktionalität Silizium zu
verschwenden. Wenn man es bequem haben möchte, dann programmiert man
einmal eine entsprechende Funktion. Der Compiler wertet diese zur
Compilezeit aus und beschreibt die wenigen Register entsprechend.
avr schrieb:> P.L. schrieb:>> avr schrieb:>>> Die Programmierung muss nicht anwenderfreundlich sein>>>> Mit dieser Einstellung wird das nie was!>> Doch und zwar wenn es um Stückzahlen geht.
Auch dann nicht.
Die Gegenrechnung zu den Chip-Preisen in Gestalt vergeudeter
Programmier/Fehlersuche/Recherchestunden möchte ich in Summe gern mal
sehen!
Aber man kann/muss sich natürlich mangels Alternative (wunschlos) mit
dem Vorhandenen zufriedengeben. So ein Forum soll ja auch nicht
überflüssig werden :)