Щоб дізнатися, як це працює, не потрібно використовувати жодне з перерахованого вище. Отримайте компілятор арматурного хреста та документацію від st. Почніть кодування. ці фішки, як правило, дуже легко програмувати. документація розповідає про те, які біти в яких регістрах роблять для чого.
Будь-яка / всі ці бібліотеки призначені для того, щоб зняти з вас таке розуміння / тягар / роботу і зробити так, щоб просто почути такий вигляд, як досвід програмування додатків. А це те, чого хоче багато людей. Ви можете використовувати все джерело для цих бібліотек, щоб допомогти зрозуміти, але, коли ви вдосконалюєтесь, ви виявляєте дірки та проблеми в бібліотеках, іноді дуже страшний код. код кидається разом, пишеться загалом і грубо переноситься з однієї мікросхеми на іншу, можливо, підтримує функції, які ваш чіп не має, і т. д. І всі вони мають надмірну кількість накладних витрат. Від 10 до 100 разів занадто багато коду для завдання, впевнено, що багато чого може оптимізуватись, але навіщо це в першу чергу?
Незалежно від того, чи є ви власною чи використовуєте одну з цих бібліотек, ви все одно повинні переглянути джерело бібліотек, якими ви користуєтесь, щоб побачити, чи вам комфортно з тим, що вони роблять, якщо це має сенс, відповідає чіп-документації тощо. Коли щось помиляється, вам, ймовірно, доведеться перекопати їх речі стільки, скільки і ваші, щоб дізнатися, чому.
Зауважте, чип-документи також не є ідеальними, що є частиною задоволення.
Я не розумію, чому в зборах виникає дискусія про програмування голих металів. Ви можете обійтись із дуже малою збіркою. Для цих чіпів cortex-m технічно вам потрібно лише стільки asm, щоб отримати завантаження:
.globl _start
_start:
.word 0x20001000
.word main
Ви не можете покладатися на дані, ні bss, і ви не можете повернутися з main з мінімумом ASM. Але це все те, що вам потрібно для самого чистого металу. Тепер, якщо ви хочете робити переривання, вам потрібно більше записів у векторній таблиці. більше .word рядки. Я рекомендую більше asm, але, можливо, ще 10 або 20 рядків.
це, як правило, вся asm, яку я використовую.
.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. Я вважаю за краще, щоб це був великий палець, а не великий палець2. І я просто повторно використовую цей код від однієї кори-м до іншої, змінюючи за необхідністю адресу вказівника стека, щоб він працював для m0, m3 та m4. У мене ще немає m7, і я його багато не досліджував.
Увімкнення fpu може зажадати ще декількох рядків asm, оскільки потрібні конкретні інструкції. Але справа в тому, щоб не плутати програмування низького рівня та ASM. C має те, що потрібно для налаштування чіпа, а також написання програми. Бібліотеки, про які ви говорите, написані в C не asm, тому очевидно, їм також не потрібно використовувати ASM.
Якщо ви хочете дізнатися внутрішню роботу, напишіть власний код. Не використовуйте ці бібліотеки, окрім як посилання. Іноді легше просто зламати це, ніж намагатися читати їх код. (не тільки для ST, але для всіх постачальників. Один з постачальників мав рядок коду, настільки тривожний, що я використовую його як питання інтерв'ю, але не збираюся його розміщувати тут).
ST безперечно, але для інших енергоносіїв, щоб заощадити енергію, передбачено можливість включення годин для розділів мікросхеми, тому перед тим, як увійти і спробувати замигнути світлодіод, вам потрібно знайти біт включення для цього блоку gpio і подивитися, якщо він виходить увімкнено скидання, якщо не ввімкнути його, розмовляючи з цією логікою gpio без годинника, що дозволяє йому просто висить процесор, оскільки він чекає відповіді з логіки, яка ніколи не відповість. Вони не завжди розповідають вам про ці можливості. Після включення тоді вони іноді проводять вас через ініт для певної периферії. Документи ST досить непогані. Виходячи з мікрочіпа, який отримує досить погану оцінку для документації, у вас не повинно виникнути проблем.
Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
абоDrivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
відповідно.