zondag 10 mei 2020

PID en VID

Deze Product ID's en Vendor ID's zijn op de volgende link te vinden :

http://www.linux-usb.org/usb.ids


STM32 [ 5: Blink en het einde ]

Wat het obligate startpunt bij een Single Board Computer ( SBC , zoals de Raspberry Pi)  , nl " Hello World" is,   is bij een µC het blink programma.
Dit laat op een eenvoudig manier zien dat het programma en het spul werkt.
Blink  laat een ledje in een bepaald ritlme pinken.
Veelal is zo'n ledje reeds standaard op het printje aanwezig , zohier ook op de stm32.

Wat moeten we daarvoor doen ?

Eerst en vooral moet het STM32 printje met de STLink verbonden worden en dan aangesloten worden op een USB poort .

Ik ga dit hier niet uitgebreid beschrijven maar dit is overal te vinden op internet en is afhankelijk of je een  cloon te pakken hebt of het ware spul.

In   STM32 [ 1 : de start ] zie je een foto hoe het kan .


Open je terminal en check of je verbinding hebt met de STM

st-info --probe


Zoiets als dit moet je krijgen . Als er niets ingevuld is ( of een 0) in flash en verder , dan is het niet goed. kijk dan je verbinding na.

Verder kun je kijken of er in de STM32 al data aanwezig is in de vorm van hexadecimale waarden .

Maak eerst dat je in de volgende directory staat:

home/"uwnaam"/stm32/stlink

vanuit uw homedirectory is dat met :

cd stm32/stlink

Dan het volgende commando , dit schrijft de inhoud van uw stm32 in een bestand  dat saved.img wordt genoemd .


st-flash read ./saved.img 0x8000000 0x1000 


resultaat is  





Om dit te kunnen bekijken heb je een hexeditor nodig , gelukkig heeft Linux dat in zijn repository

Installeren  onder de  homedirectory met :

sudo apt install hexedit



Bij mij was dit al geïnstalleerd.


eerst terug naar het juiste pad

cd stm32/stlink

en dan hexedit gebruiken met

hexedit saved.img


U krijgt zoiets te zien :




Dit is een extract .
Linkse kolom  zijn de geheugenplaatsen , de middelste 4 groepen zijn de hexwaarden en de rechtse kolom zijn de eventuele ASCII tekens die daar mee overeenkomen .
Dit is een extract en de laatste FF -en zijn in feite lege geheugenplaatsen.
Als alle hexwaarden FF vertonen zit er geen programma in de STM32
Dit kan natuurlijk als je nog geen programma " geflasht" hebt . Hier zie je een deel van het Blink programma.

Hexedit verlaten met

<CTRL> C 

 We kunnen ook natuurlijk een bestaand programma wissen en dit doen we op de volgende manier:


Kijk na of je in de juiste directory staat: /home/"uwnaam"/stm32/stlink.

en dan :

st-flash erase



Alle inhoud is nu weg , te controleren met st-flash read en  hexedit ( zie hierboven)





Allemaal FF -en !

Blink !

Onder de map ~/stm32f103c8t6/miniblink zit er een blinkprogrammaatje 

dit moet nog eerst " gebuild" worden .

Ga naar de map met :

cd ~/stm32f103c8t6/miniblink 


Kijk de inhoud van de map na met

ls -al 


Er staan al twee miniblink bestanden in het groen , dat zijn al gecompileerde bestanden die ik vroeger reeds gemaakt heb. Maar er staat ook  miniblink.c en die moeten we hebben.

We kunnen die verwijderen met

make clobber  



De gebuilde bestanden zijn nu weg.

Opnieuw builden met

make





Na een ls -al zien we de nieuwe gemaakte bestanden .

Nu nog in de stm32 flashen .

make flash 




Ik heb geen jumpers moeten verplaatsen en het rode ledje begint direkt te pinken .--> Succes

Indien het niet uitzichzelf start , er is een reset knopje net naast de gele jumpers.

Dit sluit het hoofdstuk stm32 af voor mij .
Mijn collega heeft ook alles werkend en kan zich nu toespitsen op zijn project.







donderdag 7 mei 2020

STM32 [ 4: verdere install ]

Nu gaan we verder doen . Nog enkele testen ,ST-Link  installeren en alle software builden 

Voor alle zekerheid testen we ons PATH nog eens vanop de commandolijn:

echo $PATH


U ziet op het einde ons nieuw path naar de gcc-arm binary staan.

