...Прочитал про твоё желание вкатиться сразу на H7 (не говоря уже о
желании программировать его на регистрах как AVR'ку), улыбнулся.
Потому что до H7 работал на середнячке F407 и перешел на H7 уже
имея опыт. H7 - достаточно сложная система на кристалле для того чтобы начинать знакомство с нее. Я не пишу слов "невероятно сложная" только потому что имел дело с другими системами на кристалле. Зайди на ST и качни стартер пак документов Datasheet + Reference Manual + Errata + Programming Manual, чтобы иметь представление с чем предстоит иметь дело. Refman (RM0433) "народного" STM32H743 на 3353 страницы. Листать один-единственный даташит как у PIC или AVR, писать в регистры и таким образом программировать проект не выйдет. Просто об этом не пишут. Обязательно придется читать отдельные документы проясняющие работу с перифералами, с самим ARM-ядром и проч (например таймеры, порты итд). Документация у ST сильно разбросана и это составляет причину огромного хейта. Причина в том что ST в качестве сайта используют покупное "бизнес решение" для продаж.
О технике.
Это относительно свежие чипы, запущенные в 2017 . Соответственно, по причине их свежести, в интернетах (втч буржуйских) на H7 голяк. Хотя вот на STM32F407 или на STM32F103 информации, кода, примеров очень много. В родном коде ST т.н. "драйверов" на H7 предостаточно проблем. Просто так искаропки многие вещи забагованы. (В этом большая разница с хорошо вылизанным F4)
В H7 перешли на литографию 40нм что позволило набить его под завязку.
Стартер пак на несколько тысяч страниц это далеко не всё.
В документации от ST не будет подробной инфы на базовые вещи с которыми обязательно придётся иметь дело как только ты коснешься DMA.
Иначе ничего не заработает даже из коробки с кодом сгенеренным Cube.
У H7 есть кэши кода и данных. Механизм MPU управления страницами памяти. И буферы префетча, вых. буферы памяти, которые необходимо флушить (устраивать MemFence).
Поэтому ARM документацию на ядро и MPU все равно придется скурить. Тупо отрубить кэш не всегда прокатит, потому что код будет пытаться флушнуть кэш и будет падать где-то сильно позже (есть у ARM'а такой "soft" exception, и его очень непросто выловить потому что проц уже давно убежал с проблемного места)
H7 представляет собой систему из 3х штук пространств.
Каждый "домен" отдельно питается, отдельно тактируется и может иметь несколько уровней энергосбережения. L3 например может тихо DMA чего-нибудь там из LPUART в SRAM, когда домены L2 и L3 и часть SRAM отключены от питания. Этим (трехдоменностью) H7 отличается даже от середнячков, где всё в одной системе-куче (единственное только, перифералы сидят на разных шинах с разной скоростью и потреблением, поэтому советую вкатываться на сериях даже попроще, типа F103). Каждый периферал имеет несколько линий тактирования (зачем это per-peripheral особо не поясняется). Даже какой-нибудь UART. У перифералов интерфес с процом кстати тактируется отдельно и асинхронно, сам периферал тактируется от отдельного источника.
SRAM разбита на несколько отключаемых областей у ядра есть свои быстрые 1-t DMEM/IMEM... И нет, "автоматически" это ничего не учитывается.
Смысл сказанного один - в систему H7 введена изрядная сложность, и это очень сильно тормозит и затрудняет процесс получения информации.
Если есть хоть немного здравого смысла, то не надо начинать знакомство с STM32H7.
Если ты не решил на ближайший год заняться изучением H7 и ничего кроме этого не делать..
Я предупредил.
Не слушай дурачков про STM32CubeIDE. Во-первых, у STCube есть LL- версия библиотек (далеко не для всех перифералов, которая работает напрямую с регистрами), про это почему-то не упоминают. Во-вторых, а в чем смысл писать ручками код инициализации?
Про то чтобы жить без Cube... На малых или на средних сериях F1, F4 это было возможно хотя бы потому что ранее и так были просто либы и либы "board support package".
Что же касается H7...
Вот тебе функция включения тактирования. Это просто скромное включение тактирования перифералов, ничего больше. Обрати внимание, она вызывает другие.
https://github.com/STMicroelectronics/stm32h7xx_hal_driver/blob/master/Src/stm32h7xx_hal_rcc_ex.c#L105
Начинается с 105й строки, заканчивается на 1679й.
Искаропки у STM32H7 запустится только ядро (или оба), и то с оговорками.
И нет, чтобы включить тактирование это совсем-совсем не всё, это только начало, под один только конфиг тактирования перифералов отдельные функции.
А это это только инициализация, а ведь есть еще слжные перифералы: хотя бы ETH, USB, второе ядро наконец (это Cortex-M4, другой, со своим, отдельным набором документации). Да ладно, бог с ними с перифералами, не в них дело. Дело в других подводных моментах, которые неизвестны. Вот например, в родных драйверах STM32H7 от ST хочешь использовать Ethernet (помимо LwIP) придется изучить еще FreeRTOS, потому что ETH драйвера только под RTOS.
А если еще учесть что с языком Си ты пока на "вы", то.... А точно надо устраивать себе холокост такой Learning Curve, чтобы она выглядела крутизной с небоскреб? :)
Начни с систем и камней проще.