Процесс, в целом похож на создание проекта для STM32F4Discovery. Создавать проект буду в Кейле, это, особенно для начинающих, просто.
У меня стоит uVision 4.54 (evaluation которая), для обучения её хватит с лихвой. Но если интересуют другие IDE, у ST есть мануал, как создавать проект в четырёх самых популярных средах. Под них же, кстати, сделаны проекты во всех примерах.
читать дальшеСперва, если Кейл установлен впервые, стоит поменять кодировку редактора:
1. Edit->Configuration...
2. Вместо ANSI выбрать UTF-8. Это позволит писать комментарии на русском. Если вы этого не делаете, то настройку можно не менять.
А теперь можно и создавать проект:
1. Project->New uVision Project. Среда предложит сохранить файл проекта в папку, по имени файла проект и будет называться.
2. Выбор контроллера: STMicroelectronics->STM32F051R8. Именно он установлен.
3. Среда предложит скопировать загрузочный файл startup_stm32f0xx.s. Нет нужды не соглашаться с ней.
4. В свойствах проекта, на вкладке Target я поставил галочку Microlib, чтоб библиотека была такая же, как и раньше. Размеры сегментов и их адреса уже проставлены.
5. В соседних вкладках Output и Listing я сразу указываю папку, куда кейл будет сбрасывать объектные файлы и прочие дела. Не здорово, когда он захламляет корневую папку проекта (делаю папочку build).
6. На вкладке Debug задаётся отладчик. Можно эмулятор запускать, но лучше сразу отлаживать на платке: ST-Link Debugger, в его настройках выбирается протокол SW вместо JTAG. При этом в поле SW Device появится акое-то число и надпись ARM CoreSight SW-DP. В тех же настройках отладчика на вкладке Flash Download стоит выбрать (если это ещё не сделано автоматически) STM32F05x Flash.
7. На вкладке Utilites тоже надо поменять драйвер на ST-Ling Debugger.
8. Осталось создать файл кода с двумя функциями main и SystemInit. Причём, язык не важен: хоть си, хоть ассемблер. Я исходники помещаю в папочку source. И надо не забыть добавить файл после сохранения в проект, чтобы Кейл знал, что его тоже компилировать надо.
9. При первой попытке загрузки кода или отладки, ст-линк попросит обновить прошивку. Не стоит отказываться. После окошка с просьбой переподключить, переподключите отладочную плату. После чего никаких окошек не будет и отладчик обновится без проблем.
Например, на си:
Проект должен собраться. Пока что он абсолютно бесполезен и ничего не делает. Но зато он есть и собирается =)
На асме я писал это для STM32F4. Но чуть позже напишу проект и на ассемблере, где покажу отличия от F4.
Если Кейл достаточно старый (он должен хотя бы знать о Cortex-M0), то можно выбрать это ядро, а остальные настройки забить вручную.
Они, в основном, заключаются в сегментах памяти:
Флеш: смещение 0x08000000, размер 0x10000;
SRAM: смещение 0x20000000, размер 0x2000;
Ещё можно задать путь к файлу sfr, где расписаны все регистры периферии (на базе CMSIS-SVD). Оно позволит смотреть в специальном окошке (View->System Viewer->...), где что записано. В новом кейле файл stm32f0xx.sfr уже есть. В старом не знаю, не знаю и понимает ли он такие файлы, вроде, стандарт недавний.
Единственное, что старый Кейл может не знать о способах прошивки этих контроллеров, потому придётся это делать через стороннюю программу. Или обновлять Кейл.
Про создание проекта для STM32F4Discovery я уже писал, там же и примеры ряда программок несложных на си и ассемблере.
Проект.Следующее >>
@темы:
arm,
программизмы,
электроника,
stm32f0discovery,
stm32
Ни в один из регистров ADC запись не проходит ADC1->CR |= (uint32_t)ADC_CR_ADEN; не работает.
Ни в симуляторе, ни в железе KEIL-овский просмотрщик периферии не показывает изменений. Естественно ничего не работает как следует
Может есть какие мысли по этому поводу? Заранее спасибо)
Обычно регистры периферии не изменяются, если не подано на неё тактирование. За исключением пары случаев типа часов, где есть модуль защиты от записи.
В разделе тактирования есть бит RCC->CR2 HSI14ON включаю его и жду включения
RCC->CR2 |= RCC_CR_HSION;
while((RCC->CR2 & RCC_CR_HSION) == 0);
После этого все равно в регистры ADC не записываются программой
Я про регистр RCC->APB1ENR и типа того (их штук 3-5), в котором подаётся тактирование отдельно на каждую периферию. В каком-о из них есть бит, ответственный за тактирование ADC. Правда, нужно ещё включить тактирование порта, чтобы выводы можно было перевести в аналоговый режим.
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN ;
Теперь все трудится