Nog een check te doen :

ga naar uw map


cd ~/stm32f103c8t6

en dan

nano Makefile.incl 

Kijk na of volgende regel zich in dit bestand bevindt ( bovenaan)

PREFIX          ?= arm-none-eabi



Opslaan en saven ( dat weet je ondertussen al wel hoe)

Test met volgend commando :


type arm-none-eabi-gcc

dit moet je zien :

 
Dit volstaat voorlopig wat testen betreft , hoe het afloopt ondervinden we laters wel.



Builden van de stm32 software


Dit is een belangrijk gedeelte. Builden betekent dat we alle geïnstalleerde software gaan " samensteken" , dit houdt onder andere in , het compileren ervan.

 cd ~/stm32f103c8t6


en nu het belangrijkste commando 
make


een stukje van make




Laat alles maar lopen en let of er geen fouten optreden , een " warning" kan niet zoveel kwaad , maar een rode melding , dat duidt op een serieus probleem.
Ik kan alleen maar zeggen , als je dit voorhebt, dat je kunt proberen om met het commando 

make clean 

de boel op te kuisen en opnieuw met  make  te proberen .

een stukje van make clean  in onderstaande foto

 
Builden van de ST-Link software

Hiervoor heb ik volgende link gevolgd.

https://freeelectron.ro/installing-st-link-v2-to-flash-stm32-targets-on-linux/ 

Eerst enkele afhankelijkheden installeren met git


sudo apt-get install git make cmake libusb-1.0-0-dev
 
 
 
en daarna

sudo apt-get install gcc build-essential

Normaal zijn er al enkele van deze afhankelijkheden geïnstalleerd ,maar dat geeft niets , Linux erkent dat en gaat gewoon verder.

Dan de soft zelf:

Maak dat je op de homedirectory staat.

cd /home/"uwnaam"   of     cd  ~


nieuwe map aanmaken

mkdir  stm32   
( of elke ander naam die je wilt maar niet naar de  stm32f103c8t6  map gaan )

cd stm32

soft clonen

git clone https://github.com/texane/stlink

Er is nu een map stlink aangemaakt, ga ernaar toe met 

cd stlink


En nu gaan we builden .

cmake .    Vergeet het punt niet erachter !

daarna nog

make




Sommige Linux releases vragen nog het volgend commando uit te voeren na een make commando


sudo ldconfig


Dit is wat bovenstaand commando doet volgens de man-page ( man = manual)


configure dynamic linker run-time bindings






Wat hieronder volgt wijkt af van hetgeen op de website staat. De st-* files staan niet onder de map stlink maar onder de map bin , dus eerst naar bin met 


!!!     9 mei 2020  Correctie


Na contacname met de author , is dit zijn antwoord. hij heeft het pad aan gepast , dus  cd bin  staat nu ook op de website





cd bin  




De gebuilde binaries worden naar hun plaats gekopieerd met :

 

sudo cp st-* /usr/local/bin





*******************************************************************************
Dit hieronder  hoeft niet , zie " Comments" hierboven


ik heb ook de andere files daarnaar toe gekopieerd , weet echter niet of dit moet .


sudo cp test-* /usr/local/bin    -->  hoeft dus niet !

********************************************************************************







Dan nog een belangrijk deel , het kopieren van de udev rules naar hun plaats:

eerst terug naar de map  stlink    vanuit de    bin    map, dit kan met

cd ..

en dan


sudo cp etc/udev/rules.d/49-stlinkv* /etc/udev/rules.d/


Ik denk dat het een goed idee is om te rebooten , zodat de udev rules gelezen kunnen worden 

Na reboot :

Testen !

Steek de ST-Link in een usb poort , maar zonder dat de STM32 verbonden is


Eerste commando:

lsusb








Op de eerste lijn ziet ge de ST_LINK /V2 zitten .

Dan de volgende test.

 st-info --probe 


Dit geeft hetvolgend resultaat: 




 
U ziet dat " unknown devide " maar dat is logisch , er hangt nog geen stm32 aan ! Het voornaamste is :  "Found 1 stlink programmers"

Volgende test.

st-flash --debug read dummy.file 0 256



Als je dit krijgt is er zekers communicatie met de STLINK 

Dat is het voor vandaag .

woensdag 6 mei 2020

STM32 [ 3: de software voor stm32]

Te installeren :

De in te geven commando's staan in het blauw

