Всем привет! Для начала настроим рабочую обстановку. Ну вот, настроили – теперь продолжим. В этой статье я описываю пошагово как можно создать проект (пустой проект без использования куба) и начать писать код использую библиотеку CMSIS.
Давайте создадим пустой проект для МК STM32F103RCT6 и программировать мы будем используя CMSIS.
для начала выберем File->New->CProject
В поле “Project name:” пишем любое удобное для вас название проекта и жмём Next. В следующем окне ничего не трогаем, а просто нажимаем Finish.
На выходе получаем новый проект:
Теперь необходимо создать структуру папок нашего проекта. Нажимаем ПКМ по названию проекта и выбираем New->Folder
Создаём вот такую структуру папок:
1 2 3 4 5 6 7 |
CMSIS src inc Code src inc StartUp |
Теперь необходимо скачать библиотеку CMSIS вот с этого места. Выбираем своё семейство МК и скачиваем. Размещаем эту библиотеку недалеко от проекта и переносим необходимые для проекта файлы из скачаной библиотеки. Какие файлы и куда переписать можно посмотреть из скнишота выше. Уточняю! нам нужны только следующие файли из библиотеки:
1 2 3 4 5 |
core_cm3.h stm32f10x.h system_stm32f10x.h core_cm3.c system_stm32f10x.c |
Я использовал для копирования файлов ‘mc’ входящий в стандартный репозиторий linux.
Далее нам нужно создать в папке Code->inc файл main.h и записать в этот файл следующий код:
1 |
system_stm32f10x.c |
Следующий файл с именем main.c нужно создать в папке Code->src и записать в него этот код:
1 2 3 4 5 6 7 8 9 10 11 |
#include "main.h" int main (void) { while(1) { } } |
Далее нам нужно перейти в настройки проекта в меню показанное на скрине. Вам будет предложено выбрать МК. нажимаем ОК.
В следующем окне изменяем название файла Debug_STM32F103C8_FLASH.ld на STM32F103C8_FLASH.ld и выбираем путь для сохранения – папку StartUp
Жмём Finish. В следующем окне жмём ОК.
Ну а теперь про ошибки которые возникают при первой компиляции нашего пустого проекта. Ошибка следующая:
1 2 |
registers may not be the same -- `strexb r3,r2,[r3]' registers may not be the same -- `strexh r3,r2,[r3]' |
Вот скрин ошибки:
Исправляеться эта ошибка следующим образом. Открываем файл core_cm3.c и находим там строки 736 и 753. Они будут выглядет следующим образом:
1 |
__ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); |
Исправляем их на эту строку: Если быть точнее то вместо “=r” вставляем “=&r” Должно получиться вот так:
1 |
__ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) ); |
С остальными ошибками я справилься. Незнаю почему так произошло но у меня слетели пути к папкам проекта.