STM32 cube ide

Git is the answer.

Hiervoor gebruik je versie beheer.
Met git stop je al je sourcecode in een zogenaamde repository. (Zeg vergaarbak)
Vervolgens als je iets weekends hebt sla je dat daar in die status in op. Je kan daar dan altijd op terug vallen.
Vervolgens pas je wat aan, test dat en vroeg je het weer toe. Je kan zo met veel mensen, maar ook goed alleen aan 1 codebase werken en nieuwe features toevoegen zonder het bestaande tijdelijk te slopen en tig kopien op je schijf te zetten. Check maar eens wat YouTube beginners videos.
(Ohjee ik voorzie weer heel wat nieuwe topics ;), maar of die hier thuis gaan horen betwijfel ik)

trix

Golden Member

? ik heb daar al een account, ik ga dat eens bekijken.

eigenwijs = ook wijs

Je had je eerdere atmega code al eens op github gezet toch?
Nu is dat enkel een plaats om je repositories op te slaan.
Op jouw pc om er gebruik van te maken heb je git applicatie nodig

Op 22 februari 2022 23:08:48 schreef Stijnos:
Vervolgens als je iets weekends hebt sla je dat daar in die status in op. Je kan daar dan altijd op terug vallen.

Ik doe het ook wel eens als een nieuw feature nog niet werkt. Officieel zou ik zoiets moeten doen in een nieuwe branch: "werken aan feature X", maar in de praktijk heb ik zo soms een paar tussenversies die "niet af" zijn'.

Ik vind dat git-uitleg-sites vaak te snel "geavanceerde" features gaan uitleggen. Zonder is het ook al heel bruikbaar.

git init .
git add <file>
git commit -am "omschrijving laatste verandering."

dat is alles wat je moet weten om dingen IN git te zetten. Met

git checkout <versie>

kan je terug naar een oude versie en met

git checkout master

weer naar de "laatste versie". Hiermee kan je beginnen met git te werken en als je meer wil: Dat kan vast, maar moet je even uitzoeken hoe dat moet.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

I know rew, maar dacht laat ik het proberen eenvoudig te houden.
nieuwe probeersels bovenop het werkende zou je idealiter netjes in een (feature) branch doen en dan idd terug mergen, maar misschien is voor Trix momenteel een copy paste van alles makkelijker. Al is git als je het even door hebt ideaal hiervoor.
Trix ik gebruik zelf het liefst een grafische git client zoals git extensions, git kraken of source tree.

echter is dit wel weer een ding wat je onder de knie moet krijgen, hopleijk zijn er idd ook de eerste basis tutorials. Dat lijkt me genoeg.

trix

Golden Member

Op 23 februari 2022 10:33:22 schreef Stijnos:
Je had je eerdere atmega code al eens op github gezet toch?

klopt.

eigenwijs = ook wijs
trix

Golden Member

als ik iets op github wil bewaren, is dan de alleen de core map voldoende ? de bovenliggende map (met core daarin) opslaan gaat niet in 1 keer (git komt met de melding: meer dan 100 files).

eigenwijs = ook wijs

ik ben bang dat je nu upload naar github via de website.
Wat jij wilt kan niet met github zelf volgens mij.
Github is enkel de plaats die jouw code bewaard en die wat inzicht geeft in de wijzigen.
Je hebt een git client nodig.
zoek eens een tutorial voor gitextensions ofzo.

stappenplan:

* maak een nieuwe repository op github (dit heet je remote)
* clone die repository naar een lokale locatie
* kopieer nu al je project files in die lokale locatie
* stage alle files (niet je build output bij voorkeur)
* commit alles
* push naar origin

Zo nu staat je huidige project initieel in git.
Elke wijziging die je nu lokaal maakt wordt gezien als change t.o.v. deze eerste commit.
Deze kun je steeds committen. Naar elke commit die je hebt gemaakt kun je later weer terug springen.

vast wat termen die je nu nog niks zeggen, maar die zoek je lekker zelf maar uit :p
Het blijft hier CO en geen tweakers :)

Ik heb gewoon mijn complete project in git staan. Dat zou ik ook adviseren. Je wilt dat wat je cloont of uitcheckt gewoon compleet is om te kunnen bouwen/gebruiken

Arco

Special Member

Ik vind github maar een rommelig zooitje. Ik heb er al diverse malen moeten zoeken naar iets en het blijft lastig om iets te vinden.
Was mooi geweest als het een meer logische en overzichtelijke opbouw had. (je zoekt je een ongeluk en wat/waar staat is onduidelijk)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
trix

Golden Member

Op 26 februari 2022 02:26:02 schreef Stijnos:
ik ben bang dat je nu upload naar github via de website.

klopt inderdaad, ik zoek verder.

@arco, hoe doe jij dan je versie beheer ?

