STM32F103 und CooCox, Anfängerfragen

Gast #5129604
Lesenswert?

Hallo,

ich habe ein STM32F103C8T6-Board und CooCox installiert und möchte damit 
die sprichwörtliche LED zum Blinken bringen.

Ausserdem habe ich einen ST-Link V2 USB Programmer.

Meine erste Frage ist, wird das Programm nun mit dem ST-Link V2 auf den 
STM32 gebracht oder mit einem Micro-USB-Kabel (wie in manchen 
Beschreibungen)?

Falls beides geht ist die Verwendung des ST-Link V2 wahrscheinlich 
vorteilhafter (?).
Wenn dem so ist, wie wird der ST-Link mit dem STM32F103C8T6-Board 
verbunden?
So (?):

ST-Link   STM32
----------------
GND   ---> GND
SWCLK ---> CLK
SWDIO ---> IO
3.3V  ---> 3.3
#5129624
Lesenswert?

Hi,

Wenn du Coocox inkl. der Toolchain komplett installiert hast, und 
ebenfalls alle Treiber für den STLinkV2 dann musst du nur noch wie 
selbst beschrieben den STLink mit deinem Board verwenden und das 
Programm übertragen. Ich an deiner Stelle würde auch den STLink 
verwenden, da mit diesem auch das Debuggen des Programmes möglich ist.

Gruß,
Markus
Gast #5129647
Lesenswert?

Sehr gut, Danke!

Habe alles so gemacht wie beschriebenmit dem STLinkV2 und der Toolchain.

Nun blinkt auf dem Board die rote LED und die grüne LED (Power) leuchtet 
dauerhaft.

Die beiden Jumper stehen auf 0.
(wofür sind die eigentlich da?)


Unter "Respository/Peripherials" habe ich GPIO angeklickt, damit auf die 
Ports zugegriffen werden kann.
Gast #5129662
Lesenswert?

Warscheinlich musst du am Target den Reset Knopf gedrückt halten. 
Während dessen kann sich der ST-Link mit dem µC verbinden. Nach dem 
Firmware-Upload musst du nochmal den Reset Knopf drücken, um die neue 
Firmware zu starten.

Dein ST-Link hat auch einen Reset Ausgang, den du mit dem Target 
verbinden kannst, um dies zu automatisieren.


Ja, hier: http://stefanfrings.de/stm32/index.html
Gast #5129746
Lesenswert?

Stefan U. schrieb:
> Warscheinlich musst du am Target den Reset Knopf gedrückt halten.

Nein.
Preisfrage: Warum hat ein Bluepill Board wohl nur 4 Anschlüsse
zum Debugger, nicht 5?

Stefan U. schrieb:
> Dein ST-Link hat auch einen Reset Ausgang,

Stefan U. schrieb:
> den du mit dem Target
> verbinden kannst, um dies zu automatisieren.

Preisfrage: Warum hat ein Bluepill Board wohl keinen Reset-
Anschluss zum Debugger herausgeführt? Um dem Benutzer das
Leben so schwer wie möglich zu machen? Oder weil es ohne auch
funktioniert?
Gast #5129761
Lesenswert?

Mein Hinweis bezieht sich auf das Bluepill Board an einem ST-Link v2.1. 
Ich musste bei meinen Versuchen häufig (aber nicht immer) den Reset 
Knopf drücken, damit sich der ST-Link verbinden kann.
Gast #5129768
Lesenswert?

Stefan U. schrieb:
> Mein Hinweis bezieht sich auf das Bluepill Board an einem ST-Link v2.1.

Warum schreibst du das dann nicht gleich dazu?

Bis zu deinem letzten Beitrag war hier nicht von einem
v2.1 die Rede.

Warum sollte man einen Reset Pin brauchen wenn in den
Konfigurations-Dialogen immer die Möglichkeit gegeben ist
einen Software System Reset auszulösen?
Gast #5129774
Lesenswert?

