STM32F407(STM32F4-DISCOVERY) - Niet-standaard aanpak - Basisontwerp

Er zijn lange tijd, zelfs heel lang, geen nieuwe artikelen over ons artikel verschenen, dus het is tijd om bij te praten 😉 Vandaag beginnen we met het bestuderen van de STM32F4. En waarschijnlijk zullen we beginnen met het maken van een nieuw project voor deze controllers, hoewel ik er eerlijk gezegd geen artikel over wilde schrijven, omdat nieuw project hier wordt het in principe op dezelfde manier gemaakt als voor STM32F103 (). Maar het komt nog steeds voor dat er problemen optreden met de STM32F4, dus laten we dit proces toch in detail bekijken)

Dus laten we Keil lanceren, een nieuw project creëren - Project -> Nieuw uVision-project. We slaan het nieuwe project op in een map en vervolgens wordt ons gevraagd de microcontroller te selecteren die we willen gebruiken. Nou, laten we kiezen, laat het STM32F407VG zijn:

Klaar, klik in het dialoogvenster dat verschijnt op "Ja" en het eerste bestand wordt aan ons project toegevoegd - startup_stm32f4xx.s. Net als voorheen zullen we bibliotheken gebruiken CMSIS En Standaard perifere bibliotheek, maar uiteraard al voor STM32F4xx-controllers. Je moet ze dus downloaden en toevoegen benodigde bestanden naar ons nog lege project. Ik heb er trouwens al meer dan eens van gehoord verschillende mensen, dat er enkele “verkeerde” bibliotheken voor F4 zijn, en dat zelfs het eenvoudigste project niet is gebouwd. Zelf ben ik dit nog niet tegengekomen, hier zijn echter de geteste bibliotheken die ik zelf gebruik:

Dus we hebben het gedownload, alles is klaar, nu voegen we de bestanden toe aan het project. Op de afbeelding ziet u wat u nodig heeft:

Welnu, de voorbereiding is voltooid, laten we nu een nieuw .c-bestand maken, dat onze code zal bevatten. Laten we naar gaan Bestand->Nieuw, geopend in Keil leeg bestand, klik Bestand->Opslaan als en sla deze bijvoorbeeld op onder de naam test.c. Vergeet bij het opslaan niet de bestandsextensie (.c) op te geven. Het bestand is gemaakt, geweldig, maar we moeten het ook aan ons project toevoegen. Nou ja, eigenlijk is er niets ingewikkelds aan 😉 Laten we een leeg testprogramma in dit bestand schrijven:

#include "stm32f4xx.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h" /*******************************************************************/ int main() (terwijl (1) ( __NOP() ; ) ) /*******************************************************************/

Bijna alles is klaar, het enige dat overblijft is kijken naar de projectinstellingen - Project->Opties voor doel... Er wordt een venster geopend met veel tabbladen, we zijn hier slechts in een paar geïnteresseerd. Open het tabblad C/C++ en in het veld Define schrijven we:

Nou ja, in het veld u moet paden toevoegen aan absoluut alle bestanden die in het project zijn opgenomen. Nadat u deze stap hebt voltooid, kunt u op F7 (Build) drukken en het project zal zonder fouten of waarschuwingen worden gebouwd. Zoals je kunt zien, niets ingewikkelds)

Maar over het algemeen doe ik de dingen persoonlijk een beetje anders. Kijk naar het nadeel van deze aanpak. Dus we hebben ergens de CMSIS- en SPL-bibliotheken gedownload, bestanden uit deze mappen toegevoegd, de paden naar de bestanden opgeschreven, alles is cool. MAAR! Het project zal niet op een andere computer worden gebouwd, omdat de paden allemaal absoluut zijn, dat wil zeggen dat ze ernaar verwijzen specifieke mappen op uw computer. En op een andere machine zul je de stappen daadwerkelijk opnieuw moeten uitvoeren om een ​​nieuw project te maken. Dit is een groot minpunt. Dus ik creëer meestal aparte map voor een nieuw project maak ik daarin submappen voor CMSIS, SPL en andere gebruikte bibliotheken en plaats ik alle bestanden die ik nodig heb in elk specifiek project in deze mappen. Laten we bijvoorbeeld de map STM32F4_Test maken voor ons nieuwe project en de volgende mappen daarin:

