15
M1-Archi 2016-2017 Page 1 ___________________________________________________________________________ TP n°1 : Architecture des systèmes à microprocesseur ___________________________________________________________________________ Objectifs de la séance -Prise en main de l’environnement de développement µVision de Kiel -Compréhension des fichiers sources nécessaires à la programmation du microcontrôleur -Utilisation du debugger, visualisation des registres et des mémoires ___________________________________________________________________________ Matériel requis : -Une plateforme nucleo-board STM32F401RE par binôme ___________________________________________________________________________ Organisation de la séance : 1) Analyse des fichiers 2) Utilisation du debugger 3) Ajout de fonctionnalités 4) Conclusion / Bilan Tout au long de ce TP, des questions vous sont posées. Prenez le temps d’y répondre et de prendre des notes. ___________________________________________________________________________ I. Introduction On se propose d’utiliser l’outil STM32CubeMX. Cet utilitaire permet de configurer graphiquement le microcontrôleur. On y spécifie notamment les sources d’horloge, les périphériques que l’on souhaite utiliser, les sources interruptions, etc. 1. Lancer STM32CubeMX

TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

  • Upload
    others

  • View
    31

  • Download
    0

Embed Size (px)

Citation preview

Page 1: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page1

___________________________________________________________________________

TPn°1:Architecturedessystèmesàmicroprocesseur___________________________________________________________________________

Objectifsdelaséance

-Priseenmaindel’environnementdedéveloppementµVisiondeKiel-Compréhensiondesfichierssourcesnécessairesàlaprogrammationdumicrocontrôleur-Utilisationdudebugger,visualisationdesregistresetdesmémoires

___________________________________________________________________________

Matérielrequis: -Uneplateformenucleo-boardSTM32F401REparbinôme___________________________________________________________________________Organisationdelaséance:

1) Analysedesfichiers2) Utilisationdudebugger3) Ajoutdefonctionnalités4) Conclusion/Bilan

ToutaulongdeceTP,desquestionsvoussontposées.Prenezletempsd’yrépondreetdeprendredesnotes.___________________________________________________________________________I. Introduction

Onseproposed’utiliserl’outilSTM32CubeMX.Cetutilitairepermetdeconfigurergraphiquementlemicrocontrôleur.Onyspécifienotammentlessourcesd’horloge,lespériphériquesquel’onsouhaiteutiliser,lessourcesinterruptions,etc.

1. LancerSTM32CubeMX

Page 2: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page2

2. Créerunnouveauprojet.Chercheretsélectionnerensuitelaplateformequel’onsouhaiteutiliser(Nucleo64avecunMCUSTM32F401RETx)puisOK.

Vousarrivezsurl’écranprincipaledeconfigurationduMCU.

Page 3: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page3

3. Faireuneremiseàzérodesbrochesvial’ongletPinout/ClearPinouts

4. VouspouvezobserverdanslafenêtrePinout,l’ensembledespériphériquesquipeuventêtreutilisésainsiquelesOStemps-réelsetautresfonctionnalitéslogicielles.

5. AcôtédePinoutsetrouveclockconfiguration.

Danscettefenêtre,vouspouvezgraphiquementdéfinirlessourcesd’horlogepourconfigurerl’horlogeprincipale(SYSCLK)dumicrocontrôleur.Vousnoterezqu’ilexisteplusieursentréespossibles(HSI/HSEetPLLCLK).End’autrestermes,vouspouvezchoisirentreuneclockinterne(HSI-16MHz),uneclockexterne

Page 4: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page4

(HSE–4à26MHz)etunehorlogegénéréeparunePLL(PLLCLK).Deplus,vousremarquerezquel’horlogedesbusetdespériphériquesdépendentdeSYSCLK,hormisl’horlogepourl’USBainsiquepourl’audio(I2Sclock).

Nous allons choisir une source d’horloge externe et générer une horlogesystème SYSCLK à 84MHz. Nous avons vu aussi qu’il existe un registrespécifiquedecontrôleauseindumicrocontrôleurpermettantdeconfigurerlasourced’horlogeprincipale.C’estleregistreRCC(ResetandClockControl).Dans la fenêtrePinout, indiquer comme source d’horloge HSE (High SpeedClock)quelasourced’horlogeprovientduCrystal/CeramicResonator.

Vouspouvezobserverdanslafenêtreclockconfigurationqu’unesourced’horlogeà8MHzaétédéfinie.Ilresteàconfigurerlesmultiplexeursetlediviseur.Enmodifiantlavaleurdupré-scaleurMde16à8,vousdevezobtenirunehorlogeSYSCLKà84MHzcommeindiquésurlafiguresuivante:

Page 5: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page5