DAC schrieb:
> Dann werde ich jetzt auch EmBitz installieren und testen.

Sei froh wenn coide funktioniert und lass es. Die Unterschiede der 
diversen ARM-ides sind für einen Anfänger unerheblich.

Versuch dein blinky. Es ist recht einfach pins initialisieren - nach 
coide-example -, Funktion für Sekundentakt, GPIOx->ODR-Register toggeln
Gast #5129806
Lesenswert?

> Mein Hinweis bezieht sich auf das Bluepill Board an einem ST-Link v2.1.
> Warum schreibst du das dann nicht gleich dazu?

Weil sowohl das Board als auch die Version des ST-Link keine Rolle 
spielen.

> Warum sollte man einen Reset Pin brauchen wenn in den
> Konfigurations-Dialogen immer die Möglichkeit gegeben ist
> einen Software System Reset auszulösen?

Während des Reset sind die Pins im SWD Modus. Nach dem Reset bestimmt 
die laufende Firmware, ob es sich um SWD oder GPIO Pins handelt.

> Warum hat ein Bluepill Board wohl keinen Reset-
> Anschluss zum Debugger herausgeführt?

Vielleicht:
Weil man es auch seriell Programmieren kann.
Weil Arduino User es üblicherweise per USB Bootloader programmieren.
Weil man die Reset Leitung dank Reset Taster nicht unbedingt braucht.
Weil das Board sonst breiter geworden wäre.
Gast #5129938
Lesenswert?

Christopher J. schrieb:
> Bei allen anderen ST-Links
> macht das durchaus auch Sinn mal die Reset-Leitung anzuschließen, z.B.
> wenn man sich ausgesperrt hat und einen "connect under reset"
> durchführen möchte.

In diesem einzelnen seltenen Fall, wo man mal ausgesperrt
wurde, kann man auch den Reset per Hand betätigen, da kommt
man schon durch.
Gast #5129964
Lesenswert?

Danke Grundschüler!

grundschüler schrieb:
> Sei froh wenn coide funktioniert und lass es. Die Unterschiede der
> diversen ARM-ides sind für einen Anfänger unerheblich.

EmBitz sieht schon beim Projekt-Anlegen äußerst kompliziert aus.


> Versuch dein blinky. Es ist recht einfach pins initialisieren - nach
> coide-example -, Funktion für Sekundentakt, GPIOx->ODR-Register toggeln

Wollte es so machen wie hier:
1
// Demo Blink-LED für STM32F4xx mit einem STM32F4DISCOVERY Board
2
// (c) 2013, Markus Müller
3
// Dieser Code darf frei verwendet, modifiziert und kopiert werden. Benutzung auf eigene Gefahr.
4
#include "stm32f4xx.h" // Deklaration der Peripheriefunktionen
5

6
void Delay(long i);
7

8
// Haupt-Programmschleife
9
int main(void)
10
{
11

12
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; // Clock für Port D aktivieren
13

14
    GPIOD->MODER = 0x55000000; // Pin 12..15 als Ausgang deklarieren
15

16
    while(1) // Endlos SChleife
17
    {
18
        GPIOD->BSRRH = 0xF000; // Alle LEDs aus
19
        Delay(1000000);
20
        GPIOD->BSRRL = 0x1000; // LED 1 ein
21
        Delay(1000000);
22
        GPIOD->BSRRL = 0x2000; // LED 2 ein
23
        Delay(1000000);
24
        GPIOD->BSRRL = 0x4000; // LED 3 ein
25
        Delay(1000000);
26
        GPIOD->BSRRL = 0x8000; // LED 4 ein
27
        Delay(1000000);
28
    }
29
}
30

31
// Delay für Verzögerungen
32
void Delay(long i)
33
{
34
    volatile long iZ = i;
35
    while (iZ--);
36
}

Wie findet man unter CooCox die richtige .h-Datei fürs include# ?
(habe ja einen stm32f103 und keinen stm32f4xx)

