Решил я сделать одно несложное устройство на микроконтроллере STM32. Начал искать недорогие варианты. После недолгих поисков мне приглянулся STM32F030F4P6. Заказал микроконтроллеры, получил посылку.
Вот так они выглядят. Корпус TSSOP-20.
Вытравил плату, настало время писать прошивку. Открываю IAR, создаю новый проект, и … микроконтроллера не оказалось в списке выбора!
Я совсем не ожидал такого исхода событий, поэтому буду исправлять ситуацию. Всё делаю на примере STM32F030F4P6, для других микроконтроллеров всё делается по аналогии. Для начала заглядываю в даташит, и смотрю какое ядро используется в микроконтроллере.
На первой странице даташита написано, что используется ядро ARM Cortex M0. В настройках проекта на вкладке «General Options» выбираю ядро (core) Cortex M0.
Далее необходимо настроить адреса и количество памяти Flash и RAM. Захожу на вкладку «Linker», жму кнопочку «Edit».
На вкладке «Vector Table» проверяем стартовый адрес, с которого начинается выполнение программы. Должно стоять значение 0x08000000. Если всё верно — идём далее, если нет — правим.
Далее идём на следующую вкладку «Memory Regions». Здесь самое важное.
Необходимо задать начальные и конечные адреса для Flash и RAM памяти. Где же взять эти адреса? Идём в даташит, в раздел «Memory Mapping», и ищем там схематическое изображение адресного пространства микроконтроллера.
Итак, из этой картинки мы можем узнать адрес начала Flash, и адрес начала RAM, это будут значения 0x08000000 и 0x20000000 соответственно. Вбиваем эти значения в графы «Start». Теперь необходимо вычислить конечные значения «End» — они равны начальному значению + размер памяти, а размеры памяти можно без проблем найти в даташите. Ищем раздел «Description» и находим там табличку. В этой табличке указаны основные характеристики всей линейки микроконтроллеров, здесь же указаны объёмы Flash и RAM памяти. Находим в табличке наш микроконтроллер — в моём случае это STM32F030F4P6, смотрим количество памяти.
Теперь, зная объёмы памяти и начальные адреса, можно вычислить конечные адреса. Берём в руки калькулятор, и складываем. Не забываем, что 4 килобайта это 4096 байт, а 16 килобайт это 16384 байта.
Flash = 0x08000000 + ((16 * 1024) — 1)
Flash = 0x08000000 + 16383
Flash = 0x08000000 + 0x3FFF
Flash = 0x08003FFF
То же самое проделываем и для RAM памяти.
RAM = 0x20000000 + ((4 * 1024) — 1)
RAM = 0x20000000 + 4095
RAM = 0x20000000 + 0xFFF
RAM = 0x20000FFF
Мы рассчитали конечные адреса Flash и RAM памяти, вбиваем их в графы «End». Наверняка многим не понятно, почему при расчётах я отнимаю единичку. Дело в том, что по адресу Flash 0x08000000 уже находится первый байт, следовательно, нужно этот байт учесть при расчёте.
Итак, адреса вбили, переходим на последнюю вкладку «Stack/Heap Sizes». Здесь необходимо указать размеры стека (stack) и кучи (heap). Настройка этих значений индивидуальна для конкретного проекта. В своём проекте я выделяю под стек 1024 байта, а кучу не использую, поэтому ставлю по нулям.
Сохраняем проект, теперь добавляем файлы Standart Peripheral Library.
Запускаю компиляцию клавишей F7, и вуаля. Готово. Теперь можно программировать.
P.S. Общие особенности создания проекта в данной статье не рассматриваются. Прилагаю пустой настроенный проект IAR EWARM 6.60 под микроконтроллер STM32F030F4P6, вдруг кому пригодится.
Прикрепленные файлы:
- Zlodey_STM32F030F4P6.zip (298 Кб)