Forum: Mikrocontroller und Digitale Elektronik STM32F103C8T6 Blue Pill Board: Mit ST-Link V2 an die 128kb Flash?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Christian J. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

leider hat mein Proggy im Debug Mode die 64kb schon um 6kb gesprengt. 
Ein paar printf, sprintf, Float Unterstützung, sin, cos... nen paar 
Zeichentabellen für das Display .... tipp....tipp....tipp....ups, und 
schon ist es passiert. sprintf + float knallt schon mit fast 10kb rein, 
trotz Newlib nano-branch. Mit der StandardLib sind es noch 20kb mehr.

Und die Boards haben ja 64kb... angeblich. Es gibt etliche Quellen im 
Netz, die aber von 128kb sprechen:

http://wiki.stm32duino.com/index.php?title=Blue_Pill

Ich benutze aber keinen Arduino IDE, sondern die EmBitz IDE mit 
ST-LinkV2 und einem 10 Euro Programmer dazu.

Der hängt sich auf, wenn man versucht mehr als 64kb zu flashen. In er 
Linker Datei habe ich den Chip mit 128kb eingetragen. Das ST-Link liest 
ihn natürlich als 64kb Chip aus.

Gibt es da einen Trick trotzdem an die 128kb zu kommmen mit der SWD 
Schnittstelle und ohne das Programm per Bootloader zu laden? Das geht 
nämlich leider nicht so einfach, da ST-Link mit der IDE verbandelt ist.

Gruss,
Christian

von Mampf unterwegs (Gast)


Lesenswert?

Mir ist da nichts bekannt... Verwendest du - O0 oder - Og? Lezteres 
optimiert gut, man kann aber noch gut debuggen

von Christian J. (Gast)


Angehängte Dateien:

Lesenswert?

Immer O2. Die Libs werden aber nicht optimiert, weil die schon fertig 
kompiliert vorliegen. printf ist immer der Hammer aber xprintf von Chan 
hat kein Float. Und ich muss diverse zahlenreihen ausgeben auf dem 
Display.

PS: Beim Debuggen ist immer die Optimerung aus, sonst geht das ja nicht 
zeilenweise durchsteppen.

Auf jeden Fall quatschen die beiden Boards schon ganz gut miteinander 
:-)

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Versuch doch mal -Os. Optimierung auf groesse.
Es gibt sehr kleine printf impementationen, mit float.

Heute komm ich leider nicht mehr ran, aber in meinem "Archiv" liegt 
wine, die braucht IIRC 6k inkl Float.

von Christian J. (Gast)


Lesenswert?

Nils S. schrieb:
> Es gibt sehr kleine printf impementationen, mit float.

Die Auswahl haste ja nicht, wenn Du stdio.h benutzt. Da nimmt er das aus 
der Lib die mitgeliefert wird. Un die wird nur gelinked und nicht 
kompiliert. Und beim Debuggen kann man keine Optimierung einstellen, da 
muss Zeile für Zeile alles so sein wie im Source Code.

ich kenne nur xprintf und die kann kein Float. printf mit float ist ca 
20kb in der normalen GNU armeabi Lib. In der NewLin Nano Branch ist es 
immerhin noch ca 12kb.

PS: Der Unterschied zwischen O2 und Os ist sehr klein. Ich habe öfter 
ärger mit Os gehabt, daher nutze ich es nicht mehr, seltsame HardFaults 
usw.

Denke mal ich bestelle mir ein paar 128kb Steine vom STM32F103 und löte 
die dann einfach drauf. Kosten ja nicht die Welt, 5 Euro oder so.

von Axel S. (a-za-z0-9)


Lesenswert?

Christian J. schrieb:

> Und die Boards ... 64kb ... Es gibt etliche Quellen im
> Netz, die aber von 128kb sprechen

Ja. Bekannt.