Außerdem wollte ich Port A nehmen und nicht Port D, aber das ist 
wahrscheinlich trivial.
#5130128
Lesenswert?

Bei einem F1 nimmst du entsprechend stm32f1xx.h. Dieser bindet dann ein 
paar andere Header ein, etwa core_cm3.h für Funktionalität rund um den 
Prozessor selber und je nach gesetztem #define dann z.B. den für dich 
passenden stm32f103xb.h. Wie der #define aussehen muss findest du heraus 
wenn du mal in stm32f1xx.h hereinschaust aber für normal wird der bei 
solchen IDEs hinter deinem Rücken automatisch gesetzt wenn du ein 
Projekt für deinen Prozessor erstellst. Ich würde übrigens auch nicht 
unbedingt zu Coocox greifen. Das wird nicht mehr weiterentwickelt und 
die neueren Serien werden schon jetzt nicht mehr unterstützt. Mit 
SW4STM32 hast du eine IDE, die ebenso kostenlos ist (jedenfalls im 
Moment) und die quasi den Segen des Herstellers hat, d.h. sämtlichen 
Beispielcode von ST, egal ob SPL, HAL oder sonstwas  hast du direkt als 
Projektdatei vorliegen.
Gast #5130200
Lesenswert?

GPIOD->MODER = 0x55000000; // Pin 12..15 als Ausgang deklarieren

sollte man so nicht machen da kryptisch (=nicht selbsterklärend)

üblich ist bei stm init über eine struct:
1
GPIO_InitTypeDef GPIO_InitStruct;
2

3
  /* GPIO Ports Clock Enable */
4
  __HAL_RCC_GPIOE_CLK_ENABLE();
5

6
 /*Configure GPIO pin : led1_Pin */
7
  GPIO_InitStruct.Pin = led1_Pin;
8
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
9
  GPIO_InitStruct.Pull = GPIO_NOPULL;
10
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
11
  HAL_GPIO_Init(led1_GPIO_Port, &GPIO_InitStruct);

Das ist im Prinzip immer gleich, egal ob mit oder ohne HAL

Dein code setzt jetz nur das MODER-Register. Das entspricht dem
"  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;"
in der struct.


Du solltest dir die anderen in der struct aufgeführten Register im 
manual ansehen. Bei dir bleiben die unverändert, also =0. Kann richtig 
sein, mglw. aber auch nicht. Ich weiß das ohne Blick ins manual nicht.

Deswegen macht man es über eine struct, damit alle relevanten Register 
erfasst werden.

1
      GPIOD->BSRRH = 0xF000; // Alle LEDs aus


Im Prinzip willst du das OutputDataRegister ODR verändern. Steht darin 
1, ist der entsprechende Pin high sonst low.

Zusätzlich gibt es die Register BSRR -set- und BRR -reset- mit denen man 
einzelne Pins des ODR "maskiert" verändern kann. BRR ist identisch mit 
BSRRH BSRR mit BSRRL. Die beiden Register stehen hintereinander.

Geht also so, wie in deinem code. Wenn du dir die GPIO-Registern  im 
manual ansiehst, weißt du dazu noch was du machst. Am besten den 
GPIO-Teil ausdrucken um den blinky-code verstehen zu können.
Gast #5130203
Lesenswert?

Christopher J. schrieb:
> Mit
> SW4STM32 hast du eine IDE, die ebenso kostenlos ist (jedenfalls im
> Moment) und die quasi den Segen des Herstellers hat, d.h. sämtlichen
> Beispielcode von ST, egal ob SPL, HAL oder sonstwas  hast du direkt als
> Projektdatei vorliegen.

Ich bin ja nun nicht unbedingt Anfänger. Mir ist die Installation von 
SW4 mit OpenOCD nicht gelungen. Das lag daran, dass bestimmte Versionen 
SW4/OpenOCD nicht zueinander passen. Coide wird mit STLink zusammen 
installiert, ist abgestimmt und läuft dann relativ sicher. Man kann auch 
HAL unproblematisch in Coide übernehmen. Vorteil von SW4 gegenüber Coide 
oder iregendwasanderem? Ich habe es noch nicht herausgefunden.
(Firma: OBUP) #5130215
Lesenswert?