Ik heb alles in de mappen CMSIS en SPL geplaatst benodigde bestanden, die we hebben toegevoegd bij het maken van het project aan het begin van het artikel. Nu starten we Keil, maken een nieuw project en slaan het op in onze Project-submap, zodat alle projectbestanden op één plek staan ​​en geen chaos creëren)

Het project is gemaakt en nu voegen we, net als voorheen, eenvoudig alle bestanden uit de mappen STM32F4_CMSIS en STM32F4_SPL eraan toe. In de map Source plaatsen we ons test.c-bestand met functie hoofd() en we voegen het ook toe aan het project. Het enige dat overblijft is het configureren van de instellingen =) Alles is hetzelfde - in het definieerveld schrijven we:

USE_STDPERIPH_DRIVER,STM32F4XX



We monteren het project - er zijn geen fouten, de vlucht is normaal! In principe hebben we uiteindelijk hetzelfde gekregen, maar nu wordt het project zonder problemen onmiddellijk op een andere computer samengesteld, en dit is erg handig en nuttig) Absoluut alle projectbestanden bevinden zich nu in de buurt, in dezelfde map, en de paden zijn relatief geworden en hoeven niet veranderd te worden.
Dat is alles, eigenlijk gaan we in de nabije toekomst iets doen om de STM32F4 te programmeren, zeker, dus tot snel!;)

Volledig project uit voorbeeldartikel -

In plaats van een voorwoord

Hallo! Vandaag ben ik begonnen met het publiceren van een reeks artikelen over STM32F4-programmering. De cursus zal op een training lijken video-tutorials met korte beschrijvingen en broncodes voor lessen .

Voorwoord

Rond het voorjaar van 2015 besloot ik, na veel interne tegenspraak in mijn ziel, om de STM32F4 te gaan programmeren. Waarom meteen STM32F4? Deze lijn is, zo niet het vlaggenschip MK van de STM32-familie, dan zeker een slimme, serieuze en goedkope oplossing. Soldeerbare behuizing, zelfs thuis en de aanwezigheid van een groot aantal mogelijkheden, zowel van de randapparatuur als van de ALU. STM32F4 is een Cortex-M4, die een directe opvolger is van Cortex-M3 (STM32-L1, F1, F2) en daar vooral in de kern van verschilt door de aanwezigheid van DSP (digitale signaal processor) en FPU (floating point unit).

Waarom is deze cursus interessant?

IN RuNet veel verschillende cursussen over STM32-programmeren. De community kan op dit onderwerp als klant voor mode fungeren EasyElectronics.ru. Daar kan veel nuttige informatie uit worden gehaald. Forum van deze hulpbron ook erg handig. Ik heb zelf veel interessante dingen uit deze bron geleerd. Deze cursus zal interessant zijn voor degenen die, zoals ik, beginnen met programmeren STM32F4 niet helemaal opnieuw, maar vanaf de basis van 8-bit MK's. Ik zal mijn gedachten en ontwikkelingen tijdens het studeren beschrijven STM32F4 en zijn programmering.

Wat zullen we gebruiken?

Dit artikel beschrijft"STM32CubeMX - een geavanceerde projectgenerator voor STM32." Dit is precies wat we zullen gebruiken. HAL uit ST is een bibliotheek. Zeer vergelijkbaar met SPL. Daarom kunnen voorbeelden die in SPL zijn geschreven eenvoudig worden overgezet naar HAL. Hoewel er behoorlijke verschillen zijn in de functies zelf. STM32Kubus Hiermee kunt u een kant-en-klaar project genereren met functies voor het initialiseren van geselecteerde randapparatuur voor sommige commerciële en niet alleen IDE's. Dit zijn IAR, Keil, TrueStudio, System Workbench voor STM32 (SW4STM32). Projecten voor IAR, Keil wordt turnkey gegenereerd, maar met SW4STM32 is niet in orde zacht. Maar wanhoop niet. Voor mezelf heb ik gekozen Systeemwerkbank voor STM32 (SW4STM32). En alle lessen zullen op deze IDE worden gebouwd.