1. stm32 soft
Deze soft komt van VE3WWG en daarover is een zeer goed boek verschenen .
Zie  http://www.allitebooks.org/?s=stm32


2. libopencm3
3. FreeRTOS
4. ARM Crosscompiler

5. STlinkV2 , dit is voor een latere post

1. stm32soft.

Komt van Github en wordt dus "gecloond".

Verzeker er u van dat ge op /home/"usernaam" staat , zie deel 1

Met volgend commando

 git clone https://github.com/ve3wwg/stm32f103c8t6.git

haalt ge de nodige soft over .

Ga eens kijken naar github en lees de README.md onderaan het blad voor meer info.
https://github.com/ve3wwg/stm32f103c8t6

Het resultaat is een nieuwe map :  stm32f103c8t6

Nu kunt ge dit laten of zelf hernoemen . Dit is inderdaad een lange naam , maar als je enkel stm32 intypt en dan op je TAB toets drukt , zal Linux dit zelf voor je aanvullen .Ik behoud de lange naam.

bv  cd stm32 <TAB>   wordt     cd stm32f103c8t6
Als er meerdere mappen beginnen met stm32 zal Linux u een keuze geven.



Typ dan de eerstvolgende ontbrekend letter in ( hier een  f  ) en Linux doet de rest .

2. libopencm3

Ongeveer hetzelfde stramien.
zorg dat je in de juiste directory staat !

 cd ~/stm32f103f8t6

en dan :

git clone https://github.com/libopencm3/libopencm3.git


U ziet een map libopencm3 bijgemaakt.




Dit is de inhoud van de map stm32f103f8t6 na installatie van libopencm3
Let ook op de eigenaar van de mappen , dit moet uw usernaam zijn en niet root !



3. FreeRTOS


Ga naar    https://www.freertos.org/a00104.html

Dit was het adres op 6 mei , mss verandert dit met de tijd


En dit is het bestand, versie v10.3.1  op dit moment.




Ga in Linux naar de juiste map  met

 cd ~/stm32f103c8t6/rtos

Hier gaan we het bestand uitpakken met :

 unzip ~/Downloads/FreeRTOSv10.3.1.zip


 dit is de mapinhoud van rtos na uitpakken

Let wederom dat uw username er is en niet root 



en dit onder FreeRTOS



Hier moeten we eerst al iets doen vóór we het vergeten :

De versie aanpassen in het Projekt.mk bestand onder de map  ~/stm32f103c8t6/rtos

Met onderstaand commando

nano Project.mk

nano is de editor , zie eventueel Youtube voor gebruik ervan


In de bovenste lijnen moet je kijken of de juiste versienummer erin staat , zoniet aanpassen zoals op de foto hieronder .
Ik begrens altijd mijn wijzigingen met commentaar , in dit geval mijn call on4aol


bewaren  met <CTRL> O   < ENTER >   en afsluiten met <CTRL> X 



 
 Klaar !

4. ARM Crosscompiler

Omdat een pc op een andere architectuur ( x86_64) draait dan onze ARM Cortex moeten we een compiler hebben die onze architectuur omzet naar die ARM.
Dit wordt een crosscompiler genoemd en deze gaan we nu installeren.

Ik vond de mijne op deze link

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads/9-2019-q4-major

en kies de juiste versie , namelijk voor een Linux in dit geval



Dit is een zogenaamde tarball  en ingepakt in een bz2 compressiemode.

Dit moeten we eerst uitpakken en dit kan in Linux op de volgende manier.

Hiervoor gaan we wel als superuser moeten fungeren ( cfr Windows met administrator)

Vanuit de homedirectory

sudo -i

het kan zijn dat uw paswoord gevraagd wordt , geef dit dan in 

en dan krijgen we




en zien we een andere prompt 

maak een nieuwe map aan als deze nog niet bestaat met 

mkdir /opt

en ga naar die map met :

 cd /opt 

U krijgt deze prompt te zien






Uitpakken van de tarball


tar xjf /home/luc/Downloads/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2

Let goed op de naam van de tarball , het pad en van de usernaam , die kan verschillend zijn bij U 

 Er zal een nieuwe map aangemaakt zijn , iets in de trend van 

gcc-arm-none-eabi-9-2019-q4-major

deze is toch wel wat lang en we korten deze in naar  gcc-arm met het commando

mv gcc-arm-none-eabi-9-2019-q4-major  gcc-arm 

Zo ziet de inhoud van de map eruit , let niet op de map "test" , dit was inderdaad een test , bij U zal daar "opt" staan 

U ziet doordat we als superuser ( root) geïnstalleerd hebben dit dan ook voorkomt in de lijst in tegenstelling met onze vorige installaties





Dit moment is een goed moment om het PATH aan te passen zodat Linux weet als je een commando uitvoert dat met deze install te maken heeft , waar de nodige bestanden zich bevinden .
We kunnen dit rechtstreeks doen op de commandolijn en het zal werken , echter bij heropstart van uw PC , zal dit PATH niet meer herkent worden .
Daarom moeten we dit in een bestand zetten , dat bij opstart doorlopen wordt . Hierdoor is het PATH dan verankerd.

Vanuit uw homedirectory   /home/"uwnaam"

nano .bashrc        Let op vergeet het punt niet voor bashrc

en voeg de volgende lijn er vanboven bij

export PATH=$PATH:/opt/gcc-arm/bin


Opslaan en bewaren met

<CTRL> O  en <CTRL> X

Herstart uw PC  !

Pas dan kan het pad opnieuw ingelezen worden !


Nu kunnen we ook al eens testen of de crosscompiler gevonden wordt.

Geef volgend commando in 

 arm-none-eabi-gcc --version




Ik heb daarna enkele testen gedaan .
U ziet dat de crosscompiler gevonden wordt vanuit de homedirectory
luc ~

en vanuit de root van luc
luc /



maar niet als root user






Usersroot (blauwe prompt)     en     root als user ( rode prompt)    zijn eigenlijk twee verschillende begrippen.

Nochtans is alles geÏnstalleerd als root maar toch toegankelijk vanuit onze homedirectory.
We kunnen de bestanden laten zien met het volgend commando:

ls -l /opt/gcc-arm/bin





Hiermee beëindigen we de soft install.
We moeten nog het één en ander uitvoeren , maar dat is voor de volgende aflevering 


STM32 [ 2: Linux en voorinstellingen]

Nu komt de software installatie onder Linux.
Ik gebruik al jaren Linux Lite , onbekend voor velen , maar deze ubuntu afgeleide bevalt mij prima . ziet er wat oudbollig uit , maar werkt voor mij snel.
Voordeel is dat de pakketten voor Ubuntu dus ook allemaal op deze distro draait.

Linux home directory.
Voor linuxgebruikers is dit gesneden koek maar voor beginners ( zoals mijn collega) moet dit toch vermeld worden .

We installeren alles onder onze " homedirectory" en dit ziet er ongeveer zo uit .
Ongeveer , omdat de usernaam ( dat is hier luc ) bij u zal verschillen afhankelijk van uw Linux installatie.



pwd is een linux commando en geeft uw huidige directory weer ,zoals ge ziet is dit      /home/luc.      Bij u zal dit dan /home/"uw naam" vermoedelijk zijn .

Het tilde teken  ~ in de prompt  is ook een teken dat je in je homedirectory zit.

Om de software te kunnen installeren moet je al aan enkele voorwaarden voldoen . Ik verwijs hier naar een link in deze blog waar je al punt 1 tem 3 mag uitvoeren van het 10 stappenplan aldaar. Dit was voor een raspberry pi maar dit geldt voor alle Linux . U hoeft dus niet alles vanuit " Putty" te doen zoals daar beschreven maar gewoon vanuit de home directory , hier dus  /home/luc

voorinstellingen


Eenmaal dit uitgevoerd kunnen we starten met de toepassingssoftware voor de stm32




STM32 [ 1: de start ]

Een collega zendamateur die graag met stm32 zou willen starten maar nog geen kaas heeft gegeten van Linux heeft mij gevraagd om dit synchroon met hem te doen zodat hij " kan vertrekken".
De hardware heeft hij mij bezorgd en bestaat uit :



1.Een STM32f103c8t6  microcontroller van het type ARM Cortex M3
ook bekend onder zijn koosnaampje " Blue Pill"
Voor de prijs hoeft je dit niet te laten , slechts enkele euro's ben je kwijt.

2.Een USB  "Programming Unit" , zijnde de STlinkV2 , ook van STM.
De bedoeling van mijn collega is dat hij kan programmeren in een real time omgeving , daarvoor moet er ook een RTOS op komen

Kortom , dit zijn de startende software pakketten/Libaries die er op komen .

STM32f103c8t6
FreeRTOS
libopencm3

en ook nog StLinkV2 natuurlijk