grundschüler schrieb:
> Mir ist die Installation von
> SW4 mit OpenOCD nicht gelungen. Das lag daran, dass bestimmte Versionen
> SW4/OpenOCD nicht zueinander passen

Könnte sein, dass Du openocd V. 0.1.0 benötigst für ST4. Habe meins 
gerade auf 0.1.0 hochgezogen.

Vorteil:
  + SW4 wird weiter entwickelt >> Community-Projekt mit Unterstützung 
seitens ST
  + native Unterstützung sämtlicher STM32-µC & -Boards
  + basierend auf Eclipse >> viele Plugins verfügbar

mfg

Olaf

P.S.: lass Dir nicht einreden welche IDE Du benutzen sollst. Nimm die, 
die Dir zusagt. Auch wenn CoIDE anscheinend tot ist. Kann man später 
immer noch umsteigen. Meistens wird ein Projekt-Import angeboten oder 
per externen Makefile.
Gast #5130243
Lesenswert?

> Das ist im Prinzip immer gleich, egal ob mit oder ohne HAL

Nein, denn "das" ist Code, der die HAL verwendet.

> Mir ist die Installation von SW4 mit OpenOCD nicht gelungen.
> Das lag daran, dass bestimmte Versionen SW4/OpenOCD nicht
> zueinander passen.

Verstehe ich nicht. Diese Programme werden doch ein zusammenhängendes 
Paket zum Download angeboten, und das funktioniert ganz sicher. 
Vielleicht hast du von einer veralteten Quelle heruntergeladen. Richtig 
ist diese: 
http://www.openstm32.org/Downloading+the+System+Workbench+for+STM32+installer

> Vorteil von SW4 gegenüber Coide oder iregendwasanderem?

Funktioniert "einfach so", und wird von Cube/HAL ohne Einschränkung 
unterstützt.
Gast #5130355
Lesenswert?

Stefan U. schrieb:
> Nein, denn "das" ist Code, der die HAL verwendet.

siehst du zwischen
1
static void GPIO_setup(void)
2
{RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
3

4
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_12;
5
     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;   
6
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; 
7
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
8
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;   
9
    GPIO_Init(GPIOD, &GPIO_InitStruct);
10
}

und
1
/*Configure GPIO pins : PE2 key1_Pin key2_Pin */
2
  GPIO_InitStruct.Pin = GPIO_PIN_2|key1_Pin|key2_Pin;
3
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
4
  GPIO_InitStruct.Pull = GPIO_NOPULL;
5
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

einen wesentlichen Unterschied?
      GPIO_Init(GPIOD, &GPIO_InitStruct); und
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
sind offensichtlich gleiche Funktionen die gleiche Register setzen und 
sich nur durch den Funktionsnamen (Zusatz HAL_) leicht unterscheiden.
Gast #5130396
Lesenswert?

Pete K. schrieb:
> Alternativ könnte man auch sich mal Atollic TrueStudio anschauen.

Welches genau so wie CooCoox nach Hause telefoniert und wer
weiss was alles vom Rechner abholt.

Ich staune immer wieder mit welcher "Robustheit" (sollte man
Ignoranz sagen, sollte man Naivität sagen?) diese Dinge
übersehen werden .....
#5130398
Lesenswert?

Dumpfbacke schrieb:
> Pete K. schrieb:
>> Alternativ könnte man auch sich mal Atollic TrueStudio anschauen.
>
> Welches genau so wie CooCoox nach Hause telefoniert und wer
> weiss was alles vom Rechner abholt.
>
> Ich staune immer wieder mit welcher "Robustheit" (sollte man
> Ignoranz sagen, sollte man Naivität sagen?) diese Dinge
> übersehen werden .....