> Ich benutze aber keinen Arduino IDE, sondern die EmBitz IDE mit
> ST-LinkV2 und einem 10 Euro Programmer dazu.
>
> Der hängt sich auf, wenn man versucht mehr als 64kb zu flashen. In er
> Linker Datei habe ich den Chip mit 128kb eingetragen. Das ST-Link liest
> ihn natürlich als 64kb Chip aus.
>
> Gibt es da einen Trick trotzdem an die 128kb zu kommmen mit der SWD
> Schnittstelle und ohne das Programm per Bootloader zu laden? Das geht
> nämlich leider nicht so einfach, da ST-Link mit der IDE verbandelt ist.

Wenn du auf der Verwendung der IDE bestehst, dann ist da wohl "Ende 
Gelände". ST shipped den Chip (heh, ein Wortspiel!) immer mit der 
Größenangabe "64K" im Flash Size Register, auch dann wenn er von einem 
Wafer mit 128K Flash kommt. Die standardmäßigen Programmiertools lesen 
dieses Register aus und weigern sich beharrlich, außerhalb des da 
spezifizierten Bereichs zu schreiben. Wenn du diesen Automatismus 
übergehen willst, dan  brauchst du ein Flash-Tool, das du manuell 
anpassen kannst, z.B. openocd. Aber wie gesagt: "keine Arme, keine 
Kekse!"

von Johannes S. (Gast)


Lesenswert?


von asdfasd (Gast)


Lesenswert?

Der C8 hat 64kB, der CB hat 128kB.

von Christian J. (Gast)


Lesenswert?

asdfasd schrieb:
> Der C8 hat 64kB, der CB hat 128kB

Wollen wir wetten, dass die Firmen so gemein sind aus ein und 
demgleichen Wafer zig Varianten des gleichen Chips herzustellen in dem 
sie einfach  gezielt einige Fuses durchschiessen?

:-)

von Markus (Gast)


Lesenswert?

Ein schönes Board, welches Du gebaut hast. Sogar schwarz lackier ;-)
Meiner Meinung nach wäre es besser, den Prozessor zu tauschen und für so 
ein aufwendiges Board gleich eine Nummer größer zu gehen:
http://www.ebay.de/itm/STM32F407VET6-Mini-version-of-the-Ader-Tafel-STM32-minimum-system-version-/172387871994

von Christopher J. (christopher_j23)


Lesenswert?

Markus schrieb:
> Ein schönes Board, welches Du gebaut hast. Sogar schwarz lackier ;-)

Dem kann ich mich nur anschließen. Sehr hübsch.

Christian J. schrieb:
> asdfasd schrieb:
>> Der C8 hat 64kB, der CB hat 128kB
>
> Wollen wir wetten, dass die Firmen so gemein sind aus ein und
> demgleichen Wafer zig Varianten des gleichen Chips herzustellen in dem
> sie einfach  gezielt einige Fuses durchschiessen?
>
> :-)

Ja, das ist so, wobei das mit den "Fuses durchschiessen" habe ich noch 
nicht beobachtet. Im Gegenteil: Bis auf das Flash Register ist alles 
gleich. Ich denke irgendetwas auszulasern o.Ä. wäre zu aufwendig und 
damit zu teuer. Bei den F030F4P6 hat man z.B. den gleichen Chip wie beim 
F031F6P6, d.h. man hat nicht nur doppelten Flash, sondern z.B. noch 
einen Timer 2, den es eigentlich gar nicht geben dürfte. Ein 
Controller-Hersteller, der etwas auf sich hält, muss heute eben 
unbedingt 1000 verschiedene Controller anbieten können. Weil sich das 
natürlich nicht lohnt, nimmt man 50 Masken und stellt die "Vielfalt" 
durch verschiedene Gehäusevarianten und durch das "herunterlabeln" von 
bestimmten Typen her. Ich würde ebenfalls darauf wetten, dass das nicht 
nur bei ST so ist. Im Endeffekt kochen die alle nur mit Wasser.

Was dein eigentliches Problem angeht:

