Создание шаблона проекта
Скачиваем дистрибутив https://rutracker.org/forum/viewtopic.php?t=2305709
Из всего пакета нам нужны только MDK522.EXE и keygen.exe . Устанавливаем ,генерируем серийный номер,
регистрируем.
После установки вылезет окно Pack Installer , если устанавливается с нуля необходимо установить паки CMSIS , ARM compiler и паки на линейки что будем использовать, наша STM2F4 series.
Если в процессе установки будут ошибки , необходимо перезапустить Keil с правами админа.
Запускаем Keil. Создаем новый проект Project → New uVision Project .
Указываем местоположение проекта и его имя
( в моем случае d:\Distr\PROGRAMM\Micro\STM32\Project_2017\Keil\F4xx\F4_disco_template\
и F407_disco_template)
Далее в окне Select Device for Target1 из списка STMicroelectronics выбираем STM32F407VGT6
(использую STM32F4 Discovery)
Следующее окно Manage Run-Time Environment закрываем, использовать встроенные облегчалки не будем.
Сохраним созданный проект File ->Save all
Содержимое папке нашего проекта на данном этапе :
DebugConfig\
Listings\
Objects\
F407_disco_template.uvprojx
F407_disco_template.uvoptx
F407_disco_template.uvguix.Max
Теперь добавим необходимый минимум для компиляции проекта и настроим проект .
Дабы не было мешанины в проекте создадим папки, куда и будем копировать исходники и хэдеры.
App\ - для main.c
CMSIS\ - для хэдеров CMSIS
inc\ - для хэдеров своих модклей
src\ - для исходников своих модулей
ST\ - для хэдеров, стартапа и модулей ST
Все необходимые нам файлы Keil хранит в паках ,
путь к ним (в моем случае c:\Program Files (x86)\Micro\Keil\ARM\PACK\Keil\STM32F4xx_DFP\2.11.0\)
И так нам нужны :
Хэдеры CMSIS
путь c:\Program Files (x86)\Micro\Keil\ARM\PACK\Keil\STM32F4xx_DFP\2.11.0\Drivers\CMSIS\Include\
файлы :
arm_common_tables.h
arm_const_structs.h
arm_math.h
cmsis_armcc.h
cmsis_armcc_V6.h
core_cm4.h
core_cmFunc.h
core_cmInstr.h
core_cmSimd.h
Хэдер вендора
путь
c:\Program Files (x86)\Micro\Keil\ARM\PACK\Keil\STM32F4xx_DFP\2.11.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include\
файл: stm32f407xx.h
Стартап
путь
c:\Program Files (x86)\Micro\Keil\ARM\PACK\Keil\STM32F4xx_DFP\2.11.0\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\
файл : startup_stm32f407xx.s
Файл System_xxx
путь
c:\Program Files (x86)\Micro\Keil\ARM\PACK\Keil\STM32F4xx_DFP\2.11.0\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\
файл: system_stm32f4xx.c
Настроим проект .
Правой кнопкой по Target 1 в мэнегере проекта , выбираем Options for Target.
Вкладки Device , Target , Asm и Linker не изменяем .
На вкладке Output выставляем опцию Create HEX File
На вкладке Listing отмечаем опции C Compiler Listing и C Preprocessor Listing.
На вкладке C/C++ прописываем дефайн STM32F407xx и прописываем пути к хэдерам .\CMSIS;.\inc;.\ST
На вкладке Debug выбираем либо STLink, либо как у меня Jlink .
У меня STM32F4 Discovery перешитая в Jlink этой утилитой https://www.segger.com/jlink-st-link.html
Здесь же нажав Setting попадаем в меню настроек Link'a , если Link подключен он сразу определится .
Выбираем порт отладки SWD Port → SW , в окне SW Device появится информация о чипе, если подключен таргет.
В этом же окне на вкладке Flash Download выставляем Reset and Run
Правой кнопкой по Target 1 в мэнегере проекта , выбираем Manage Project item.
Редактируем название нашего таргета , в моем случае это STM32F4_disco .
На вкладке Groups создаем виртуальные папки для исходников , именно они будут видны в мэнегере проекта.
В моем случае имена этих папок совпадают с реальными .
App\
src\
ST\
В виртуальную папку ST в вкладке Files добавим startup_stm32f407xx.s и system_stm32f4xx.c
В итоге окно мэнегера проекта будет выглядеть так :
Добавим main.c для чего правой кнопкой по вирт. папке App → Add New item for group App
Прописываем имя файла и его расположение .
В нашем случае main.c и реальная папка App проекта.
Прописываем в main.c
#include "stm32f407xx.h"
int main (void)
{
while(1)
{
}
}
Компилируем , сохраняем проект File → Save all.
Шаблон проекта создан .
Для использования шаблона достаточно скопировать папку проекта целиком , переименовать файлы
F407_disco_template.uvoptx
F407_disco_template.uvprojx
F407_disco_template.uvguix.Max ← Max имя юзера компа
И переименовать в опциях проекта (вкладка Output) Name of Executable.
И так создадим из шаблона новый проект переименовав его в F4_disco_blink
Изменим содержимое main.c на
#include "stm32f407xx.h"
#define LED1_ON GPIOD->BSRR=GPIO_BSRR_BS_12
#define LED1_OFF GPIOD->BSRR=GPIO_BSRR_BR_12
static volatile uint32_t TimingDelay;
/* Delay & timers */
void SysTick_Handler(void) {
if (TimingDelay) {
TimingDelay--;
}
}
void Delay_mS(uint32_t nTime) {
TimingDelay = nTime;
while (TimingDelay);
}
int main (void)
{
SysTick_Config(SystemCoreClock /1000);
RCC->AHB1ENR|=RCC_AHB1ENR_GPIODEN;
GPIOD->MODER &= ~GPIO_MODER_MODER12 ;
GPIOD->MODER |= GPIO_MODER_MODER12_0 ;
while(1)
{
LED1_ON ;
Delay_mS(500);
LED1_OFF ;
Delay_mS(500);
}
}
Скомпилируем Project ->Rebuild all targets files.
Прошьем Flash->Download
PS . Частота внешнего кварца в system_stm32f4xx.c по дефолту 25МГц на F4 Discovery установлен на 8МГц
поэтому необходимо исправить строку
#define HSE_VALUE ((uint32_t)25 000000)
на
#define HSE_VALUE ((uint32_t)8000000)
Либо прописать дефайн HSE_VALUE = 8000000