Oefening. Begin. Installatie van STM32CubeMX.

Laten we weggaan. ST-website, naar de STM32CubeMX-pagina STM32Cube initialisatiecodegenerator (UM1718) en download de software STM32CubeMX. Installatie is geen probleem. Na de installatie moet u de benodigde bibliotheken installeren onder verschillende soorten kernen. Dit doet u op het tabblad Help -> Nieuwe bibliotheken installeren, vink het vereiste Firmware Packege For Family STM32F4-item aan en klik op de knop Nu installeren. Na het download- en uitpakproces, STM32CubeMX is klaar voor gebruik.

Oefening. Voortzetting. Installatie Systeemwerkbank voor STM32 (SW4STM32).

Er is hier ook niets bovennatuurlijks. We gaan naar de website, registreren, downloaden de distributie. Wij installeren. Alles is behoorlijk banaal. Ik heb deze distributie: Nieuwste Windows 7 32-bits installatieprogramma (versie v1.3, bijgewerkt op vrijdag 24 juli 2015 om 12:52:28 CEST), ik weet niet hoe dit verschilt van de 64-bits versie. Maar ze mogen niet kritisch zijn. Ik heb deze versie geïnstalleerd op zowel XP SP3 als 8.1

Oefening. Einde. Een kubusproject importeren in SW4STM32.

Het staat op YouTube educatieve video voor projectimport. Ook wij zullen de goede weg bewandelen. Bekijk hieronder de video-tutorial voor dit bericht:

STM32F4 programmeerlessen. Les nr. 0. Inleidend. Beschrijving. De IDE installeren. VIDEO.

ZY we tellen opmerkingen, vragen en suggesties op

Vanuit dit artikel begin ik te geven praktische voorbeelden. En de eerste daarvan zal de creatie van een basisproject zijn. Waarom doe ik dit? Het antwoord is simpel: om de montage van het programma dat ik nodig heb te vereenvoudigen. De structuur van dit project is ontworpen om volledig onafhankelijk te zijn van andere headerbestanden en bibliotheken, dus het is redelijk draagbaar.

Er moet ook worden opgemerkt dat de oplossing die ik heb gekozen twee grote voordelen heeft:

  1. We breiden het project uit, d.w.z. je kunt er eenvoudig eenvoudige code of hele bibliotheken aan toevoegen.
  2. Door het minimumaantal bestanden te wijzigen, kunt u het MK-model wijzigen (iets later zal ik beter aan dit punt werken, zodat u MK-families kunt wijzigen).
Laten we dit project eens nader bekijken, evenals enkele technische aspecten.

Maakbestand

Het make-systeem wordt gebruikt om het bouwen, opruimen en laden van het project te beheren. Door de link te volgen kun je ontdekken hoe het werkt, maar ik zal me concentreren op enkele kenmerken van mijn versie van het bouwsysteem:

    # Projecthoofdpad

    ROOTDIR = $(werkelijkpad. ) - deze optie geeft aan wat als de hoofdmap van het project wordt beschouwd, het is erg handig om geen wolk te creëren in elke link van de projecthiërarchie relatieve paden. Wordt gebruikt om headerbestanden op te nemen en bibliotheekpaden op te geven.
  1. # Inclusief algemene configuratie

    neem lib/make/Makefile.common op- inclusief algemeen configuratiebestand project (hieronder zal ik de structuur ervan wat gedetailleerder beschrijven). Hiermee kunt u snel globale vlaggen en paden toevoegen.
  2. # Libs maken

    lib:

    $(MAKE ) -C lib ROOTDIR = $(ROOTDIR ) - bij het bouwen van bibliotheken geef ik het hoofdpad van het project door aan alle onderliggende Makefiles.
  3. # Regels voor het schrijven van firmware naar mcu

    schrijf: firmware.bin

    qstlink2 -cewV ./firmware.bin- voor opname gebruik ik de QSTLink-applicatie waarover ik het had in .
De rest van de code in deze Makefile is vrij standaard. Daarom zal ik ze niet beschrijven, maar in de reacties sta ik klaar om alle vragen hierover te beantwoorden, evenals andere functies die u interesseren.

stm32f4xxxg_flash.lg