Inwieweit ist denn Embitz mit dem Flash-Tool von ST verbandelt? Da 
steckt doch garantiert auch noch OpenOCD unter der Haube. Wenn du da 
irgendwo die Möglichkeit hast etwas zu deiner GDB-init hinzuzufügen, 
dann kannst du mit
1
monitor reset halt
2
load
3
monitor reset halt
per OpenOCD flashen, d.h. im GDB wird ein "load" aufgerufen, was 
wiederum OpenOCD dazu bewegt die aktuelle .elf in den Controller zu 
laden.

von Christian J. (Gast)


Lesenswert?

Ok,

ich melde mich später mal dazu. Muss erstmal rausfinden, warum die 
Platine, wenn ich sie an die Wand hänge als Anzeige, warum dann die RTC 
(am LSE) nur noch 1/3 so schnell läuft. Nein, das ist kein Witz! Im Raum 
herumgetragen, auf den Boden gelegt, immer wenn was dicht dahinter ist 
außer Holz oder Ne Türe läuft die RTC viel langsamer, die Uhrzeit 
kriecht nur so. Und nur die RTC, alle anderen Takte stimmen, die aus 
Timern abgeleitet werden oder dem Systick.

Ich dreh noch ab.... dafür habe ich bis 3 Uhr heute morgen getestet :-(

Ja, openocd ist machbar, wenn es das für Windows gibt. Kenne das nur 
unter Linux.

von Stefan F. (Gast)


Lesenswert?

Bei dem Blue Pill Board sind die Anschlüsse des Uhrenquarzes heraus 
geführt. Möglicherweise stört der Kontakt zu etwas anderem die 
Schwingung. Wenn du die Platine gesockelt hast, könntest du verzsuchen, 
diese beiden Pins abzuschneiden.

von Christian J. (Gast)


Lesenswert?

Stefan U. schrieb:
> Bei dem Blue Pill Board sind die Anschlüsse des Uhrenquarzes heraus
> geführt. Möglicherweise stört der Kontakt zu etwas anderem die
> Schwingung. Wenn du die Platine gesockelt hast, könntest du verzsuchen,
> diese beiden Pins abzuschneiden.

Mein Chef meinte, dass dass kapazitive Rückwirkungen auf Gegenstände mit 
reinspielen könnten, da die Pins am Uhrenquarz extrem hochohmig sind. Da 
reichen wenige Pico aus, um den Quarz stark zu verziehen. Allerdings 
habe ich dieses Verhalten nicht bei einem ähnlichen Board.

Ich schneide sie heute abend mal ab, muss mal gucken welche das sind. 
Das geht natürlich nicht, sind ja wie Antennen. Ist gesockelt natürlich.

Leider weiss ich noch nicht wie man genau die HSI anbindet an die RTC, 
dazu finde ich keine Beispiele. HSI ist doch der 8 Mhz Quarz und der 
läuft ja schon vorher. LSE und LSI muss man erst "anwerfen".

Da muss ja genau eine Sequenz eingehalten werden. Oder man nutzt dieses 
CubeMX um diesen Fall mal durch zu spielen. Reicht aus, die Zeit kommt 
eh vom Masterboard alle paar Minuten durchgefunkt.

von Christopher J. (christopher_j23)


Lesenswert?

Christian J. schrieb:
> Ja, openocd ist machbar, wenn es das für Windows gibt. Kenne das nur
> unter Linux.

Ja klar gibt es das auch für Windows. Das ist in den meisten 
Eclipse-IDEs standardmäßig mit dabei, so wie z.B. bei SW4STM32. Es gibt 
aber auch einzelne Binaries für Windows zum Herunterladen:
http://www.freddiechopin.info/en/download/category/4-openocd

Das Problem bei der Sache ist halt, dass ich da keine Möglichkeit sehe 
wie du das irgendwie in Embitz integrieren kannst. Das scheint 
tatsächlich der absolute Albtraum, was die Flexibilität bei den Tools 
angeht.

Flashen mit OpenOCD an sich ist ziemlich einfach:
1
openocd.exe -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "program pfad/zu/irgendeiner.elf verify reset exit"

Wobei ich mir nicht ganz sicher bin ob man bei Windows die Pfade zu den 
.cfg-Skripten auch mit "/" angeben kann bzw. sogar angeben muss oder ob 
es "\" sein muss.

von Mike J. (linuxmint_user)


Lesenswert?

Christian J. schrieb:
> Und die Boards haben ja 64kb... angeblich. Es gibt etliche Quellen im
> Netz, die aber von 128kb sprechen:

Ja, die haben alle 128kByte Flash.

Du kannst das nur mit OpenOCD machen!
(mit dem STM32Duino-Bootloader soll es angeblich auch gehen)
1
In der Datei "/usr/share/openocd/scripts/target/stm32f1x.cfg"
2
3
Die Zeile auskommentieren:
4
#flash bank $_FLASHNAME stm32f1x 0x08000000 0 0 0 $_TARGETNAME
5
6
und durch diese hier ersetzen:
7
flash bank $_FLASHNAME stm32f1x 0 0x20000 0 0 $_TARGETNAME

Wenn du das gemacht hast flasht er dir deinen Chip.

Er sagt beim flashen:
1
device id = 0x20036410
2
ignoring flash probed value, using configured bank size
3
flash size = 128kbytes
Es ist aber egal, da es ja 128kByte sind.
Das habe ich mit einem 131072 Byte großem Bild getestet welches ich in 
den Flash geschrieben und wieder ausgelesen habe.


Ich flashe mit dem "ST-Link V2" vom Chinesen.
Meine STM32F103C8T6 mini-Boards (Bluepill) habe ich auch vom Chinesen 
für 1,82€ bekommen.

Ich werde hier mal eine einfache Anleitung wie man die Speichergröße 
testet ... irgend wo in die Artikelsammlung einstellen.

von Christian J. (Gast)


Lesenswert?

Christopher J. schrieb:
> Flashen mit OpenOCD an sich ist ziemlich einfach:openocd.exe -f
> interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "program
> pfad/zu/irgendeiner.elf verify reset exit"

Ok, bei Embitz kann man sich einen String zusammen basteln, wie beim 
ST-Link auch (irgendwo im Netz geklaut), wo all diese Platzhalter mit 
drin sind. Der öffnet so ein DOS Fenster und man sieht was er macht. 
Glaube das ist pratikabel.

Ich schaue mal, ob ich openocd bekomme und es irgendwie einbinden kann. 
EmBitz ist ja auch OpenSource und von daher sollte das auch andere OS 
unterstützen.

Ich habe auch zwei von diesen China-Stäbchen, die JTAG und SWD bieten 
und bin mit denen sehr zufrieden. Sind dann hoffentlich auch kompatibel 
zu ocd, so wie zur StLink V2 Oberfläche. Damit spiele ich mir die 
neueste Firmware ein und lösche mal Boards, da der Stop Mode es öfter 
mal unmöglich macht die erneut zu flashen und man per Hand in den Boot 
Mode stöpseln muss.

von Christian J. (Gast)


Lesenswert?

Mike J. schrieb:
> Meine STM32F103C8T6 mini-Boards (Bluepill) habe ich auch vom Chinesen
> für 1,82€ bekommen.

Haste da noch welche  übrig? :-) So günstig habe ich die noch nicht 
gesehen. Und aktuell schon 3 zerschossen, bzw einige Pins.

