STM32F030F4P6

STM32F030F4P6 breakout neues Layout

Gestern habe ich die neuen Platinen für den STM32F030-breakout erhalten. An der Schaltung wurde nichts geändert, lediglich das Layout wurde verbessert.

das neue Layout für den STM32F030-breakout
das neue Layout für den STM32F030-breakout

Einen kleinen Schönheitsfehler im Bestückungsdruck gibt es aber auch hier: C3 muss ein 100nF Kondensator sein, C1 ein 4,7µ Kondensator, denn der Stützkondensator sollte näher am Pin sein. Im Schaltplan ist es genau umgekehrt gezeichnet.

STM32F030 eigenes breakout Board V

Nachdem ich einen ganzen Vormittag mit der Fehlersuche aufgrund eigener Dummheit verbracht habe, (der Chip sitzt auf der Unterseite, ist also bezüglich der Anschlüsse, von oben gesehen, gespiegelt – ein Nachteil meines Layouts, aber verschmerzbar, wenn man die Unterseite als Oberseite betrachtet und die DIL-Pins entsprechend einlötet) geht das Board nunmehr so wie geplant.

Board in Funktion
Board in Funktion
bestückte Oberseite
bestückte Oberseite

Beim fertigen Board fällt auf, dass noch viel Platz ist. Das soll zwar auch zum Teil so sein, denn es wird ja mit Hand bestückt. Aber hier ist noch Optimierungspotential und doch Platz für einen RESET-Taster und einen ST-Link-Stecker. Die Lötbrücken auf die Chip-Seite umlegen, der Quarz geht sowieso auf beiden Seiten einzulöten, die zusätzlichen Teile ebenfalls auf die Chipseite und dann oben und unten „tauschen“, so sollte es besser gehen.

bestückte Unterseite
bestückte Unterseite

Der fehlende Lack auf einem Leiterzug der Unterseite ist mein Fehler, bin mit dem Lötkolben abgerutscht – Weller WECP-20, siehe Foto als Größenvergleich:

Vergleich Lötkolben Chip (baugleicher STM8S103)

 

Es wird Zeit, sich eine „ernsthafte“ Anwendung zu überlegen. Hier zunächst das mit Coocox erstellte Test-Programm:

#include "stm32f0xx.h"
#include "stm32f0xx_gpio.h"
#include "stm32f0xx_rcc.h"

#include <stdio.h>

void init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

    // LED: Configure PA0 and PA1 in output pushpull mode
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void Delay(__IO uint32_t nCount)
{
    while(nCount--)
    {
    }
}

int main (void)
{
    init();

    while (1)
    {
        GPIOA->BSRR = GPIO_Pin_1 | GPIO_Pin_0;  // Set PA! HIGH = LED off
        Delay(500000L);
        GPIOA->BRR = GPIO_Pin_0;  // Set PA0 to GND (red LED on)
        Delay(500000L);
        GPIOA->BRR = GPIO_Pin_1;  // Set PA1 to GND (green LED on)
        Delay(500000L);
    }
}

Ach ja, mit Quarz läuft dasselbe blinky-Programm deutlich schneller als auf dem TSSOP28-Adapter-Board. (ca. 3..4 mal schneller?) Schaltet der Chip die Taktquellen selbstständig um (angeblich startet er immer mit HSI und man muss mittels Programm umschalten) oder ist das Umschalten im Startcode von Coocox zu suchen? Ok, hab also noch zu tun …

EDIT: Hier:

 

ist ein Video des Testprogrammes zu sehen. Die Lösung des Geschwindigkeitsproblems liegt wie vermutet im startup-Code von Coocox, der bei externem Takt die PLL einschaltet.

STM32F030 eigenes breakout Board IV

Heute habe ich die Boards erhalten.

Platinen
Platinen
Platine von oben
Platine von oben
Platine von unten
Platine von unten

Der fehlende Bestückungsaufdruck ist keine Absicht. 😐 Da hab ich wohl beim Gerbern geschlafen.

Wie trenne ich jetzt die Einzelnutzen auf? Das Platinenmaterial ist FR4, der Staub soll gesundheitsgefährlich sein. Sägen mit der Dekupiersäge fällt aus, das wird krumm und schief, vom Sägestaub ganz zu schweigen. Sägen per Hand mit der Metallsäge dauert lange, ist aufwendig und staubt. Schneiden mit dem Seitenschneider (in Ermangelung einer Blechschere, die öfter empfohlen wird) erzeugt unvorhersehbare Brüche und Risse in der Platine.

Die Lösung, bis mir etwas besseres unterkommt: Ritzen auf beiden Seiten mit dem Teppichmesser mit dem (Metall-)Meßschieber als Anschlag und dann über die Tischkante einfach brechen. Das funktioniert erstaunlich gut. Danke an das Internet, wo ich auf mehreren Seiten diesen Tipp fand.

Was mache ich jetzt mit 60 Boards? 🙂

STM32F030 eigenes breakout-Board

Heute ist die Bestellung an ITEAD herausgegangen bezüglich des selbstentwickelten Boards.

Bestellung
Bestellung