[Bericht gewijzigd door trix op zaterdag 26 februari 2022 10:06:53 (11%)

eigenwijs = ook wijs

Ik heb geen ervaring met github, wel met gitlab en bitbucket.
Maar trip heeft zelfs helemaal geen remote repository nodig omdat hij toch alleen werkt.
Download nou maar eens een git cliënt en maak een lokale repository.

trix

Golden Member

kreeg net git extensions niet geinstalleerd, de shortcut op het buroblad kreeg het programma niet gevonden. bij het verwijderen van git extensions kreeg de laptop rare kuren.
kortom, ik ga deze week eerst een nieuwe laptop kopen.

eigenwijs = ook wijs
trix

Golden Member

ik heb een aantal UART verbindingen nodig, nu zitten er op de stm32F411re er 3 op.
die stm32F411re zit om te testen op een nucleo bord (waar ook een programmer op zit.

USART 1 -> touchscreen
USART 2 -> is gereserveerd door het nucleo bord, ik denk dat daarover de controller word geprogrammeerd.
USART 6 -> scanner

die stm32F411re komt straks los op een PCB, en word dan met een losse programmer geprogrammeerd (mijn eigen nog niet in verdiept) en gebruikt daar waarschijlijk die USART 2 voor.

als bovenstaande klopt dan kom ik 1x een USART te kort, want ik wil ook graag seriële data naar de PC sturen.

vraag: kan je die losse programmer ook gebruiken om data naar de PC te versturen ?

eigenwijs = ook wijs

Nee die stm32 wordt via swd geprogrammeerd.
Daarvoor koop je gewoon een stm link.
Kost 2 tientjes ofzo. Of je kan je nucleo bordje ook als programmer gebruiken.
Die usart 2 wordt niet gebruikt om te programeren, maar waarschijnlijk hangt die wel aan je onboard programmer om via 1 usb verbinding te kunnen programmeren als ook data naar je pc sturen

Als je straks een eigen pcb hebt dan zou ik rechtstreeks usb gebruiken. In Cube mx pak je de 2 usb pinnen, kiest daarvoor usb device en je hebt een virtuele compoort over usb. Scheelt je gelijk weer een usb naar uart ic. Kleine tip, bestel die stm32f411 nu alvast maar een stuk of 10. Dan heb je ze misschien wel eind van het jaar. Ik weet niet hoe het vandaag de dag is, maar ik vermoed dat er nog steeds geen stm32 te krijgen is voorlopig

Op 26 februari 2022 20:54:48 schreef Stijnos:
Nee die stm32 wordt via swd geprogrammeerd.
Daarvoor koop je gewoon een stm link.

Of je verwijdert 2 jumpers van je nucleo en gebruikt die.

Op 26 februari 2022 20:54:48 schreef Stijnos:
Kleine tip, bestel die stm32f411 nu alvast maar een stuk of 10. Dan heb je ze misschien wel eind van het jaar.

Dat lijkt me Extreem optimistisch.

Farnell geeft nu aan Levering 4 jan 2023, maar dat geven ze voor veel te veel onderdelen aan. Ik denk dat niemand inzet op "koop maar bij Farnell" als ze eerlijk zeggen: "februari 2024". Een aantal data zijn nu altijd: "53 weken vanaf nu" en een aantal producten(*) zijn allemaal "4 januari 2023".

(*) Te veel om toeval te zijn.

[Bericht gewijzigd door rew op zondag 27 februari 2022 09:53:52 (55%)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
trix

Golden Member

Op 26 februari 2022 20:54:48 schreef Stijnos:
Die usart 2 wordt niet gebruikt om te programeren, maar waarschijnlijk hangt die wel aan je onboard programmer om via 1 usb verbinding te kunnen programmeren als ook data naar je pc sturen

dat betekent denk ik wel dat ik die USART 2 poort nu niet kan gebruiken, zolang ik met het nucleo bord werk.

Als je straks een eigen pcb hebt dan zou ik rechtstreeks usb gebruiken. In Cube mx pak je de 2 usb pinnen, kiest daarvoor usb device en je hebt een virtuele compoort over usb. Scheelt je gelijk weer een usb naar uart ic.

als ik het goed begrijp kan je dan programmeren met een USB kabel rechtstreeks van de laptop naar de STM32F411re.

ik kom op de STM32F411re 4 USB aansluitingen tegen:
USB_OTG_FS_VBUS
USB_OTG_FS_ID
USB_OTG_FS_DM
USB_OTG_FS_DP

maar ik heb er maar 2 van nodig, volgens mij:
USB_OTG_FS_DM
USB_OTG_FS_DP

klopt dat ?

eigenwijs = ook wijs

Je kan die uart2 nu dus ook al gebruiken voor debug prints. Je zult zien dat als je je nucleo aan de pc hangt je ook een extra compoort krijgt. Die komt dan overeen met de uart 2 van je micro.

Voor usb seriële compoort heb je aan dp en dm in princippe genoeg.
Id is voor usb otg, waarbij je device ook als host kan fungeren.

@rew ja idd optimistisch, ik had geen zin om huidige levertijden op te zoeken en ze Ijn ook verre van betrouwbaar. Het makkelijkst als het een enkel stuks pcb wordt is om van zo'n nucleo board de micro te stoken als je die nog wel kan krijgen.

Ik heb voor mijn laatste ontwerpje maar zo ongeveer de enige stm32 gekomen die nog te krijgen was. Vaak voor doorsnee toepassingen voldoen er velen.

Ik heb zelf ondertussen een "blinky" op een GD32 aan de praat.... Mijn bestaande STM32 print waar ie opzit is helaas niet compatible met USB-op-de-GD32: De GD32 heeft voorzover ik nu weet een kristal nodig. Ik had het "crystalless USB" van ST gebruikt....

Ik zit ook naar RP2040 te kijken als alternatief. Voor EUR 0.80 heb je de allerkleinste STM32. ('F030 / 'G030) Maar nu niet leverbaar en/of 5x duurder. Door te "upgraden" naar de RP2040 krijg je 1 extra core, 220k extra RAM voor de som van 0 cent extra. Wel moet je zelf extern flash regelen en heb je een kristal nodig voor USB.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
trix

Golden Member

Op 27 februari 2022 11:38:57 schreef Stijnos:
Voor usb seriële compoort heb je aan dp en dm in princippe genoeg.
Id is voor usb otg, waarbij je device ook als host kan fungeren.

dan kan ik straks daarmee rechtstreeks vanaf de laptop naar de controller om te programmeren, zonder apparte programmer ?

eigenwijs = ook wijs

Ik zou (als in dat DOE ik altijd) gewoon de SWDIO en SWCLK signalen samen met ground, VCC, RESET naar buiten brengen.

Ik gebruik een 6 pin header:
1 - VCC
2 - SWCLK
3 - GND
4 - SWDIO
5 - RESET
6 - Boot0

Dit is de debug connector waarmee je met een STLINK debugger met je CPU kan debuggen en programmeren. De pinout is compatible met je STLINK die op je nucleo zit.

Boot0 moet met een weerstandje naar voeding-of-ground en met een schakelaar naar de andere. Als je dan tijdens het aanzetten of resetten op dat knopje gedrukt hebt, dan gaat ie naar de bootloader. Dan kan je hem via USB met het DFU protocol programmeren.

Zeker voor je eerste printje zou ik niet bezuinigen op verschillende manieren om de CPU te kunnen bereiken. Als je USB het niet doet, dan wil je kijken: "doet de CPU het wel?" Kan ie uberhaupt een blinky doen? Dus dan heb je de debug connector nodig om hem te programmeren. En andersom, als de debug connector het niet doet, dan... misschien kan je hem via USB bereiken.

Wat ik niet snap is dat je "om uarts verlegen" zit. Als de 411 de allergoedkoopste '4xx processor is met maar 3 uarts, dan moet er een ietsie duurdere te vinden zijn die gewoon 6 uarts heeft.

De STM32F072 is anderhalf keer goedkoper dan de 411 en heeft vier usarts. (maar iets lagere clock, minder ram, minder heftige CPU).

Maar goed: Ik zou ook dus bijvoorbeeld (op je eerste printje) een usart naar een connector brengen: Stel je voor dat je SWD en USB op een lege processor niet aan de praat krijgt. Wat dan? Dan wil je met de bootloader babbelen. Een usart is dan de meest praktische. (je kan USB-TTL dingen kopen voor 2 euro en dan is er een python programma om de boel te programmeren, dat is er niet voor SPI of i2c.... ).

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
trix

Golden Member

Op 27 februari 2022 17:21:09 schreef rew:
Wat ik niet snap is dat je "om uarts verlegen" zit. Als de 411 de allergoedkoopste '4xx processor is met maar 3 uarts, dan moet er een ietsie duurdere te vinden zijn die gewoon 6 uarts heeft.

prijs is geen punt (binnen de grenzen v/h normale).
de processor is meer geselecteerd op de (makkelijke) te verkrijgen nucleo borden. dit was er zo een, op dat moment had ik niet in de gaten dat de aantal USARTS krap was (touchscreen was toen nog niet in beeld). als ik een nucleo zie met een processor met meer UARTS,...dan word het die.
het niet kunnen verkrijgen van losse procesoren, dwingt om met nucleo (of ander prototype bord) te werken.
ik had liever een prototype PCB gemaakt, maar dan heb je losse processors nodig.
ik had ook begrepen dat de STM32F4xx serie redelijk "pin compatible" is met andere uit de F4xx familie, dus switchen in een ietwat later stadium is te doen.

jij zegt dat het sowieso verstandig is om een extra "spare" USART op een connector naar buiten te brengen, dus ik kom dan al minimaal 1 USART te kort.

ik ga ook eens bekijken welke STM32 wel meer UARTS heeft en beter geschikt is voor mijn toepassing, en hoop daar dan een nucleo bord voor te kunnen kopen, maar dat laatste zal denk ik wel eens een probleem kunnen worden.

eigenwijs = ook wijs

Op 27 februari 2022 18:51:41 schreef trix:
jij zegt dat het sowieso verstandig is om een extra "spare" USART op een connector naar buiten te brengen, dus ik kom dan al minimaal 1 USART te kort.

Niet noodzakelijk. Als je even nadenkt kan je vaak wel een van de uarts vinden waar je de "andere kant" uit zou kunnen schakelen of los kan koppelen MOCHT je hem nodig hebben om te programmeren.

Ik heb een STM32 die naast een raspberry pi zit. Door gewoon de uart aan de raspberry te hangen, kan ik de STM zo nodig vanaf de raspberry herprogrammeren als ie in bootloader gezet wordt. Of ik kan de raspberry d'r uit halen en via de uart connector op die verbinding hem programmeren vanaf m'n ontwikkel PC.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
trix

Golden Member

nieuwe laptop en de boel weer geïnstalleerd :), laptops zijn trouwens ook flink wat duurder geworden :(

ik zit een beetje met een timer te spelen om te zien of het werkt zoals ik verwacht. ik moet straks voor de steppers interrupts gaan maken waarin ik de pulse pin (v/d stepper driver) hoog en laag maak.

het eerst wat me opvalt is, ik maak in MX een timer aan:
- de interne klok laat ik op 32 Mhz lopen.
- bij de timer deel ik die door 32000.
- bij de waarde 1000 (auto reload heet dat in MX) reset de timer, start op nieuw en triggert de interrupt.

(waardes kloppen niet voor een stepper, maar die zijn alleen om te testen)

die waardes 32000 & 1000 vind je natuurlijk terug in tim.c
alleen ik moet niet altijd die 1000 hebben, dat moet een variabele zijn.
in de MX bij die timer kan je alleen maar getallen invullen, geen variabelen.
dus ik maak dan in tim.c van die 1000 een variabele: stepper_speed, dat gaat.
maar als je dan in MX wat verandert en weer terug gaat naar tim.c
(dan heeft ie de code opnieuw opgebouwd) staat die weer terug op 1000.

hoe moet je dit eigenlijk aanpakken ?

eigenwijs = ook wijs

zorg dat al de code die JIJ schrijft altijd tussen die // USER CODE begin en //USER CODE end staat.
Zo niet dan gooit st het gewoon weg op het moment dat jij opnieuw je code genereerd vanuit cubeMX. Ook daarvoor is het niet verkeerd alles zoveel mogelijk in je eigen aparte sourcefiles te doen. En enkel in de peripheral c files calls te maken naar jouw sourcefiles.

om je periode te veranderen, zul je dacht ik het ARR (auto reload register) register van waarde moeten veranderen, of je doet de hele init van de timer opnieuw, maar dat is een beetje onnodig.
Het updaten van dat register kan je niet zomaar willekeurig in elke plaats van de timer periode doen meen ik.
Zie dit draadje https://community.st.com/s/question/0D50X00009XkWygSAF/stm32f4-change-…
is verder wel genoeg over te vinden.

Ik gebruik zelf juist de capture compare registers (CCR) als ik een interrupt wil over x tijd. Dan zet ik dat register gewoon zoveel ticks vooruit als de huidige cnt van de timer.

trix

Golden Member

Op 4 maart 2022 00:14:59 schreef Stijnos:
zorg dat al de code die JIJ schrijft altijd tussen die // USER CODE begin en //USER CODE end staat.
Zo niet dan gooit st het gewoon weg op het moment dat jij opnieuw je code genereerd vanuit cubeMX.

ja dat wist ik, maar dat is hier niet aan de orde.

Ik gebruik zelf juist de capture compare registers (CCR) als ik een interrupt wil over x tijd. Dan zet ik dat register gewoon zoveel ticks vooruit als de huidige cnt van de timer.

in mijn code voor de AVR pre-loade ik de timer, en bij het bereiken v/d top werd er een interrupt getriggerd.
maakt denk ik niet zo veel uit hoe je die interrupt triggert. ik zie ook even niet hoe je in MX die verschillende opties kan selecteren.
ik ben nu aan het uitzoeken hoe ik mijn code kan kopiëren in gitkraken.

eigenwijs = ook wijs