von Mike J. (linuxmint_user)


Lesenswert?

Christian J. schrieb:
> Haste da noch welche  übrig?

Habe mir vor drei Tagen noch mal zwei Boards bestellt.
Das vorherige mal waren die Boards von diesem Händler nach genau einer 
Woche da.

STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-For-Ardu 
ino
http://www.ebay.de/itm/162247218933
Preis: 1,81€

Christian J. schrieb:
> schon 3 zerschossen, bzw einige Pins.

Die ATmegas waren ja diesbezüglich recht unempfindlich gegen Überstrom, 
aber ich versehe auch jeden Pin mit einem Widerstand. :-D

Momentan bin ich noch beim einarbeiten in die Materie der 
STM32-Controller und wahrscheinlich hole ich mir ein größeres Dev-Board 
für 21€.
(NUCLEO-F429ZI - 
http://www.mouser.de/Search/ProductDetail.aspx?qs=mKNKSX85ZJcE6FU0UkiXTA%3d%3d)

Man kann dann das Programm in den S-RAM (256kByte) des STM32F429 
schreiben anstatt es in den Flash (nur 1000 mal beschreibbar) zu 
schreiben.
(Das Programm ist natürlich dann auch weg wenn man die Spannung weg 
nimmt, aber zum austesten aller Peripherie und zum probieren wäre es 
doch sinnvoll ... manch einer findet den Fehler nicht, probiert rum und 
schreibt dann an einem Tag 20 mal (oder öfter) den Flash neu. Nach 50 
Tagen ist das Ding dann hinüber. :-/ )

Wenn ich hier in Eclipse (SW4STM32) auf Debug drücke, dann habe ich mir 
eine Option mit "nur Debug" (also ohne Load) und eine mit "Flash + 
Debug" angelegt. Das Beschreiben geht ja auch sehr schnell.

Man kann das Projekt ja dann (angeblich recht leicht) auf einen 
kleineren Controller portieren.

von Stefan F. (Gast)


Lesenswert?

> Leider weiss ich noch nicht wie man genau die HSI anbindet an die RTC,
> dazu finde ich keine Beispiele. HSI ist doch der 8 Mhz Quarz und der
> läuft ja schon vorher. LSE und LSI muss man erst "anwerfen".

Die RTC kannst du nicht mit dem HSI Oszillator takten.
Der HSE Oszillator startet auch nicht von alleine.
Nach dem reset läuft der µC zunächst auf einem ~8Mhz R/C Oszillator (und 
der heisst HSI).

Ich habe die Prozedur für das Einstellen des HSE Oszillators hier 
beschrieben: http://stefanfrings.de/stm32/index.html

von Stefan F. (Gast)


Lesenswert?

> schon 3 zerschossen, bzw einige Pins.
> Die ATmegas waren ja diesbezüglich recht unempfindlich gegen Überstrom

Gehen die STM bei Kurzschluss einzelner Pins nach GND oder VCC kaputt?

von Christian J. (Gast)


Lesenswert?

Stefan U. schrieb:
> Gehen die STM bei Kurzschluss einzelner Pins nach GND oder VCC kaputt?

Ja, ich glaube leider schon. Ich habe auf diese Weise einige Steine 
zerschossen. Einen Überstromschutz haben die jedenfalls nicht und die 
sind sehr schnell tot, vor allem extrem sensibel gegenüber ESD.

Im Übrigen ist es ein Märchen das Flash wäre nur 1000 Mal beschreibar. 
Eher 10.000 Mal. Ich debbuge den 429er auch im RAM, wenn es geht. Das 
ist aber nicht in jedem Fall machbar! In meiner Anwendung hängt sich der 
Debugger einfach irgendwann auf, obwohl scheinbar alles richtig 
eingestellt wurde.

von Christian J. (Gast)


Lesenswert?

Stefan U. schrieb:
> Ich habe die Prozedur für das Einstellen des HSE Oszillators hier
> beschrieben: http://stefanfrings.de/stm32/index.html

Ok, habe es überflogen. Aber wie koppelt man den HSI oder HSE an die RTC 
dran? Das geht, die hat 3 Taktquellen als Referenz: HSI oder HSE, LSE 
und LSI.

von Pete K. (pete77)


Lesenswert?

Mike J. schrieb:
>> Und die Boards haben ja 64kb... angeblich. Es gibt etliche Quellen im
>> Netz, die aber von 128kb sprechen:
>
> Ja, die haben alle 128kByte Flash.

Ist denn da ein anderer Controller drauf? Der STM32F103C8T6 hat ja nur 
64kB Flash.

Und lustig, auf dem Schaltplan von den Modulen ist ein MAX3232 
abgebildet. Den habe ich auf den Bildern noch nicht gefunden ;-)