Script voor het bouwen van een binair beeld van een programma met export van absolute adressen van regio's voor initialisatie. Gekopieerd van het standaard build-script, met enkele toegevoegde opties, evenals wijzigingen in actieve gebieden.

Algemene projectheaderbestanden. Eigenlijk naast het headerbestand voor elk bestand broncode in src zijn er mappen die projectspecifieke definities bevatten. Hier korte beschrijving inhoud van deze directoryx:

  1. alle :

    $(MAKE ) -C std_periph - om de bibliotheek te bouwen
  2. schoon:

    $(MAKE ) clean -C std_periph - om het op te schonen
Dat wil zeggen dat in dit bestand in feite slechts 2 regels code worden toegevoegd voor elke nieuwe bibliotheek, wat de toevoeging van nieuwe bibliotheken aan het project vereenvoudigt.

In deze map bevindt zich ook std_periph/ - de bibliotheek standaard randapparatuur, waar ik het in het volgende artikel over zal hebben.

  • reset_handler.c - reset vectorhandler, naast het aanroepen van de work() functie - /* roep werkcode */ work (); , fungeert als initialisator voor projectvariabelen, zowel beschreven als gedefinieerd: uint32_t * src; uint32_t * bestemming; src = &__tekst_end; beste = &__data_start; if (src != dest) terwijl (dest< &__data_end) *(dest++) = *(src++); dest = &__bss_start; while (dest < &__bss_end) *(dest++) = 0;
  • reset_handler (ongeldig) __attribute__ ((zwak, alias ("default_handler" )));
  • work.c - de werkcode van het project, ook wel de hoofdlus genoemd. Momenteel is er alleen eindeloze lus: /* hoofdwerkfunctie */ void work(void) ( /* oneindige lus */ while (1); )
Hiermee rond ik de beschrijving van de belangrijkste opties van het basisproject af. In de volgende artikelen zal ik elk onderdeel ervan in detail beschrijven.

Sommige mensen houden van taarten, anderen niet.

En dus is er debuggen van stm32f429, enz. We speelden de demo's, zagen dat de beelden draaiden, de knoppen op het scherm werden ingedrukt en gezichten trokken. Dit is cool, maar laten we beginnen met een leeg project.

Het project wordt over het algemeen op precies dezelfde manier gemaakt als voor .

Maar als de sleutel deze controller helemaal niet ondersteunt (deze is niet bijgewerkt), wordt alles een beetje lastiger =)
Laten we eerst het archief downloaden met bibliotheken en voorbeelden van programma's voor het bord - er valt veel uit te halen.

En laten we eerst stm32f4xx.h uit CMSIS halen. In Keil is dit bestand, als het niet helemaal opnieuw is geïnstalleerd, het laatste, erg oud. Om te beginnen is dit natuurlijk voldoende, maar met het scherm kan niets worden gedaan, dergelijke randapparatuur is zojuist verschenen.
Neem het bestand in de map STM32F429I-Discovery_FW_V1.0.0\Bibliotheken\CMSIS\Apparaat\ST\STM32F4xx\Include en verplaats het naar een vergelijkbare map in Kale Keil\ARM\INC\ST\STM32F4xx. Ik heb nieuw bestand het bleek 100 kb meer te zijn.

Startups voor nieuwe 4xx-series vind je in de folder STM32F429I-Discovery_FW_V1.0.0\Bibliotheken\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm. Er zijn veel verschillende:
startup_stm32f4xx.s
startup_stm32f40_41xxx.s
startup_stm32f40xx.s
startup_stm32f401xx.s
startup_stm32f427_437xx.s
startup_stm32f427x.s
startup_stm32f429_439xx.s

Dat laatste hebben we uiteraard nodig. Daar kunt u in de bovenstaande map de bijgewerkte versie nemen systeem_stm32f4xx.c. Maar geloof het niet, het is afgestemd op een kristalfrequentie van 25 MHz. Het is beter om er zelf een te maken met behulp van een generator (als je die vindt, ik heb hem niet gevonden) of uit een map te halen STM32F429I-Discovery_FW_V1.0.0\Projecten\Demonstratie\Core\Devices\STM32F4xx.