Technisch ist es nicht optimal und nicht sehr gut, aber zumindest eine funktionierende Variante. Ich hatte keine Lust mehr, das noch zu verbessern. 😉 Wenn sich im Umgang damit weitere Anforderungen ergeben, werde ich das Design ohnehin noch mal ändern. Außerdem wollte ich unbedingt das mit dem „Nutzen-erstellen“ mal ausprobieren, es ist also ein 5 cm x 10 cm Board mit 6 Einzelstücken drauf. Jetzt bin ich gespannt auf das Ergebnis.

Schaltplan breakout board STM32F030
Schaltplan breakout board STM32F030
Das Layout mit mehreren Einzelplatinen
Das Layout mit mehreren Einzelplatinen

 

Meine Prämissen:

Die Platine sollte nicht größer als ein 20 poliger TSSOP-DIL-Adapter sein. (Ist sie jetzt doch aufgrund des für die Auftrennung notwendigen Platzes zwischen den einzelnen Platinen und der Umgehung der Pinreihe auf beiden Seiten mit je einem Signal sowie der links und rechts zu weit hinausgeschobenen Bauteile, siehe Layout – sicher noch optimierungsbedürftig)

VDDA sollte wahlweise vom DIL-Pin oder aus VDD kommen. Deshalb ist hierfür eine Lötbrücke vorgesehen. Die Gewinnung aus VDD ist nicht datenblattkonform, denn dieses fordert, dass VDDA vorher da ist und stets höher oder gleich VDD sein soll.

Eine weitere Lötbrücke ist gedacht für die Auswahl des Bootmodus. (boot0 high or low) Über den notwendigen Wert der Widerstände bin ich mir noch unsicher. Reicht ein „weak Pullup/Pulldown“ oder müssen sie „strong“ (= mehr Stromverbrauch) sein?

Einen separaten SWD-Stecker habe ich aus Platzgründen bewusst nicht vorgesehen, da diese Signale problemlos über die DIL-Reihe abgreifbar sind.

Auf einen RESET-Taster habe ich aus Platzgründen verzichtet.  Mal sehen, ob ich das bereue. 🙂

Auf groundplanes (Eagle: Polygon) habe ich bewusst verzichtet, weil mit maximal 8 MHz keine wirklich problematischen Signale auf der Platine laufen. (obwohl ich mir gerade nicht mehr so sicher bin, ob das Weglassen klug ist)

Ich habe 1mm Platinendicke gewählt, weil so der Nutzen besser trennbar ist. (Hoffe ich zumindest)

Auf das Onlinestellen der Eagle-Dateien verzichte ich mal, da das Design noch lange nicht ausgereift ist.

breakout board STM32F030F4P6

Dieses Teil ist teilweise für unter 50 Cent pro Stück bei Ebay, Amazon oder Aliexpress zu erhalten. Interessant ist der Baustein vor allem deshalb, weil er im Gegensatz zu seinen größeren Brüdern in einem überschaubaren und bastlerfreundlichen Gehäuse verbaut ist. „Bastlerfreundlich“ ist allerdings ein Euphemismus für ein TSSOP20-Gehäuse, siehe Fotos: (auf den Fotos ist es ein STM8S103F3P6 im TSSOP20-Gehäuse)

STM32F030F4
Größenvergleich
Größenvergleich
Größenvergleich (ATTiny in DIL mit STM8S103F3P6 in TSSOP20)
Größenvergleich
Größenvergleich

Ein erster Versuch startete mit einem (zu großen) TSSOP28-Universaladapter und einem kleinen Breadboard:

STM32F030F4P6 verlötet
STM32F030F4P6 verlötet
Aufbau auf einem breadboard
Aufbau auf einem breadboard

Schlaumeier werden sehen, dass die Kondensatoren nicht der Empfehlung des Datenblatts entsprechen. 😉 Ich hatte aber gerade nur 22nF als steckbares Bauelement zur Hand und es funktioniert. Der Schaltplan dürfte erkennbar sein. Links oben geht es zum ST-LinkV2, daneben die Versorgungsspannung, links unten wird mit einem Widerstand 510 Ohm boot0 auf Masse gezogen. Laut Datenblatt (absolute maximum ratings: always VDDA >= VDD) darf man nicht vergessen, VDDA anzuschließen. Das habe ich im Internet schon anders gesehen. An PA0 und PA1 (direkt neben VDDA) sind jeweils eine LED mit Vorwiderstand angeschlossen. Reset hat einen internen Pullup-Widerstand.

Pinout aus dem Datenblatt von ST
Pinout aus dem Datenblatt von ST
Spannungsversorgung
Spannungsversorgung

Als software wurde mit Coocox ein einfaches blink mit delay zusammengetippt und mit dem ST-Link V2 aufgespielt. Die Schaltung lief auf Anhieb.

Nächstes Ziel wird ein eigenes breakout-Board sein.

Es gibt andere Entwürfe im Internet, die mir aber aus diversen Gründen nicht zusagen:

STM32F030F4P6 breakout

STM32F030F4P6 breakout (erster Treffer)

hackaday.io stm32f030f4p6-breakout-board siehe auch: oshpark.com/shared_projects STM32F030 breakout

digital-controller-for-incubator-release-version

STM32F030F4P6 mit OLED (russisch)

STM32F030F4P6-Projekt (türkisch)

sowie (mindestens) zwei fertige boards aus China:

thanksbuyer.com stm32f030-arm-cortex-m0-development-board-usb-tp-serial-support-isp-download

elecrow.com stm32f030f4p6-minimum-system-boardcortexm0