Belege für Atollic?
Gast #5130404
Lesenswert?

Solange beim Daten-Schnorcheln nichts schlimmes passiert, wird eine 
zunehmende Anzahl von Benutzern die Vorzüge von "kostenlos" genießen, 
ohne großartige darüber nachzudenken.

Der Begriff "Privatsphäre" verliert zunehmend an Bedeutung. Am meisten 
legen Leute darauf wert, die sich in der Vergangenheit durch eine 
feindliche Bedrohung verfolgt fühlten.

In diesem Land werden wir zwar mehr denn je ausspioniert, aber zumindest 
gefühlt nicht auf feindliche Art, sondern auf Kommerzielle Art und zum 
Schutz. Insofern ist der sinkende Bedarf nach Privatsphäre nur 
verständlich.
Gast #5130572
Lesenswert?

Vielen Dank für die vielen guten Antworten, besonders an Grundschüler!

Habe nun bei CooCox ein fertiges Projekt geladen und compiliert.

Dann wollte ich das Programm mit F5/Strg auf den Controller laden, 
bekomme aber die Fehlermeldung
1
Erase:   Done
2
Program:   Failed
3
Error: Flash driver function execute error
4
Program Download Failed !

Woran kann das liegen?


Der ST-Link V2 hat übrigens die aktuelle Firmware aufgespielt.
Gast #5130623
Lesenswert?

Wenn ich Reset dauerdrücke und F5/Strg drücke, gehen die grünen Balken 
schon mal weiter als vorher. Dann bleiben sie aber stehen und nach einer 
Zeit kommt die Fehlermeldung:

Error: Flash driver function execute timeout
Erase:  [  0%]pc: 0x200007fc
Program Download Failed !


Wenn Reset nur am Anfang gedrückt wird, Fehlermeldung wie weiter oben.
Muss vielleicht irgendetwas anders eingestellt werden?
Im Moment ist auch nur der ST-Link V2 am STM32F103-Board angeschlossen 
(der Micro-USB-Port vom Board ist leer)
Gast #5130814
Lesenswert?

Die Symptome sind wie hier im Video gezeigt ( ab ca. 9:17 ):

Youtube-Video "Short Tutorial: How To Start Programming STM32 Arduino 
MCUs"

Vermutlich ist der Lese- und Schreibschutz aktiviert.

Mit dem Programm 'Flash Loader Demonstrator' von ST (s. Video) müsste 
man das Problem eigentlich beheben können (Schreibschutz deaktivieren).

Das Programm habe ich auch installiert. Bekomme aber keinen Kontakt zum 
Board (sobald ich es über USB anschließe, versucht Win7 einen Treiber 
runterzuladen, was nicht klappt - und dadurch gibt es möglicherweise 
Probleme mit dem 'richtigen' Treiber?!).
Gast #5130839
Lesenswert?

1
//Stefan U. schrieb:
2
//> Nein, denn "das" ist Code, der die HAL verwendet.
3

4
//siehst du zwischen
5

6
static void GPIO_setup(void)
7
{RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
8

9
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_12;
10
     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;   
11
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; 
12
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
13
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;   
14
    GPIO_Init(GPIOD, &GPIO_InitStruct);
15
}
16

17

18
und
19

20
/*Configure GPIO pins : PE2 key1_Pin key2_Pin */
21
  GPIO_InitStruct.Pin = GPIO_PIN_2|key1_Pin|key2_Pin;
22
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
23
  GPIO_InitStruct.Pull = GPIO_NOPULL;
24
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
25

26

27
//einen wesentlichen Unterschied?
28
      GPIO_Init(GPIOD, &GPIO_InitStruct); und
29
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
30
//sind offensichtlich gleiche Funktionen die gleiche Register setzen und 
31
//sich nur durch den Funktionsnamen (Zusatz HAL_) leicht unterscheiden.

Oh Jehova, gelobt sei Arduino, denn er erspart uns derer viele Qual.
#5130844
Lesenswert?