Het zou leuk zijn om een ​​registerbeschrijvingsbestand voor System Viewer toe te voegen.
Download eerst de svd-bestanden van de arm-website, bestand STM32F429x.svd: CMSIS (tabblad CMSIS-SVD, registratie vereist). Selecteer daar de gewenste serie, vink het vakje aan en klik op Downloaden.
Vervolgens moet het bestand worden geconverteerd naar een vorm die Keil kan begrijpen met behulp van het hulpprogramma SVDConv.exe, dat zich in de map bevindt STM32F429I-Discovery_FW_V1.0.0\Bibliotheken\CMSIS\SVD. Maar voordat u de opdracht uitvoert, moet u de Keil-compiler SfrCC2.Exe kopiëren van de map Keil\UV4 naar de map waar de conversie plaatsvindt. En uiteindelijk:
SVDConv STM32F429x.svd --generate=sfr

Laten we het bestand pakken STM32F429x.SFR.

Geweldig. Laten we een project maken op basis van een vergelijkbare controller en vervolgens de parameters aanpassen aan de parameters die we nodig hebben. Laten we een leeg project maken zoals voor stm32f4discovery, maar zonder een opstartbestand (we hebben nog een ander bestand nodig).
1. Project -> Nieuw project.
Selecteer een map en noem deze project. Redden.
2. Ze bieden aan om een ​​microcontroller te kiezen. Oké.
In de ST-map zoeken we naar een aantal STM32F4xx en selecteren (of de standaard Cortex-M4). Als het er niet is, update dan Cale, want zonder ondersteuning voor de CM4-kernel is er niets bijzonders te vangen. Ik heb gekozen voor stm32f407vg.
3. Ze stellen voor om het naar het startup-project te kopiëren - wat maakt het uit, het past niet helemaal.

We kunnen mappen toewijzen waar objecten moeten worden geplaatst (Opties->Uitvoer->Selecteer map voor objecten) en lijsten (Opties->Lijst->Selecteer map voor lijsten).
Laten we de geheugenlimieten wijzigen (zie het gedeelte Geheugentoewijzing in het gegevensblad). ROM-grootte 0x200000 (2 MB), snelle RAM1 op adres 0x10000000 grootte 0x10000, normaal RAM2 op adres 0x20000000 grootte 0x30000 (er zijn drie verschillende, maar wat is het verschil tot nu toe). De geheugenkaart is genomen in sectie 5 “Geheugentoewijzing”.

Op het tabblad Debug selecteert u ST-Link Debugger (selecteer in de eigenschappen het SW-protocol). Selecteer op het tabblad Hulpprogramma's ook ST-Link Debugger en klik op Instellingen. Daar voegen we het firmware-algoritme toe: Toevoegen -> STM32F4xx 1Mb Flash (als je 2Mb hebt, dan super). Om te beginnen is dit voldoende, en dan zul je blijkbaar de sleutel moeten bijwerken of een groter algoritme voor flash moeten stelen.

En laten we een definitie toevoegen voor het selecteren van een controller (de bibliotheken hebben dit blijkbaar nodig) op het tabblad C/C++: STM32F429_439xx.

Sla het project op en sluit het voorlopig. Open het project (.uvproj) in teksteditor en repareer al het andere:
Apparaat: STM32F429ZI;
CPU: IRAM(0x20000000-0x2002FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x81FFFFF) KLOK(8000000) CPUTYPE("Cortex-M4") FPU2
Opstartbestand: "Startup\ST\STM32F4xx\startup_stm32f429_439xx.s" ("STM32F429 opstartcode")
SDF-bestand: SFD\ST\STM32F4xx\STM32F429x.sfr
OCR_RVCT4.Grootte: 0x200000

Over het algemeen kunnen we het project openen en bestanden toevoegen:
startup_stm32f429_439xx.s
systeem_stm32f4xx.c
hoofd.c

Dat is alles, we compileren en krijgen een leeg samengesteld project, van waaruit je de reis kunt beginnen om de fijne kneepjes van de nieuwe kunst te begrijpen.


Het artikel is over het algemeen geschreven als herinnering aan wat er moet gebeuren om een ​​schoon, gecompileerd project op STM32F10x-stenen te maken.

