Per sapere come funziona, non utilizzare nessuno dei precedenti. Ottieni un compilatore a braccio incrociato e la documentazione da st, fatto. Inizia a scrivere codice. questi chip sono generalmente molto facili da programmare. la documentazione ti dice quali bit in cosa fanno i registri cosa.
Qualsiasi / tutte queste librerie hanno lo scopo di rimuovere quella comprensione / onere / lavoro da te e farla sentire come una semplice chiamata api come esperienza di programmazione dell'applicazione. Questo è ciò che vogliono molte persone. Puoi usare tutta la fonte per queste librerie per capire, ma man mano che migliora, trovi buchi e problemi nelle librerie, a volte codice molto spaventoso. codice messo insieme, scritto genericamente e approssimativamente portato da un chip all'altro, forse supportando le caratteristiche che il tuo chip non ha, ecc. E tutti hanno un sovraccarico eccessivo. Da 10 a 100 volte troppo codice per l'attività, sicuramente molti di essi possono ottimizzare via ma perché lo hanno lì in primo luogo?
Sia che tu vada da solo o utilizzi una di queste librerie, dovresti comunque cercare l'origine delle librerie che usi per vedere se sei a tuo agio con quello che stanno facendo, se ha senso, corrisponde alla documentazione del chip, ecc. Quando qualcosa va storto probabilmente dovrai scavare tra le loro cose tanto quanto le tue per scoprire perché.
Nota che i documenti sui chip non sono perfetti, questo fa parte del divertimento.
Non capisco perché l'assemblaggio emerge in una discussione sulla programmazione bare metal. Puoi cavartela con pochissimo assemblaggio. Per questi chip corteccia-m, tecnicamente hai bisogno di così tanto asm per essere avviato:
.globl _start
_start:
.word 0x20001000
.word main
Non puoi fare affidamento su dati né su bss e non puoi tornare dal principale con quel minimo di asm. Ma è tutto ciò di cui HAI BISOGNO per il nudo metallo nudo. Ora se vuoi fare degli interrupt hai bisogno di più voci nella tabella vettoriale. più righe .word. Consiglio più asm, ma forse 10 o 20 righe in più.
questo è in genere tutto l'asm che uso.
.cpu cortex-m0
.thumb
.thumb_func
.global _start
_start:
stacktop: .word 0x20001000
.word reset
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.thumb_func
reset:
bl notmain
b hang
.thumb_func
hang: b .
.align
.thumb_func
.globl PUT16
PUT16:
strh r1,[r0]
bx lr
.thumb_func
.globl PUT32
PUT32:
str r1,[r0]
bx lr
.thumb_func
.globl GET32
GET32:
ldr r0,[r0]
bx lr
.thumb_func
.globl GET16
GET16:
ldrh r0,[r0]
bx lr
.thumb_func
.globl dummy
dummy:
bx lr
.end
Sì, dice cortex-m0 ma questo è il vero bootstrap per il mio codice m4. Preferisco che questo sia pollice non pollice2. E ho appena riutilizzato questo codice da una corteccia-m all'altra, modificando l'indirizzo del puntatore dello stack secondo necessità, quindi funziona per m0, m3 e m4. Non ho ancora un m7 né l'ho studiato molto.
Abilitare la fpu potrebbe richiedere qualche altra riga di asm in quanto sono necessarie istruzioni specifiche. Ma il punto è non confondere la programmazione di basso livello e l'asm. C ha ciò di cui hai bisogno per configurare il chip, oltre a scrivere un'applicazione. Le librerie di cui stai parlando sono scritte in C non asm, quindi ovviamente non hanno nemmeno bisogno di usare asm.
Se vuoi imparare il funzionamento interno, scrivi il tuo codice. Non utilizzare queste librerie se non come riferimento. A volte è più semplice hackerarlo piuttosto che provare a leggere il loro codice. (non solo ST ma tutti i venditori. Uno dei venditori aveva una riga di codice così allarmante che lo uso come una domanda di intervista, non ho intenzione di pubblicarlo qui).
ST sicuramente, ma anche altri fornitori, per risparmiare energia, hanno abilitazioni di clock per sezioni del chip, quindi prima di entrare e provare a battere un led, devi trovare il bit di abilitazione per quel blocco gpio e vedere se esce di reset abilitato, se non poi abilitarlo, parlando con quella logica gpio senza un clock che lo abilita semplicemente blocca il processore in attesa di una risposta dalla logica che non risponderà mai. Non ti dicono sempre di queste abilitazioni. Una volta abilitati, a volte ti guidano attraverso l'init per alcune periferiche particolari. I documenti ST sono abbastanza buoni. Proveniente dal microchip che ottiene un punteggio piuttosto scarso per la documentazione, non dovresti avere problemi.
Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
oDrivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
rispettivamente.