Создание проекта в IDE Keil MDK. Загрузка IDE Keil MDK и в меню Project, страница 3

Инициализации, выполняемая в файле startup_stm32f4xx.s состоит всего из двух шагов. На первом (строки 175 – 176) вызывается функция SystemInit, а на втором (строки 177 – 178) – управление передается функции __main. Функция  __main() создается автоматически компилятором языка C и C++.

Функция SystemInit()  находится в файле system_stm32f4xx.c.  Для создания этого файла воспользуемся программой STM32F4xx_Clock_Configuration_V1.0.1.xls (макросом) для Microsoft Excel. Сформированный файл system_stm32f4xx.c скопируем его в папку src и подключим его к проекту.

Обычно в папку src копируются и подключаются к проекту еще несколько файлов. Во-первых, это файл retarget.c, который находится в папке \Keil\ARM\Startup\. Во-вторых, это файлы stm32f4xx_it.c  и stm32f4xx_it.h. Файлы stm32f4xx_it.* не входят в состав IDE Keil MDK, но  их можно взять из имеющегося готового проекта или создать самостоятельно.

В файле startup_stm32f4xx.s конфигурируется стек и динамически распределяемая память, в файле  system_stm32f4xx.c конфигурируется система синхронизации и система питания ядра микроконтроллера, в файле retarget.c находятся функции из стандартной библиотеки, которые могут корректироваться в каждом проекте, а в файле stm32f4xx_it.c находится обработчики прерываний. Все эти файлы  являются уникальными для каждого проекта, так как содержат настройки и специфическое программное обеспечение проекта.

Соберем повторно проект и убедимся, что  при компоновке опять возникли ошибки. На этот раз компоновщик не смог найти функцию sendchar(), которая вызывается в файле retarget.c. Эту функцию мы напишем позже, а пока создадим для нее «заглушку» в файле main.c

компоновщик не смог найти функцию sendchar(), которая вызывается в файле retarget.c. Эту функцию мы напишем позже, а пока создадим для нее «заглушку» в файле main.c

int sendchar(int ch) {

Return ch;

}

Теперь можно собрать проект и убедиться в отсутствии ошибок.

Матрица шин.

Все устройства микроконтроллеров STM32F4xx объединяются между собой при помощи набора внутренних шин. Для соединения шин между собой используется устройство, которое называется матрицей шин. 32-разрядная матрица позволяет организовывать потоки данных между всеми основными (CPU, DMA, Ethernet, USB HS) и подчиненными (Flash-память, RAM, FSMC, AHB и APB) блоками микроконтроллера и гарантирует эффективность операций даже при одновременной работе нескольких высокоскоростных периферийных модулей. На следующем рисунке  показана упрощенная схема коммутации шин матрицей шин.

Каждая строка и столбец матрицы шин это отдельная шина, к которой подключены те или иные устройства микроконтроллера. Точки на пересечении столбцов и строк означают, что данные две шины могут соединяться друг с другом. Периферийные устройства микроконтроллера подключены к двум высокоскоростным шинам AHB1-AHB2 и двум низкоскоростным шинам APB1 и APB2. Система тактирования микроконтроллера формирует три независимых тактовых сигналов для тактирования шин: сигнал для шины APB1, сигнал для шины APB2 и общий тактовый сигнал для высокоскоростных шин AHBx. Эту особенность необходимо учитывать при конфигурировании периферийных устройств, так как устройства, подключенные к разным шинам, в общем случае, будут тактироваться разными тактовыми сигналами.