И так, есть отладочка stm32f429итд. Демки погоняли, посмотрели, что картиночки бегают, кнопочки на экране нажимаются, мимими. Это клёво, но начнём с пустого проекта.
Проект, в целом, создаётся точно так же, как и для
stm32f4discovery.
Но если в кейле нет поддержки этого контроллера вовсе (не обновлён), то всё становится несколько хитрее =)
Во-первых, скачаем
архив с библиотеками и примерами программ под плату — там есть что повыдирать.
читать дальшеИ в первую очередь, выдерем stm32f4xx.h из CMSIS. В кейле, если он не поставлен с нуля, последний, этот файл дюже древний. Для начала, конечно, хватит и его, но с экраном уже ничего сделать не выйдет, периферия такая только появилась.
Берём файл в папке STM32F429I-Discovery_FW_V1.0.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include и передислоцируем его в аналогичную папку кейла Keil\ARM\INC\ST\STM32F4xx. У меня новый файл на 100 кб оказался больше.
Стартапы для новых серий 4хх можно найти в папке STM32F429I-Discovery_FW_V1.0.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm. Их там много разных:
startup_stm32f4xx.s
startup_stm32f40_41xxx.s
startup_stm32f40xx.s
startup_stm32f401xx.s
startup_stm32f427_437xx.s
startup_stm32f427x.s
startup_stm32f429_439xx.s
Естественно, что нам нужен последний. Там же, на папку выше можно взять обновлённый system_stm32f4xx.c. Но не верьте ему, он настроен на частоту кварца 25 МГц. Лучше сделайте своё через генератор (если найдёте, я не нашёл) или стянуть из папки STM32F429I-Discovery_FW_V1.0.0\Projects\Demonstration\Core\Devices\STM32F4xx.
Неплохо было бы добавить файл описания регистров для System Viewer.
Сначала скачиваем svd файлы с сайта arm файл STM32F429x.svd: CMSIS (вкладка CMSIS-SVD, требуется регистрация). Выбираем там нужную серию, ставим галку и жмём Download.
Потом файл нужно сконвертировать в понятный кейлу вид с помощью утилиты SVDConv.exe, которая есть в папке STM32F429I-Discovery_FW_V1.0.0\Libraries\CMSIS\SVD. Но перед выполнением команды надо скопировать компилятор кейловский SfrCC2.Exe из папки Keil\UV4 в папку, где происходит конвертирование. И в итоге:
Получим файл STM32F429x.SFR.
Отлично. Создадим проект на базе какого-нибудь близкого по духу контроллера, а потом поправим его параметры под нужные нам. Сделаем пустой проект как для stm32f4discovery, но без startup-файла (всё равно другой нужен).
1. Project -> New project.
Выбираем папку и называем проект. Сохраняем.
2. Предлагают выбрать микроконтроллер. Окай.
В папочке ST ищем какой-нмбудь STM32F4xx и выбираем (или базовый Cortex-M4). Если его нету — обновите Кейл, так как без поддержки ядра CM4 ловить особо нечего. Я выбрал stm32f407vg.
3. Предлагают скопировать в проект startup — нафиг, он не совсем подходит.
Можем назначить папочки, куда класть объектники (Options->Output->Select Folder for Objects) и листинги (Options->Listing->Select Folder for Listings).
Изменим пределы памяти (см. раздел Memory Mapping в даташите). ROM размером 0x200000 (2 Мб), быстрая RAM1 по адресу 0x10000000 размером 0x10000, обычная RAM2 по адресу 0x20000000 размером 0x30000 (их там три разных, но какая пока разница). Карту памяти взяли в даташите в разделе 5 «Memory mapping».
На вкладке Debug выберем ST-Link Debugger (в его свойствах выбираем протокол SW). На вкладке Utilities также выбираем ST-Link Debugger и жамкаем Settings. Там добавляем алгоритм прошивки: Add -> STM32F4xx 1Mb Flash (если есть 2Mb, то супер). Для начала сойдёт, потом, видимо, придётся или обновить кейл, или стащить алгоритм для флеша побольше.
И добавим дефайн для выбора контроллера (библиотекам нужен, видимо) на вкладке C/C++: STM32F429_439xx.
Сохраняем проект и пока закроем его. Откроем проект (.uvproj) в текстовом редакторе и поправим всё остальное:
Device: STM32F429ZI;
Cpu: IRAM(0x20000000-0x2002FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x81FFFFF) CLOCK(8000000) CPUTYPE("Cortex-M4") FPU2
StartupFile: "Startup\ST\STM32F4xx\startup_stm32f429_439xx.s" ("STM32F429 Startup Code")
SFDFile: SFD\ST\STM32F4xx\STM32F429x.sfr
OCR_RVCT4.Size: 0x200000
Можем, в общем-то, открывать проект и добавлять файлы:
startup_stm32f429_439xx.s
system_stm32f4xx.c
main.c
Всё, компилируем и получаем пустой собирающийся проект, с которого можно начать путь постижения премудростей новых контроллеров ст.stm32f429_blank.zip — пустой проект.
@темы:
arm,
программизмы,
электроника,
stm32,
stm32f429idiscovery
Опять же, если там висят младшие биты RGB-шины, то можно переключить их на использование с sd, невзирая на. Цвет, конечно, на экране исказится немного, но чем младше бит, там меньше это будет заметно. Если управляющие — то уже не получится. Схема отладочной платы есть в user manual. Таблица специальных функций есть где-то в середине даташита. На первый взгляд особых конфликтов не вижу, но у меня нет напечатанной схемы платы, потому могу ошибаться)
Почему-то создал проект, выбрал STM32F429ZI процессор, а например некоторых битов в регистрах PWR_CR и PWR_CSR не хватает. Другие регистры пока не смотрел
Если нет, можно кинуть вместе с остальными sfr (найти поиском, я не помню где они в папке кейла) и подключать оттуда. Можно кинуть к проекту, всё равно, лишь бы был. Если путь указан к нему в свойствах проекта (там есть на второй что ли вкладке поле специальное) — всё ок.
Я почему захотел провернуть эти операции - в регистрах не отображаются некоторые биты, которые есть в даташите, когда симулятором или отладчиком код тестирую!
Поэтому захотелось проверить - заменить на другой файл описания регистров. Но ничего не вышло, все тоже самое.
Не подскажешь, в почему так? В ДШ одно содержание регистров F429 камня, а в Keil - немного другое (не хватает некоторых бит в регистре PWR_CR и PWR_SR).
Там биты, отвечающие за включение over-drive режима - чтобы можно было на 180 МГц работать.
Можно попробовать скачать самую свежую с сайта арма. Или отредактировать вручную — в исходных данных это, емнип, xml, куда можно любые биты вписать. И скомпилить, и подсунуть кейлу.
Но мне битов хватало, я туда не лез...
В принципе, можно обойтись и без оных битов, записав число в регистр, сформировав его вручную =)
STM32F429x.SFR, правда, я исходный файл не перекачивал с тех пор, редактировал какой был. Не факт, что он самый свежий, но какая разница?
Обратите внимание, что в настройках проекта есть два места для выбора программатора/отладчика — на двух последних вкладках. Проверьте, что протокол выбран правильно (жтаг/свд), мм... Не знаю, что ещё><
С Уважением Владимир.
Уважаемый teplofizik, у меня при запуске симулятора пишет:
Load "C:\\CLOCK\\from_net\\stm32f429_blank\\build\\stm32f429_blank.AXF"
*** error 65: access violation at 0x40023800 : no 'read' permission
С уважением.
Работать она не будет, но записать туда и считывать числа обратно возможно. Для этого надо в строке команд набрать:
MAP 0x40000000, 0x40ffffff READ WRITE
Или же сделать ini-файл (например, stm32f4xx.ini) с таким содержимым и указать в свойствах проекта, вкладка Debug, имя файла в поле Initialization file. Но лучше добудьте где-нибудь настоящий контроллер и третируйте его -- он хотя бы настоящий и будет как-то реагировать =)