Para aprender como funciona, você não deseja usar nenhuma das opções acima. Obtenha um compilador de cruz de braço e a documentação de st, done. Comece a codificar. esses chips geralmente são realmente fáceis de programar. a documentação informa quais bits nos registradores fazem o que.
Qualquer uma dessas bibliotecas destina-se a remover esse entendimento / carga / trabalho de você e fazer com que pareça apenas uma chamada de API, como uma experiência de programação de aplicativos. É o que muita gente quer. Você pode usar toda a fonte dessas bibliotecas para ajudar a entender, mas à medida que melhora, você encontra falhas e problemas nas bibliotecas, às vezes código muito assustador. código lançado juntos, escrito de maneira genérica e grosseira de um chip para outro, talvez recursos de suporte que seu chip não tenha, etc. E todos eles têm uma quantidade excessiva de sobrecarga. 10 a 100 vezes mais código para a tarefa, com certeza muito pode otimizar, mas por que tê-lo lá em primeiro lugar?
Independentemente de você escolher por si próprio ou usar uma dessas bibliotecas, você ainda deve procurar na fonte as bibliotecas que usa para ver se está confortável com o que elas estão fazendo, se faz sentido, corresponde à documentação do chip etc. Quando algo der errado, você provavelmente terá que vasculhar as coisas deles tanto quanto as suas para descobrir o porquê.
Observe que os documentos de chip também não são perfeitos, isso faz parte da diversão.
Não entendo por que a montagem surge em uma discussão sobre programação bare metal. Você pode conviver com muito pouca montagem. Para esses chips de córtex-m, tecnicamente você só precisa dessa quantia para inicializar:
.globl _start
_start:
.word 0x20001000
.word main
Você não pode confiar em dados nem em bss e não pode retornar do main com esse mínimo de asm. Mas esse é todo o asm que você precisa para o mais simples dos bare metal. Agora, se você quiser interromper, precisará de mais entradas na tabela de vetores. mais linhas .word. Eu recomendo mais asm, mas talvez 10 ou 20 linhas a mais.
este é tipicamente todo o asm que eu 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
Sim, diz córtex-m0, mas isso é bootstrap real para o meu código m4. Prefiro que seja polegar, não polegar2. E apenas reutilizo esse código de um córtex-m para outro, alterando o endereço do ponteiro da pilha conforme necessário, para que ele funcione para m0, m3 e m4. Ainda não tenho um m7 nem pesquisei muito.
A ativação da fpu pode exigir mais algumas linhas de asm, pois instruções específicas são necessárias. Mas o ponto é não confundir programação de baixo nível e asm. C tem o que você precisa para configurar o chip, além de escrever um aplicativo. As bibliotecas das quais você está falando estão escritas em C e não em asm, portanto, obviamente, elas também não precisam usar asm.
Se você quiser aprender o funcionamento interno, escreva seu próprio código. Não use essas bibliotecas além de como referência. Às vezes, é mais fácil invadir isso do que tentar ler seu código. (não apenas a ST, mas todos os fornecedores. Um dos fornecedores tinha uma linha de código tão alarmante que eu a uso como uma pergunta de entrevista, não publicando aqui).
Definitivamente, mas também outros fornecedores, para economizar energia, ter o clock ativado para seções do chip, portanto, antes de entrar e tentar piscar um led, você precisa encontrar o bit de habilitação para esse bloco gpio e ver se ele sai de redefinição ativada, se não ativada, conversando com essa lógica gpio sem um relógio, permitindo que simplesmente desligue o processador enquanto aguarda uma resposta da lógica que nunca responderá. Eles nem sempre falam sobre esses recursos. Uma vez ativado, eles às vezes orientam você no init para algum periférico específico. Os documentos de ST são muito bons. Vindo do microchip que obtém uma nota muito ruim para documentação, você não deve ter um problema.
Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
ouDrivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
respectivamente.