6. Lecontrôleurderesetetd’horloge(RCC)permetaussidegérerlesdifférentessourcesdereset:

o Systemreset(remiseàzérodesregistresviaNRSTpin)o Powerreset,o Backupdomainreset.

Il est nécessaire d’autoriser les interruptions au niveau du contrôleurd’interruption NVIC comme indiqué sur la figure suivante, accessible via lafenêtreconfiguration:

ApplyandOK.

Page 6: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page6

Toujoursdanslafenêtreconfiguration,cliquersurRCC.SurVddVoltage,vouspouvezremarquerquel’onpeutdirectementajusterlatensiond’alimentationdumicrocontrôleur(1.71<Vdd<3.6V).DanslesousongletNVICSettings,toujoursdanslemenuRCC,onpeutremarquerquelesinterruptionsglobalesontétéprisesencompte(vialesactionsaupoint6).

7. OnsouhaiteaussipouvoircontrôlerlaLED.Celle-ciestconnectéeauPortAd’E/S(GPIOA)etàlabroche5(PA5).VouspouvezlacherchervialeFind:

IlfautdoncladéfinirentantqueGPIO_Outputcommesuit:

VousnoterezquelabrochePA5possèdeplusieursfonctionnalités(pouvantserviràd’autrespériphériquescommeleTIMER,l’ADC,laliaisonSPI…).Unefoisconfiguré,retournerdanslafenêtreconfiguration,puisGPIO.Vousnoterezcommentaétéconfigurélabroche(push-pull…)

Page 7: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page7

8. GénérationducodeetduprojetpourKeiluVisionC’estladernièreétapedeconfigurationduprojet.AllerdansProject/Settings.

DansProjectNameindiquerlenomdevotreprojet.DansProjectlocation,indiquerlerépertoiredevotreprojetoùseragénérerlecode.DansToolchain/IDE,indiquerMDK-ARMv5.DansLinkerSettings,vouspouvezobserverlatailledeszonesdeHeapetdeStack(Pile).Lazone‘Heap’estunemémoireallouéepourstockerdesvariablescrééesdynamiquementaucoursdel’exécution.LaPileestunemémoirespécifiquepermettantlasauvegarded’information(contenuderegistre,adressedesous-programme,…).Typiquement,sil’ondéfinitunetaillemiminalede0x200,celarevientàréserver512octetsdemémoireRAMpourlazonede‘heap’.PourlaPile,lazoneminimaleestdeuxfoisplusgrande(environ1Ko).

Page 8: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page8

Dansl’ongletsuivant,CodeGenerator,sélectionner“Copyonlythenecessarylibraryfiles”.PuisOK

Enfin,dansl’ongletProject,GenerateCode.

CliquerensuitesurOpenProjectpourouvrirleprojetgénérésousµVision.

Page 9: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page9

II. AnalysedesfichiersgénérésdansµVisiondeKiel

Avantdes’intéresseràlaprogrammationdumicrocontrôleur,onseproposed’étudierlesfichierssourcesquiontétégénérésafindebiencomprendreleursrôlesrespectifs.

DanslafenêtreProject,vouspouvezobserverplusieursrépertoires: Application/MDK-ARM Drivers/CMSIS Drivers/STM32F4xx_HAL_Driver Application/UserLerépertoireApplication/MDK–ARMcontientunfichiernomméstartup_stm32F401xe.s.Question:

-Selonvousàquoisertcefichier?Retrouverlesinformationssuivantes: .TailledelaPile? .Contenuàl’adresse0delatabledesvecteursd’exceptions/interruptions? -QuelleactionestréaliséelorsduresetparleReset_Handler?

Dans le répertoire Drivers/CMSIS, regarder le fichier nommé system_stm32f4xx.c. Vouspouvez observer que ce fichier contient plusieurs fonctions réalisant notammentl’initialisationduCPU,laconfigurationdel’horlogesystème(SYSCLK).Vousaureznoté,quelafonctionSystemInitestlafonctionappeléedirectementàlasuitedureset.DanslerépertoireDrivers/STM32F4xx_HAL_Driverssontprésentslesdriverspermettantlecontrôledenombreuxpériphériquesdumicroprocesseur(DMA,Timer,GPIO,…).DansledernierdossierappeléApplication/User,setrouve3fichiers. -main.c -stm32f4xx_hal_msp.c -stm32f4xx_it.cQuestion:Quecontiennentlesfichiersstm32f4xx_it.cetstm32f4xx_hal_msp.c?Ouvrerlefichierstm32f401xe.h(étendezlefichiermain.c)Question:Quecontientcefichier?Retrouverlemappingmémoire.

-AquellesadressescommenceetterminelaFLASH?laSRAM?lamémoireallouéepourlespériphériques?