Stefan U. schrieb:
> Benutze in deiner Software, die den ST-Link ansteuert die Option
> "Connect under Reset".

Stefan U. schrieb:
> Versuche HWRESET

Wenn ich das richtig verstanden habe, dann hat der TO einen von diesen 
ST-Link V2 Mini USB-Dongles. Wie ich oben schon geschrieben hatte 
funktioniert bei denen der (Hardware-)Reset per Resetleitung für die 
STM32 nicht, der funktioniert nur für STM8 und bei STM32 kommt es 
dadurch unweigerlich zu Timeouts wenn man in irgendeiner Art und Weise 
versucht einen Hardware-Reset durchzuführen.

Wie man einen manuellen "connect under reset" durchführt hatte ich mal 
hier beschrieben: Beitrag "Re: NUCLEO STM32F411"

tldr;

Man muss den Resetknopf auch wieder loslassen (in etwa binnen 2 Sekunden 
nach Start des Flashvorgangs), sonst gibt es unweigerlich einen Timeout.


DAC schrieb:
> Das Programm habe ich auch installiert. Bekomme aber keinen Kontakt zum
> Board (sobald ich es über USB anschließe, versucht Win7 einen Treiber
> runterzuladen, was nicht klappt - und dadurch gibt es möglicherweise
> Probleme mit dem 'richtigen' Treiber?!).

Per USB geht das sowieso nicht. In die USB-Buchse vom Rechner gehört nur 
der ST-Link und den verbindest du wie in deinem Eingangspost geschrieben 
mit dem Blue-Pill Board.
Gast #5130849
Lesenswert?

Ich formuliere es mal anders rum.

Wenn der ST-Link V2 nicht angeschlossen ist und das STM32F103-Board nur 
über USB mit dem Rechner verbunden wird, kommt von Win7 die 
Fehlermeldung
"USB-Gerät wurde nicht erkannt"

Frage: benötigt das STM32F103-Board selber noch einen speziellen 
Windows-Treiber?
Gast #5130853
Lesenswert?

DAC schrieb:
> Wenn der ST-Link V2 nicht angeschlossen ist und das STM32F103-Board nur
> über USB mit dem Rechner verbunden wird, kommt von Win7 die
> Fehlermeldung "USB-Gerät wurde nicht erkannt"

Das ist normal denn auf dem STM32F103-Board läuft ja aktuell
keine Firmware die den USB-Port bedient.

DAC schrieb:
> Frage: benötigt das STM32F103-Board selber noch einen speziellen
> Windows-Treiber?

Nein, erst wenn du eine spezifische USB-Firmware laufen lässt.
Das wäre dann meistens der Virtual Com Port Driver von STM.
Gast #5130869
Lesenswert?

Danke für die Postings!

Hat sich jetzt etwas überschnitten.

>Nochmal der Ablauf:
>
>1. Reset drücken und halten
>2. OpenOCD starten (per Kommandozeile oder IDE)
>3. Reset loslassen (binnen etwa zwei Sekunden)
>
>Fertig.

Das funktioniert leider nicht.

Sowohl CooCox als auch STM32 ST-Link Utility machen Stress.



grundschüler schrieb:
> ich habe es seinerzeit mittels eines usb/usart-adapters geschafft. Ich
> meine, der usb-anschluss auf dem board ist nicht für den usart - bin mir
> da aber nicht sicher.

Ach so. Ein USB-to-UART-Modul (virtueller Com-Port) habe ich hier. Wie 
wird der virtuelle COM-Port dann an das STM32-Board angeschlossen? RX an 
IO und TX an SCK???



STM Apprentice schrieb:
> Nein, erst wenn du eine spezifische USB-Firmware laufen lässt.
> Das wäre dann meistens der Virtual Com Port Driver von STM.

Habs kapiert, Danke!
Gast #5130877
Lesenswert?