Laten we beginnen met het feit dat we Keil zelf nodig hebben, degenen die dat hebben gedaan - goed gedaan, degenen die dat niet hebben gedaan -. Om met elke serie controllers te werken, en er zijn er zoveel -


je hebt je eigen set bibliotheken nodig, het mooie is dat ze erin zitten publieke toegang rechtstreeks op de pagina van een specifieke steen op de ST-website, aangezien we een project aan het schrijven zijn voor STM32F100RB, volgt u gewoon de link naar ST, gaat u vervolgens naar het tabblad Ontwerpbronnen, zoekt u naar de kolom Gerelateerde tools en software en in het veld Beschrijving , dat wil zeggen, Beschrijving, je zou iets soortgelijks moeten zien: STM32F10x standaard randapparatuurbibliotheek. Dit is het bestand dat we downloaden. Nou, voor de lui: download gewoon vanaf hier (downloads: 363).

Overigens geeft de x in de naam STM32F10x aan dat de bibliotheken geschikt zijn voor controllers met een favoriete numerieke aanduiding ervoor in de plaats. Er zijn veel dingen in het archief noodzakelijke voorbeelden en nog meer afval, we hebben de map Bibliotheken nodig - daar ligt de hond begraven. Als je serieus met stenen gaat werken, moet je dit onthouden minimale lijst bestanden die nodig zijn om het project uit te voeren. Laten we een aparte map maken en deze bijvoorbeeld STM32F10x_Clear noemen en daarin een map met de naam CMSIS. Nu zullen we de bestanden die we nodig hebben overbrengen vanuit de map Bibliotheken. Het is heel belangrijk dat volledige weg er bestond geen Cyrillisch alfabet!

STM32F10x_StdPeriph_Lib_V3.5.0\Bibliotheken\CMSIS\CM3\CoreSupport\core_cm3.c

STM32F10x_StdPeriph_Lib_V3.5.0\Bibliotheken\CMSIS\CM3\CoreSupport\core_cm3.h

STM32F10x_StdPeriph_Lib_V3.5.0\Bibliotheken\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h

STM32F10x_StdPeriph_Lib_V3.5.0\Bibliotheken\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c

STM32F10x_StdPeriph_Lib_V3.5.0\Bibliotheken\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.h

Je hebt ook het bestand stm32f10x_conf.h - STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\ nodig en haalt het uit elk project. Je kunt het gewoon in de zoekopdracht typen. Meestal haalt Keil het uit zijn mappen, maar het komt vaak voor dat er door ongekende magnetische stormen één geluksvogel is die het apart moet aansluiten, wij doen dat meteen.

Het geheel zou er ongeveer zo uit moeten zien

Nu maken we in de root van STM32F10x_Clear een tweede map met de naam SPL (Standard Peripheral Library) en kopiëren we daar de mappen inc en src, die zich in

STM32F10x_StdPeriph_Lib_V3.5.0\Bibliotheken\STM32F10x_StdPeriph_Driver\<--------

Als gevolg hiervan zou u een map STM32F10x_Clear moeten hebben waarin de mappen CMSIS en SPL zich bevinden.

De CMSIS-map bevat de belangrijkste bestanden en de SPL bevat kant-en-klare randbibliotheken.

Kort over elk van hen:

Core_cm3 - M3-kernbeschrijvingsbestanden

Stm32f10x.h - beschrijvingsbestand voor randapparatuur

System_stm32f10x - initialisatiebestand

De compiler is klaar, de bibliotheken zijn voorbereid, het enige dat nog rest is alles samenvoegen.

De eerste stap is het maken van een nieuw project in Keil. We zoeken naar het menu Project, in de vervolgkeuzelijst - Nieuw uVision-project, geef het project een naam en sla het op. Verder zoeken we via zoeken of via het boommenu en komen onze steen tegen, namelijk STM32F100RB, dan verschijnt er een bericht over het kopiëren van het opstartbestand - er zijn stapelinitialisatiebestanden en interrupt-vectortabellen, in het algemeen de noodzakelijke dingen, klik OK. Wij zien het volgende beeld

Nu werken we met het gebied met verbonden bestanden - hier is het