von Axel S. (a-za-z0-9)


Lesenswert?

Pete K. schrieb:
> Mike J. schrieb:
>>> Und die Boards haben ja 64kb... angeblich. Es gibt etliche Quellen im
>>> Netz, die aber von 128kb sprechen:
>>
>> Ja, die haben alle 128kByte Flash.
>
> Ist denn da ein anderer Controller drauf? Der STM32F103C8T6 hat ja nur
> 64kB Flash.

Hast du das immer noch nicht geschnallt? Der Käfer ist zwar als C8T6 
gelabelt, drin ist aber meist (immer?) der gleiche Chip wie beim CBT6. 
Kommt halt alles von einem Wafer und wird nach Bedarf mal so, mal anders 
gelabelt. Womöglich ist der überzählige Flash auch unzuverlässig oder 
schlicht nicht getestet.

Auf jeden Fall sind die C8T6 von ST per Fuse oder factory programming 
auf 64K Flash "kastriert". Alle offiziellen Tools beschreiben dann auch 
nur 64K. Aber wenn man Kontrolle darüber hat (Bootloader oder wie bei 
openocd ein Configfile) dann kommt man auch an den restlichen Flash.

von Christian J. (Gast)


Lesenswert?

Hat vielleicht auch jemand den Kommandostring für Embitz mal zur Hand? 
Das ist nämlich das Einzige, was ich bräuchte....