DAC schrieb:
> grundschüler schrieb:
>> ich habe es seinerzeit mittels eines usb/usart-adapters geschafft. Ich
>> meine, der usb-anschluss auf dem board ist nicht für den usart - bin mir
>> da aber nicht sicher.
>
> Ach so. Ein USB-to-UART-Modul (virtueller Com-Port) habe ich hier. Wie
> wird der virtuelle COM-Port dann an das STM32-Board angeschlossen? RX an
> IO und TX an SCK???

Wobei, welche Pegel kommen aus dem USB-to-UART-Modul? Das Modul selber 
läuft ja mit 5V (hat aber auch 3,3V als Ausgang).
#5130884
Lesenswert?

DAC schrieb:
>>Nochmal der Ablauf:
>>
>>1. Reset drücken und halten
>>2. OpenOCD starten (per Kommandozeile oder IDE)
>>3. Reset loslassen (binnen etwa zwei Sekunden)
>>
>>Fertig.
>
> Das funktioniert leider nicht.
>
> Sowohl CooCox als auch STM32 ST-Link Utility machen Stress.

Ich kenne mich mit den Befindlichkeiten vom ST-Link Utility und dessen 
Interaktion mit Coocox nicht aus. Es kann sein, dass es daran liegt, 
dass die Protection-Bits gesetzt sind. Wie man die mit ST-Link Utility 
löscht (Stichwort "mass erase") kann ich dir nicht genau sagen. Wurde 
hier im Forum an anderer Stelle aber schon öfters diskutiert. Ansonsten 
würde ich wie oben schon erwähnt einfach zu SW4STM32 greifen und OpenOCD 
nutzen.


DAC schrieb:
> grundschüler schrieb:
>> ich habe es seinerzeit mittels eines usb/usart-adapters geschafft. Ich
>> meine, der usb-anschluss auf dem board ist nicht für den usart - bin mir
>> da aber nicht sicher.
>
> Ach so. Ein USB-to-UART-Modul (virtueller Com-Port) habe ich hier. Wie
> wird der virtuelle COM-Port dann an das STM32-Board angeschlossen? RX an
> IO und TX an SCK???

Der USB-Anschluss auf dem Board ist für USB. Da kann man wenn man will 
einen virtuellen COM-Port draus machen, dann verhält sich das USB-Gerät, 
als würde es an einem COM-Port stecken, sozusagen ein emulierter UART. 
Hast du einen USB-to-UART Converter, dann gehört der auf Seite des STM32 
auch an RX und TX des UARTs und nirgendwo sonst hin, erst recht nicht an 
die SWD-Pins. Flashen kann man damit prinzipiell auch und zwar über den 
eingebauten UART-Bootloader.
Gast #5130906
Lesenswert?

Danke Christopher für die ausführliche Antwort!

Christopher J. schrieb:
> Ansonsten
> würde ich wie oben schon erwähnt einfach zu SW4STM32 greifen und OpenOCD
> nutzen.

Du meinst das hier?
http://www.openstm32.org/HomePage
Und damit kann man sicher die Protection-Bits löschen?



STM Apprentice schrieb:
> Nein, an eines der Rx/Tx Pärchen von denen es drei gibt,
> z.B.  Rx an PA9, Tx an PA10, und Masse nicht vergessen.

Danke für den wichtigen Hinweis! Was ist mit den Pegeln, benötigt man 
noch einen Pegelwandler von 5V auf 3.3V? Oder liegt der Ausgangspegel 
automatisch bei 3,3V, wenn man vom USB2UART-Modul nicht die 5V-Leitung 
sondern die 3,3V-Leitung ans STM32-Modul anschließt?
Gast #5131013
Lesenswert?

Die Pegel vom USB2UART-Modul (TX) liegen bei 3,4V.


Habe es so angeschlossen wie von STM Apprentice beschrieben:

STM Apprentice schrieb:
> Nein, an eines der Rx/Tx Pärchen von denen es drei gibt,
> z.B.  Rx an PA9, Tx an PA10, und Masse nicht vergessen.