Onze verbonden opstartbestanden zijn er al, laten we nu de rest verbinden. Laten we voor de duidelijkheid de naam van SourceGroup1 wijzigen in Startup.

Klik met de rechtermuisknop op Doel1 en klik op Groep toevoegen

We creëren dus nog 3 groepen, die we CMSIS, SPL, Source noemen. Door te dubbelklikken op de groepsnaam openen we een verkenner om bestanden aan de groep te koppelen, in CMSIS voegen we alle bestanden uit de map STM32F10x_Clear\CMSIS toe, aan de SPL-groep uit de map STM32F10x_Clear\SPL alle bestanden van inc en src. In totaal blijft er een lege map van de Brongroep over - onze hoofdmap zal daar worden opgeslagen, om deze Bestand-Nieuw te maken, na Bestand-Opslaan als - we slaan een bestand op met de naam main.c in de map met ons project, nu gaan we voeg het toe via de Brongroepverkenner. Alles is met elkaar verbonden, het lijkt erop dat je bier kunt drinken... maar nu is dat niet het geval.

Allereerst gaan we naar onze map STM32F10x_Clear en in de eigenschappen in attributen schakelen we het selectievakje Alleen-lezen uit, dit is nodig om de inhoud van de verbonden bestanden te wijzigen, omdat er in het Keil-bestandsvenster een sleutel tegenover de bestanden staat en doe wat je wilt. Ga je gang, klik naar het bestand stm32f10x.h in CMSIS en zoek naar de regel

#if !gedefinieerd (STM32F10X_LD) && !gedefinieerd (STM32F10X_LD_VL) && !gedefinieerd (STM32F10X_MD) && !gedefinieerd (STM32F10X_MD_VL) && !gedefinieerd (STM32F10X_HD) && !gedefinieerd (STM32F10X_HD_VL) && !gedefinieerd (STM32F1 0X_XL) && !gedefinieerd (STM32F10X_CL) / * #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */ /* #define STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */ /* #define STM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density devices */ /* #define STM32F10X_MD_VL */ /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */ /* #define STM32F10X_HD */ /*!< STM32F10X_HD: STM32 High density devices */ /* #define STM32F10X_HD_VL */ /*!< STM32F10X_HD_VL: STM32 High density value line devices */ /* #define STM32F10X_XL */ /*!< STM32F10X_XL: STM32 XL-density devices */ /* #define STM32F10X_CL */ /*!< STM32F10X_CL: STM32 Connectivity line devices */ #endif

Dit is een richtlijn voor het kiezen van een steen, je moet dit doen, anders monteer je het project niet. Omdat we STM32 Value Line-apparaten met gemiddelde dichtheid hebben, moeten we het commentaar verwijderen door de /* ervoor te verwijderen.

Volgende regel

#if !gedefinieerd USE_STDPERIPH_DRIVER /** * @brief Geef commentaar op de onderstaande regel als u de stuurprogramma's voor randapparatuur niet wilt gebruiken.

In dit geval worden deze stuurprogramma's niet meegeleverd en wordt de applicatiecode gebaseerd op directe toegang tot registers van randapparatuur */ /*#define USE_STDPERIPH_DRIVER*/ #endif

Verwijder de opmerking op de regel - #define USE_STDPERIPH_DRIVER

Nu de compiler instellen. Klik met de rechtermuisknop op Doel1 - Opties voor Doel "Doel1". Wij zien het volgende

De secties die we nodig hebben zijn:

Uitvoer - vink het vakje aan naast HEX-bestand maken

C/C++ - in het veld Preprocessor Symbolen geven we STM32F10X_MD_VL aan - dit is wat we hebben verwijderd, en USE_STDPERIPH_DRIVER gescheiden door komma's, kijk naar het scherm

Nu moet u het pad opgeven naar de mappen van alle verbonden bestanden, dit zijn CMSIS en SPL. Klik in het veld Inclusief paden op... en vervolgens op Nieuw en voeg de mappen CMSIS, SPL/inc, SPL/src toe, het zou er zo uit moeten zien

Onthoud voor de toekomst dat u ZEKER moet zijn als u bibliotheken van derden of andere bestanden aansluit! voeg ze toe aan dit menu, anders verwacht je fouten.