von Pete K. (pete77)


Lesenswert?

Axel S. schrieb:
> Hast du das immer noch nicht geschnallt?

Scheinbar nicht. Aber Danke für die Erklärung. Jetzt habe ich es 
"geschnallt".

von Mike J. (linuxmint_user)


Lesenswert?

Mike J. schrieb:
> Ich werde hier mal eine einfache Anleitung wie man die Speichergröße
> testet ... irgend wo in die Artikelsammlung einstellen.

Ich habe das jetzt hier mit rein geschrieben, aber irgend wie habe ich 
da ein Fehler beim verlinken der 128kByte bin-Datei gemacht. Hochgeladen 
wurde sie, aber ich hätte sie wohl nicht als Miniatur anzeigen lassen 
sollen.
Eigentlich sollte die nur einfach runterladbar sein.

https://www.mikrocontroller.net/articles/STM32F103C8T6_STM32_Billig_Board#128k_Flash

: Bearbeitet durch User
von Christian J. (Gast)


Lesenswert?

Na toll :-(

Openocd drauf. EmBitz bietet sogar eine Option dafür an.... aber das war 
es auch. Es blitzt nur kurz eine Dos Box auf und die ist dann direkt 
weg. Was war kann man raten. Und nirgends eine gescheite Doku wie die 
Kommandostrings aussehen müssen! Ja, es ist Freeware aber ich weiss 
warum wir tausende Euros für Keil ausgeben.....

Grumpf.

von Christian J. (Gast)


Lesenswert?

Stefan U. schrieb:

> Bei dem Blue Pill Board sind die Anschlüsse des Uhrenquarzes heraus
> geführt. Möglicherweise stört der Kontakt zu etwas anderem die
> Schwingung. Wenn du die Platine gesockelt hast, könntest du verzsuchen,
> diese beiden Pins abzuschneiden.

Das war es! Habe die Pins abgekniffen und die Rest ausgelötet. PC14 und 
PC15. Und seitdem läuft die RTC einwandfrei. Ist schon krass was das 
ausgemacht hat!

von Stefan F. (Gast)


Lesenswert?

> Aber wie koppelt man den HSI oder HSE an die RTC dran?

Laut dem Diagramm aus Cube geht das gar nicht, aaaaber:

Zitat aus dem STM32F103x8 Datenblatt Kapitel 2.3.14 RTC (real-time 
clock) and backup registers:

"It is clocked by a 32.768 kHz external crystal, resonator or 
oscillator, the internal low-power RC oscillator or the high-speed 
external clock divided by 128."

Und im STM32F1 reference Manal (RM0008) Kapitel 7.2.8 steht:

"The RTCCLK clock source can be either the HSE/128, LSE or LSI clocks. 
This is selected by programming the RTCSEL[1:0] bits in the Backup 
domain control register (RCC_BDCR). This selection cannot be modified 
without resetting the Backup domain. The LSE clock is in the Backup 
domain, whereas the HSE and LSI clocks are not...
If the HSE clock divided by 128 is used as the RTC clock:
– The RTC state is not guaranteed if the VDD supply is powered off or if 
the internal voltage regulator is powered off (removing power from the 
1.8 V domain).
– The DPB bit (disable backup domain write protection) in the Power 
controller register must be set to 1 (refer to Section 5.4.1: Power 
control register (PWR_CR))."

Jetzt muss man also nur noch nachschauen, welche bits die Register 
RCC_BDCR und PWR_CR haben. Steht auch alles in diesem Handbuch.

Ich frage mich nur, warum du das machen willst. Denn die RTC ist danach 
keine richtige RTC mehr, der HSE Oszillator arbeitet nicht mit der 
Backup Batterie.

von Christian J. (Gast)


Lesenswert?

Stefan U. schrieb:
> Ich frage mich nur, warum du das machen willst. Denn die RTC ist danach
> keine richtige RTC mehr, der HSE Oszillator arbeitet nicht mit der
> Backup Batterie.

Hi,

ich habe damit etwas rumgespielt. Bei meiner Anwendung kriegt die 
Anzeige ihre Uhrzeit regelmässig vom Master per Funk zugespielt, von 
daher muss die RTC nur die Lücken überbrücken, die 1 Stunde sind. Der 
Master ist ein 429er wo ich die RTC penibel genau getrimmt habe mit den 
Trimmregistern. Alle paar Tage gucken und dann schrittweise gedreht, 
wenn zu schnell oder zu langsam.

Eine Anzeige kann ohne die Hauptplatine eh nichts machen, von daher 
brauche ich kein Backup. Schalte ich die ein fordert sie alle 
Betriebsdaten vom Master an. Nicht mal ne RTC eigentlich, geht auch mit 
dem Systick.

Die interne LSI ist extrem ungenau! 5 Minuten pro Stunde hatte ich da 
Abweichung. Muss man wohl etwas am Prescaler spielen, damit kriegt man 
sicher noch etwas raus. Ich hatte 4000 eingestellt.

Mit der HSE geht es auch, egal was CubeMX da sagt. Man muss sich nur 
daran halten, dass die RTC so eine Art unfertige RTC ist. Und stänmdig 
auf die Syncro Befehle und WaitTillLastTask Rücksicht nehmen. Das sieht 
unschön aus aber klappt.

Aber das mit den 128kb Flash ist geil! Jetzt passt sogar noch ein 
Startbild für das Display mit in den Speicher und ich kann endlich 
floats im printf benutzen.

von STM Apprentice (Gast)


Angehängte Dateien:

Lesenswert?

Möchte das ursprüngliche Thema nochmal aufwärmen:

Axel S. schrieb:
> Auf jeden Fall sind die C8T6 von ST per Fuse oder factory programming
> auf 64K Flash "kastriert". Alle offiziellen Tools beschreiben dann auch
> nur 64K. Aber wenn man Kontrolle darüber hat (Bootloader oder wie bei
> openocd ein Configfile) dann kommt man auch an den restlichen Flash.

Sowohl der STM-interne Bootloader (gesteuert vom STM Flash Loader
Demonstrator) als auch das ST-Link Utility (an SWD) erlauben mir
meine STM32F103C8T6 auf den Bluepill Boards mit 128kB Binaries zu
beschreiben und fehlerfrei zurückzulesen.

Im Flash Loader Demonstrator muss man nur die 128K Size auswählen.

Was nicht geht: im ST-Link Utility mit einem Offset (also z.B.
die zweite 64K-Bank als Startadresse) ein kleineres Binary
"da oben" zu plazieren.

Habe mal ein Testfile angehängt in dem jedes 32-Bit Wort den
Wert seiner eigenen Adresse im Bin-File enthält.

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.