Page 10: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page10

-Aquelleadressecommencelazonemémoirepourl’ADC?III. Ajoutdefonctionnalités

Commevouspouvezleremarquer,lecoden’effectueaucuntraitementspécialaprèslesétapesd’initialisationetdeconfiguration.Nousallonsdoncrajouterquelquestraitements.1) Initialisationdedeuxtableaux

a. Ecrituredelafonction

Danslefichiermain.c,réaliserunefonctionvoidinit_tab()quiréalisel’initialisationdedeuxtableauxde10entiersnonsignésaveclesvaleurssuivantes: Tab0={0,1,2,3,4,5,6,7,8,9};

Tab1={10,11,12,13,14,15,16,17,18,19};

Unefoislecodecomplété,compilervialatoucheF7oul’icône:S’ilyauneerreur,consulterlesfenêtresBuildOutputetErrorlistpoursavoird’oùelleprovientetlacorriger.Recompilerjusqu’àcequ’iln’yaitplusd’erreur.Sic’estlecas,lefichierexécutableaétécréé.Onpeutpasseràl’étapededebug.

b. DebugConnecterlaplateformevialelienUSB.Ilestpossiblequeledriverdedebugnesoitpasspécifié.Vérifierdansl’ongletFlash/ConfigureFlashTools,puisdansDebug,vérifierqueST-LinkDebuggerestbienchoisicommeindiquéparlafigureci-dessous,puisOK:

Onvamaintenants’intéresseraudebugger.Lancerlevial’ongletDebug/Start-StopDebugsession.

Page 11: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page11

Unmessageindiquantl’utilisationdelaversiond’évaluation(limitantlatailledufichierexécutable)peutapparaître.CliquersurOK.

• Lesfenêtresdevisualisation

Plusieursfenêtressontalorsvisiblescommelemontrelafiguresuivante:

o Registers->affichelecontenucourantdesregistresdumicrocontrôleur.o Disassembly->affichelecodeassembleurgénéréàpartirdevotrecodeC.o Command -> permet à l’utilisateur de rentrer des commandes lors du

debugo CallStack+locals->permetd’observerl’adressedelafonctioncourante

exécutéeainsiquelesvariableslocalesutilisées(adressesetcontenus)

Page 12: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page12

Questions: -Quelleest l’adresseduregistrePCau lancementdudebug?Dansquellemémoirevotrefonctionmaina-t-elledoncétéplacée?-Mêmequestionpourlepointeurdepile(StackPointer)?-QuecontientleregistrexPSR?

uVision est très riche en outils permettant le debug efficace d’un code. Des fenêtressupplémentairespeuventêtreajoutéesvial’ongletView.Parexemple,dansSerialWindows,onpeutobserverlesdonnéesenvoyéessurlaliaisonsérie(UART,printf).µVisiondisposeaussid’un analyseur logique (View/Analysis Windows/Logic Analyzer) permettant d’observerl’évolutiond’unsignalaucoursdutemps.Lors de l’exécution d’un programme, il peut être intéressant d’enregistrer les tracesd’exceptionsetd’évènementsquisesontproduitsdurantl’exécution(View/Trace/TraceexceptionsouEventcounters).Lorsdel’utilisationdepériphérique,touslesregistrescorrespondantspeuventêtrevisualisésviaView/SystemViewer/.

-RajouterunefenêtredevisualisationdelamémoireviaMemoryWindows/Memory1.

-TaperdanslechampAddress,lavaleurPC.è Onpeutdoncvisualiserlecontenudesregistresàleur

emplacementenmémoireainsiquepourtouteslesvariablesdel’application.Anoterquel’affichagedesdonnées(decimal,signed,unsignedint/short..)peutêtremodifiéviaunclicdroitdanslazonemémoire.

-Effectuerunenouvellerecherchepourtab0.

Questions: -Dansquellemémoiresonttab0ettab1?

Mettreunpointd’arrêtsurlaligned’appelàlafonctioninit_tab()danslefichiermain.c(encliquantsurlazonegriseàgauchedunumérodeligne).

Page 13: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page13

Onlanceensuitel’exécutionducodejusqu’àcetteligneencliquantsurF5ouvial’icônesuivante.Ondisposeaussideplusieurscommandespoureffectuerdupas-à-pas:

1)2)3)4)

NB: 1-Step->permetderentrerdanslaprochaineétaped’exécutiondelacommandeC

2-Stepover->permetdecontinuerl’exécutionjusqu’àlaprochaineligne3-Stepout->permetdesortiedelafonctioncourante4-Runcursortoline->permetdelancerl’exécutionducodejusqu’àlaligneindiquée