Der linke Jumper (der bei CN1) musste dann noch von 0 auf 1 gestellt 
werden.


Und dann konnte ich endlich mit 'STM Flash Loader Demo' den 
Schreibschutz entfernen, puh.


Dann Jumper wieder zurück auf 0 und dann konnte anscheinend fehlerfrei 
das hex auf den Controller geflasht werden (mit CooCox).

Genauer überprüft wird es morgen.



Jetzt schon mal ein riesengroßes Danke !!! an alle, die mitgeholfen 
haben!!!!!
Gast #5131017
Lesenswert?

DAC schrieb:
> Habe es so angeschlossen wie von STM Apprentice beschrieben:

Ja fürs Programmieren muss man sogar RX1/TX1 verwenden,
die anderen funktionieren dafür nicht ....

Gratuliere zum Erfolg den du dir offensichtlich auch teilweise
selbst erarbeitet hast.
Gast #5131382
Lesenswert?

Stefan U. schrieb:
> Welches konkrete Board ist das denn?

Ein STM32F103C8T6-Board. Ich glaube, das hier hatte ich konkret gekauft:
http://www.ebay.de/itm/GOOD-STM32F103C8T6-ARM-STM32-System-Development-Board-40-Pin-For-Arduino-TE435/282013850446?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649
(GOOD STM32F103C8T6 ARM STM32 System Development Board 40 Pin For 
Arduino TE435)



STM32F103C8T6-Board = Bluepill?
Gast #5131683
Lesenswert?

DAC schrieb:
> Weil ich hier einen Schaltplan habe, bei dem an jeder Daten-Leitung 10k
> nach +Ub hängen

Das kann andere Gründe haben. Manche Schaltungen brauchen einen
definierten Zustand wenn der Prozessor noch nicht initialisiert
ist (und damit seine Pull-Programmierung noch nicht wirkt).

Zeige den Schaltplan.
Gast #5134050
Lesenswert?

Der Autor wollte tatsächlich weniger als 40k haben.


Habe noch eine Frage zur Spannungsversorgung. Kann man bei dem 
Bluepill-Board einfach 5V an dem 5V-Anschluss (der zwischen B9 und GND) 
anschließen, damit es läuft?

(momentan hängt es noch am USB-Port)
Gast #5134068
Lesenswert?

DAC schrieb:
> Kann man bei dem
> Bluepill-Board einfach 5V an dem 5V-Anschluss (der zwischen B9 und GND)
> anschließen, damit es läuft?

Das kannst du dem Schaltplan entnehmen. Der 5V Pin ist direkt
mit der USB-Versorgung verbunden. Also Entweder USB Versorgung
nutzen, oder extern 5V einspeisen. Aber nicht 5V einspeisen und
gleichzeitig USB benutzen!
Gast #5134108
Lesenswert?

Kann ich auch einfach die 5V-Leitung der USB-Buchse abklemmen (also 
unterbrechen) und das Board extern mit 5V betreiben und dann im 
Bedarfsfall den USB-Stecker einstecken (während die externen 5V in 
Betrieb sind)?
Gast #5134214
Lesenswert?

> Aber nicht 5V einspeisen und gleichzeitig USB benutzen!

Ein kleiner aber wichtiger Unterschied zum Arduino Nano.

> Kann ich auch einfach die 5V-Leitung der USB-Buchse abklemmen

Da bin ich jetzt nicht 100% sicher, aber cih denke, das geht. Was aber 
passiert, wenn du das Modul per USB mit einem PC verbindest, während die 
Stromversorgung noch nicht eingeschaltet ist? Da müsste man mal ganz 
genau in das Datenblatt schauen.

Wenn diese beiden Datenleitungen 5V tolerant sind, sollte nichts kaputt 
gehen
(denn dann hängt die maximale Eingangsspannung nicht von VCC ab, da sie 
keine klassischen ESD Dioden nach VCC haben). Wenn es aber 3,3V 
Leitungen sind, dann war es keine gute Idee.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren