Komma igång med ARM Cortex M3-utveckling

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
Klas-Kenny
Inlägg: 11832
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Komma igång med ARM Cortex M3-utveckling

Inlägg av Klas-Kenny »

OK, nu sitter jag här med min USB-JTAG och ett dev-board med en STM32F103 på, har aldrig tidigare kört annat än 8bitars PIC.

Jag har googlat i en bra stund utan att riktigt komma till skott så nu tänkte jag att varför leta runt i denna djungel när jag vet att kunskapen finns så nära.. :)
Jag antar att det är enkelt egentligen, bara man vet hur man gör.

Så, exakt vad för mjukvara behöver jag (Eller kanske rättare sagt rekommenderar ni), hur installerar jag och länkar samman dessa och var för jag tag på dem, för att kunna skriva C-kod till min processor, kompilera och programmera+debugga med min JTAG-programmerare?

Programmeraren är en Olimex ARM-USB-OCD-H
Dev-boardet är ett Olimex STM32-P103

Kör Windows 7 x64

Tar gärna emot länk till någon bra "getting started"-guide för detta också för att komma igång med själva programmeringen när mjukvaran är igång.
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: Komma igång med ARM Cortex M3-utveckling

Inlägg av SvenW »

>> Jag antar att det är enkelt egentligen, bara man vet hur man gör.

Nja, då få du nog köpa något färdigt paket.
Annars, ett fritt alternativ kan innehålla följande:

1. openocd ( openocd.cfg kan behöva konfigureras )
Detta fungerar med JTAG, men jag är osäker på om det fungerar
med USB.

2. Kompilator och toolchain
arm-2010.09/bin/arm-none-eabi-gcc ...
(arm-gcc toolchain från CodeSoucery, se referensen nedan)

3. Makefile, linker.ld (länkscript) finns som färdiga exempel.

4. programmeringseditor med debugger alternativt 'Ide'
debuggern gdb finns med CodeSoucerys toolchain

5. källkodsbibliotek som tar hand om många detaljer i hårdvaran
STM32F10x_StdPeriph_Lib_V3.4.0

6. startup-kod som innehåller avrottsvektorer och lite nödvändig kod för
att komma igång. Detta kan man skriva själv, men färdig kod underlättar.

Se t.ex http://fun-tech.se/stm32/gcc/index.php
Användarvisningsbild
Klas-Kenny
Inlägg: 11832
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Komma igång med ARM Cortex M3-utveckling

Inlägg av Klas-Kenny »

OK, det är så jäkligt i alla fall.

Men jag har fått igång en fungerande miljö nu med CooCox IDE och GCC-toolchain, tycks fungera bra. :)



Men jag tar gärna emot lästips kring själva processorn och programmeringen!

Funderar på att skaffa mig "The Definite Guide to the ARM Cortex-M3", även om jag helst inte skulle lägga mer pengar på detta just för tillfället.
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: Komma igång med ARM Cortex M3-utveckling

Inlägg av SvenW »

Med CooCox IDE har du kanske det du behöver.
- Fungerar openocd och att bränna flashminnet ?
- Finns startup-kod som innehåller avrottsvektorerna...
- Finns STM32F10x_StdPeriph_Lib_V3.4.0 eller version V3.5.0
Då är det nog bara att köra igång. Det skall gå rätt smidigt om inget saknas.
STM32F10x_StdPeriph_Lib_... är dock lite dåligt kommenterat och inte
helt lättolkat i början. De använder inte alltid samma språkbruk som i
manualen för processorn.
Användarvisningsbild
Klas-Kenny
Inlägg: 11832
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Komma igång med ARM Cortex M3-utveckling

Inlägg av Klas-Kenny »

- Fungerar openocd och att bränna flashminnet ?
Jodå, det verkar fungera bra. Att köra in programmet i processorn är inga problem och Debuggingen verkar fungera (Det lilla jag testat).

- Finns startup-kod som innehåller avrottsvektorerna...
Det verkar det göra, ja. Har fått in en fil som heter startup_stm32f10x_md.c som innehåller massa om IRQ, stack-config mm. Jag antar att det är det du menar.

- Finns STM32F10x_StdPeriph_Lib_V3.4.0 eller version V3.5.0
V3.4.0 finns med i Repositoryn så jag kan inkludera den, japp.


Än så länge har jag inte lyckats göra mer än att läsa av en ingång och att toggla en lysdiod för varje gång ingången går hög, försöker just nu få igång UART men det går lite knackigt. Men det tar klart en stund att komma in i det hela. :)
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: Komma igång med ARM Cortex M3-utveckling

Inlägg av SvenW »

Då är du igång :-)
Hittar du en bra tutorial med exempel på hur man använder perifirienheterna så rapportera gärna!
Kommunikationskretsar som SPI, USART, I2C m.fl. kan vara lite knepiga att programmera IMHO.
Användarvisningsbild
Klas-Kenny
Inlägg: 11832
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Komma igång med ARM Cortex M3-utveckling

Inlägg av Klas-Kenny »

Jag måste säga att jag är lite besviken så här långt :oops:

De enda tidigare erfarenheter jag har av högnivåspråk på µC är BASIC på 8bitars PIC, där är allt sådant oerhört enkelt och det finns mycket bra manualer för allt etc.
Så jag räknade med att det skulle vara ungefär så här också (fast kanske inte riktigt så "lätt" som BASIC då det är lite väl låst), men ack så fel jag hade. Trodde även att det fanns gott om bra guider och dokumentation då det är så stort, fel där också. :humm:

Känns som att det finns pengar att tjäna om man är duktig på ARM och att skriva!
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: Komma igång med ARM Cortex M3-utveckling

Inlägg av SvenW »

Det som är lätt tenderar också att vara begränsande, eller att man är låst.
Med ARM kan man göra mycket!

Några saker att tänka på:
1. Alla periferienheter måste initieras.
2. Alla IO-portar måste initieras.
3. Man måste distribuera klockor till periferienheterna.
ex:
RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2, ENABLE);
RCC_APB2PeriphClockCmd (RCC_APB2Periph_TIM1, ENABLE);

Lycka till!
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Komma igång med ARM Cortex M3-utveckling

Inlägg av blueint »

Att man måste distribuera klockor till periferienheterna låter som en klassisk "gottcha" ;)
Användarvisningsbild
lizerdboy
Inlägg: 1610
Blev medlem: 6 oktober 2003, 22:24:12
Ort: Stockholm

Re: Komma igång med ARM Cortex M3-utveckling

Inlägg av lizerdboy »

Jag har hållit på med STM32 i mer än två år nu och jag hittar fortfarande saker som gör mig glad och överraskad.
dock så finns det saker som man önskar sig vore bättre.

Det gäller bara att komma över krönet så kommer man se fördelarna med att sätta sig in i en mer avancerad MCU.
Körde AVR och PIC innan och det var de bästa jag gjort att gå över till STM32.


Samma med att vissa klockor måste sättas på innan man linitererar funktionen, annars så sätts inte inställningarna i
registren.
många gånger man debuggat och undrat varför inte USART eller SPI registren är satta.
visar sig ofta att man enablat fel klocka eller ingen alls.
Senast redigerad av lizerdboy 4 maj 2012, 19:31:53, redigerad totalt 1 gång.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Komma igång med ARM Cortex M3-utveckling

Inlägg av blueint »

Således måste man då slå på rätt klocksignal, initiera periferienheten, initiera I/O-porten. I den ordningen?
Användarvisningsbild
lizerdboy
Inlägg: 1610
Blev medlem: 6 oktober 2003, 22:24:12
Ort: Stockholm

Re: Komma igång med ARM Cortex M3-utveckling

Inlägg av lizerdboy »

är inte hundra på vilka som funkar på de sättet, men USART och SPI har jag för mig funkar på så sätt
att man måste initiera klockan först innan man sätter någon inställning till dess register
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Komma igång med ARM Cortex M3-utveckling

Inlägg av Micke_s »

Alla perferienheter har egen klocka på stm32, sätter man dom inte så blir det inget av läsning och skrivning.
En sak som kan göra en konfuderad är DMA och sleep. Ram/flash kan man välja om man ska klocka i sleep eller ej.
Har hållt på 5år med STM32 inom jobbet.
Användarvisningsbild
Klas-Kenny
Inlägg: 11832
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Komma igång med ARM Cortex M3-utveckling

Inlägg av Klas-Kenny »

Jag passar på att fråga här om en sak jag inte förstår..

När jag ska initiera en periferienhet, tex. GPIO i det här fallet så måste jag i början av koden skriva:

GPIO_InitTypeDef GPIO_InitStruct;

Och sedan använda GPIO_InitStruct (Dock kan jag döpa den till vad jag vill så länge jag håller det namnet överallt) när jag väljer de olika värdena tex. GPIO_InitStruct.GPIO_Mode etc.

Det jag undrar är, vad gör egentligen den kodraden?
Varför kan jag inte lika gärna använda GPIO_InitTypeDef.GPIO_Mode?


Edit: Efter samarbete med en bekant som är duktig på C tillsammans med dokumentationen så kom vi på hur det låt till, trevligt. :)
Skriv svar