Avanttouteautrechose,releverlavaleurduPCetduLR.Chercheraussienmémoirel’adressedeinit_tab()etlarelever. Avantfonctioninit_tab(): PC= LR=Puisrentrerdanslafonctioninit_tab()eneffectuantunpas(icôneStepouvialatoucheF11).NoterànouveaulavaleurdePCetLR.

Aprèsentréedanslafonction PC= LR=Regarderaussidanslafenêtrecallstack+Locals(cf.fenêtreenbasàdroite),l’adresseetlecontenudelavariabled’indexdeboucle(sivousavezutiliséuneboucleforparexemple).

-Questionoptionnelle:déterminerdansquelregistredetravaileststockéelavariabled’indexdelaboucle

Onvamaintenantvérifierenpas-à-pas(icôneStepOveroutoucheF10)quel’initialisationdutableausedéroulecorrectement.Onpourravérifiersimultanémentl’évolutionducontenumémoirevialafenêtreMemory1,address=tab0outab1.Alafindelafonctioninit_tab()etavantderevenirauprogrammeprincipal,noterànouveaulesvaleursdePCetLR. Findefonctioninit_tab() PC= LR=Avancerdenouveauàl’aidedeStepOver(F10). Retourauprogrammeprincipal PC= LR=ConcluresurlefonctionnementduregistrePCetduregistreLR.Sibesoin,reprendrelesétapesprécédentesenvisualisantlecodeassembleurvialafenêtreDisassembly.(NoteBLetBXindiquedesbranchementscf.http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/CIHJJEIH.htmlpuisl’instructionset).Laremiseà0dumicrocontrôleurpeuts’effectuerviaDebug/ResetCPU.IMPORTANT:silecontenudetab0ettab1àlafindelafonctiond’initialisationnesontpascorrects,modifiervotrecodeetré-itérerledebug.

Page 14: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page14

2) Additionsdescontenusdesdeuxtableaux

Onsouhaitemaintenant faire l’additiondesdeuxtableauxtab0et tab1.Dans le fichiermain.c,décriremaintenantlafonctionadd_tab()quipermetderéaliserl’opérationsuivante: Tab1[i]=Tab0[i]+Tab1[i];Compiler et s’il n’y a pas d’erreur, lancer le debugger. Vérifier en pas à pas, le bonfonctionnementdevotreprogrammeetobserverlesrésultatsenmémoire.Pourcela,refairecommeprécédemment,placerunpointd’arrêtsurlorsdel’appelàlafonctionadd_tab()etexécuterenpasàpaslesinstructions.

3) Détectiondesommepaire

Onsouhaitemaintenantdétectersilasommeducontenudetab1estpaire.Sic’estlecas,onallumeralaledLD2.Celle-ciestconnectéephysiquementàlabroche5duportGPIOA(PinA5).Pourpouvoirmanipulerdesélémentsexternesaucoeur, ilestnécessairedeconfigurerlesportsd’entrée-sortie.Dansnotrecas,ilfaudraconfigurerleportGPIOAetlapin5.Ceciadéjàété réalisé par l’utilitaire STM32CubeMX qui a décrit la fonctionMX_GPIO_Init(). On nechercherapasforcémentàcomprendretoutecettefonction(CourssurlesGPIOsàvenir).Dansunpremiertemps,écrivezlafonctionunsignedintcalcul_somme()quiretournelasommedetouslesélémentsdeTab1.Vérifiersonfonctionnement.Dansunsecondtemps,modifiervotrecodepourmettreà1laledsilasommeestpaire,sinonlalaisserà0. Utiliserlalignesuivantepourallumerlaled:

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET); Pourl’éteindre: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);Unefoisquetoutfonctionne,vouspouveztesterl’autrecaspossible.Enmodedebug,placervousaprèslafonctioncalcul_somme().Enaccédantdirectementauxregistresetàlamémoireetsansmodifierlecodeexistant,chercherànepasallumerlaled.IV. Bilanetconclusion

LorsdeceTP,vousavezpuvousanalyserlesdifférentsfichiersnécessairesàl’initialisationetlaconfigurationdumicrocontrôleur.Le debugger est un élément indispensable lors de tout développement de code pour unprocesseurouunmicrocontrôleur.µVisiondisposed’unenvironnementtrèsrichedontvousavezvuquelquespossibilités.Ainsi,pouvoiraccéderdirectementauxregistres,visualiserlecontenudesmémoires,(etc.)sontautantd’élémentsindispensablespourbiencomprendre,testeretvalideruneimplémentation.

Page 15: TP n°1 : Architecture des systèmes à microprocesseur · TP n°1 : Architecture des systèmes à microprocesseur _____ Objectifs de la séance -Prise en main de l’environnement

M1-Archi 2016-2017 Page15