Чтобы узнать, как это работает, вы хотите использовать ничего из вышеперечисленного. Получите ручной кросс-компилятор и документацию от st, done. Начните кодировать. эти чипы вообще очень легко программировать. документация говорит вам, какие биты в каких регистрах делают что.
Любая / все эти библиотеки предназначены для того, чтобы снять с вас это понимание / нагрузку / работу и создать ощущение, будто вы просто вызываете API, как опыт разработки приложений. Это то, что хотят многие люди. Вы можете использовать весь исходный код для этих библиотек, чтобы помочь понять, но когда вы станете лучше, вы обнаружите дыры и проблемы в библиотеках, иногда очень страшный код. код, собранный вместе, написанный в общих чертах и грубо перенесенный с одного чипа на другой, возможно, поддерживающий функции, которых нет у вашего чипа, и т. д. И все они имеют чрезмерную нагрузку. В 10-100 раз больше кода для этой задачи, конечно, многие из них могут быть оптимизированы, но зачем это нужно?
Независимо от того, пользуетесь ли вы своей собственной или используете одну из этих библиотек, вам все равно следует поискать исходные библиотеки, которые вы используете, чтобы убедиться, довольны ли вы тем, что они делают, если это имеет смысл, соответствует документации по чипу и т. Д. идет не так, вам, вероятно, придется копаться в их вещах столько же, сколько в вашей, чтобы выяснить, почему.
Обратите внимание, что документы по чипам тоже не идеальны, это часть веселья.
Я не понимаю, почему сборка возникает в дискуссии о программировании голого металла. Вы можете обойтись с очень небольшой сборкой. Для этих чипов cortex-m вам технически нужно только столько ассемблера для загрузки:
.globl _start
_start:
.word 0x20001000
.word main
Вы не можете полагаться ни на данные, ни на bss, и вы не можете вернуться с основного с этим минимумом asm. Но это все, что вам нужно для самого чистого металла. Теперь, если вы хотите делать прерывания, вам нужно больше записей в векторной таблице. больше .word строк. Я рекомендую больше asm, но возможно на 10 или 20 строк больше.
обычно это все, что я использую.
.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
Да, это говорит Cortex-M0, но это фактический загрузчик для моего кода M4. Я предпочитаю, чтобы это был thumb, а не thumb2. И я просто повторно использую этот код из одного cortex-m в другой, меняя адрес указателя стека по мере необходимости, чтобы он работал для m0, m3 и m4. У меня еще нет m7, и я не слишком много его исследовал.
Включение fpu может потребовать еще несколько строк asm, поскольку необходимы конкретные инструкции. Но дело не в том, чтобы смешивать низкоуровневое программирование и асм. C тем, что нужно для настройки чипа, а также для написания приложения. Библиотеки, о которых вы говорите, написаны на C, а не на asm, поэтому, очевидно, им также не нужно использовать asm.
Если вы хотите изучить внутреннюю работу, напишите свой собственный код. Не используйте эти библиотеки, кроме как для справки. Иногда проще просто взломать его, чем пытаться прочитать их код. (не только ST, но и все поставщики. У одного из поставщиков была строка кода, настолько тревожная, что я использую ее как вопрос для собеседования, нет, не собираюсь публиковать ее здесь).
Безусловно, ST, но и другие производители, для экономии энергии, имеют тактовые импульсы для участков чипа, поэтому, прежде чем вы попытаетесь мигнуть светодиодом, вам нужно найти бит включения для этого блока gpio и посмотреть, выйдет ли он. сброса включен, если нет, то включите его, разговаривая с этой логикой gpio без включенных часов, он просто вешает процессор, ожидая ответа от логики, которая никогда не ответит. Они не всегда говорят вам об этих способностях. После включения они иногда проводят вас через init для некоторого определенного периферийного устройства. Документы ST довольно хороши. Исходя из микрочипа, который получает довольно плохую оценку за документацию, у вас не должно быть проблем.
Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
илиDrivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
соответственно.