реклама на сайте
подробности

 
 
> IAR + CoLinkEx + STM32F107., Настройка проекта и инициализация камня с нуля
ang54
сообщение Apr 26 2011, 12:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 11-08-10
Из: Великий Новгород
Пользователь №: 58 862



Привет всем форумчанам. Я здесь новенький. Начал недавно осваивать Cortex M3, а точнее STM32F107VC, и наверное, как и многие другие, столкнулся с отсутствием четких инструкций по начальной настройке проекта и инициализации камня, хотя этот процес показался мне далеко не тривиальным.

Перерыл кучу документации и море топиков, в результате, более или менее разобрался, и хочу, по горячим следам, предложить результаты своего поиска другим, может это кому то сэкономит кучу времени.

Итак, у меня есть стартовый набор TE-STM32F107 (около 3000 р.) и отладчик SW RDI CoLinkEx (около 1000 р.). При плате есть CD, с программой "IAR Embedded Workbench for ARM, v. 5.50, 32K Kickstart Edition". Для разгона пойдет, главное с самим камнем разобраться.

Для CoLinkEx скачал с сайта CooCox драйвер "ColinkExUsbDriver-1.1.0.exe" и плагин для IAR "CoIARPlugin-1.2.0.exe". Поставил все это. Для отладчика сделал переходник IDC10->IDC20. При этом возникли непонятки с выводом TRST. Методом "научного тыка" выяснил, что его надо оставить в воздухе.

STM для работы со своими камнями предлагает на своем сайте библиотеку stm32f10x_stdperiph_lib. Ее можно использовать с драйверами периферии или без, работая только с регистрами. Но она все равно нужна. Насчет целесообразности использования библиотечных драйверов часто возникают споры.
Я, на основе работы с Tms320vc55xx и библиотеки CSL, пришел к такому выводу. Пока только осваиваешь новую платформу, и голова и так пухнет от моря новой информации, использовать подобные библиотеки можно и нужно. В дальнейшем, по мере накопления опыта, накапливается и раздражение по поводу явных ошибок, непонятных глюков и оверкода (из за претензии на универсальность). В следствии чего наступает частичный или полный отказ от библиотеки. И это нормально. Так как в ARM я, пока, полный чайник, буду работать с библиотекой.

1. На базе ряда примеров, типа IOToggle, создаю свой файл "main.c" (просто выкинул лишнее и использовал свой вывод PC6, на котором у меня висит светодиод).

CODE
// *************************************************************************
#include "stm32f10x.h" // регистры и биты камня от STM
void myDelay(__IO uint32_t nCount);
GPIO_InitTypeDef T_ini_PORTC;

int main(void)
{
#ifndef CFG_SIMUL
SystemInit();
#endif

// Разрешение тактирования модуля GPIOC (типа, разбудить)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
// конфигурируем PC6 как Push-Pull Out
T_ini_PORTC.GPIO_Pin = GPIO_Pin_6;
T_ini_PORTC.GPIO_Speed = GPIO_Speed_50MHz;
T_ini_PORTC.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &T_ini_PORTC);

while (1) {
myDelay(3*1000*500); // 28 tik, при 72МГ ~3*N mks -> ~500 ms
GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_SET);
myDelay(3*1000*500);
GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_RESET); }
}
// -------------------------------------------------------------------------
void myDelay(__IO uint32_t nCount)
{
for (; nCount != 0; nCount--);
}
// *************************************************************************


2. Создаю папку study3 для своего проекта и копирую туда ряд файлов.
При этом создаю следующую файловую структуру.

CODE
study3 -+
+- main.c
+- Proj -+- stm32f10x_conf.h (из ~\Project\Template)
+- stm32f10x_flash.icf (из ~\Project\Template\EWARMv5)
+- system_stm32f10x.c (из ~\Libraries\CMSIS\Core\CM3)

Здесь и далее символ '~' означает путь к библиотеке stm32f10x_stdperiph_lib. Конечно, копируются только те файлы библиотеки, что, возможно, будут модифицироваться в ходе работы над проектом.

3. Создаю в папке study3\Proj новый Empty проект. В нем уже есть две конфигурации: Debug и Release. Создаю группу STM_LIB. Включаю в дерево проекта следующие файлы:
main.c
STM_LIB\startup_stm32f10x_cl.s (из ~\Libraries\CMSIS\Core\CM3\startup\iar)
STM_LIB\system_stm32f10x.c (из study3\Proj)
STM_LIB\stm32f10x_gpio.c (из ~\Libraries\STM32F10x_StdPeriph_Driver\src)
STM_LIB\stm32f10x_rcc.c (то же)
Сохраняю Workspace как Proj\study3.eww. Теперь надо настроить проект.

4. В текущей конфигурации Debug задаю следующие опции:
1. В General/Target задаю свой Device - STM32F107xC

2. В General/Library... стоит Си библиотека Normal. Устраивает.

3. В Compiler/Optimizations стоит Low, я, для учебы, выбираю None.

4. Убеждаюсь, что в Compiler/Output стоит галочка "Genegate debug info"

5. В Compiler/List ставлю галочку "Output list file" и обе сопутствующие опции, на этапе учебы информации надо побольше.

6. В Compiler/Preprocessor в поле "Additional include" добавляю пути к включаемым файлам
.\.. (это к файлам папки study3)
~\Libraries\CMSIS\Core\CM3
~\Libraries\STM32F10x_StdPeriph_Driver\inc
~\Project\Template

7. Там же, в поле "Defined symbols" добавляю:
USE_STDPERIPH_DRIVER (не надо, если работать через регистры)
STM32F10X_CL (правильно выбрать свое семейство!)

8. Убеждаюсь, что в Assembler/Output стоит галочку "Genegate debug info"

9. В Linker/Config ставлю галочку "Overide default" и указываю местонохождение своей копии icf файла.

10. В Linker/List ставлю галочку "Genegate linker map file"

11. Согласно описанию плагина CoLinkEx к IAR, в Debugger/Setup/Driver выбираю протокол отладки RDI, затем в Debugger/RDI указываю путь к файлу CoIARPlugin\CoRDI.dll

12. в Debugger/Download ставлю галочки "Verify download", "Use flash loader" и "Overide default board file" и выбираю подходящий скрипт загрузчика - "FlashSTM32F10xxC.board"
(Пробовал "FlashSTM32F105xC.board" - полет тоже нормальный).

13. Жму OK, чтобы сохранить изменения конфигурации.

5. Удаляю конфигурацию Release и создаю ее вновь на базе Debug.

.4. В Compiler/Output снимаю галочку "Genegate debug info"

.8. В Assembler/Output снимаю галочку "Genegate debug info"

.11. В Debugger/Setup выбираю Simulator, хотя подозреваю, что все равно, что выбирать, так как нет отладочной информации.

6. Создаю новую конфигурацию Simul на базе Debug

.7. В Compiler/Preprocessor в поле "Defined symbols" добавляю: CFG_SIMUL

.11. В Debugger/Setup выбираю отладку через Simulator.

Итак, проект создан и сконфигурирован. Теперь надо правильно иницииализировать ядро и периферию своего камня.

Долго не мог понять, как правильно использовать SystemInit(). В ряде примеров, в начале main(), стоит комментарий (вот его перевод):

/* На этот момент тактовый МК уже сконфигурирован, это сделано функцией
SystemInit(), которая вызывается из файла startup_stm32f10x_xx.s перед
заходом в функцию main(). Чтобы изменить уставки по умолчанию см.
файл system_stm32f10x.c */

А в других примерах есть явный вызов ее, как первой функции в main().

Перекопав кучу примеров, пришел к выводу: примечание относится к примерам из пакетов, типа stm32vldiscovery_package, где разработчик Evalution Board модифицировал файлы "startup_stm32f10x_xx.s" и файл "system_stm32f10x.c".
А если брать библиотеку прямо от STM (по крайней мере в версии 3.1.0), то требуется прямой вызов SystemInit(). При этом, в конфигурации Simul нас ждет засада: так как мы не получим бита готовности RCC_CR_HSERDY, то попадаем в бесконечный цикл. Чтобы избежать этого, надо либо модифицировать файл, убрав этот цикл (если нужно пройтись по нему под отладчиком), либо использовать символ CFG_SIMUL для условной компиляции функции (см. мой main()).

Точка входа в библиотеку - "stm32f10x.h" (из Libraries\CMSIS\Core\CM3). По умолчанию файл настроен на семейство STM32F10X_CL. Для смены семейства достаточно изменить символ в опциях проекта.

Файл "system_stm32f10x.c" по умолчанию настроен на частоту 72 МГц при кварце 25 МГц. А как это? Если в наличии только умножитель?. Копаю код и документацию. Похоже документ "STM32F105_107_Reference manual.pdf" делался методом Copy/Paste. Иначе, как объяснить, что регистры, специфичные для CL (а весь документ о камнях этой линии) спрятаны в отдельной 7 главе, где есть регистр CFGR2, который уже содержит биты делителя. А нигде, в общих обзорах по Cortrex, это не звучало. Вопрос снят.

В файле "stm32f10x_conf.h" выбираю периферию, пока только RCC и GPIO.
Компилирую, линкую, дебажу, полет нормальный.

Ну вот. Проект по этой инструкции создан. Плата лежит на столе и мигает диодом. Идет как симуляция, так и пошаговая отладка с помощью CoLinkEx.
Пробовал создавать BIN файл командой:
ielftool.exe --bin Release.out Release.bin

и грузить его по USART с помощью программы "Flash Loader Demonstrator", скачанной с STM сайта. Все дышит. Теперь можно двигаться дальше.

Допускаю, что в силу, пока, низкой квалификации, где то допустил ляп, который сейчас не мешает, но позже может выйти боком. Так что, если кто из местных Гуру обнаружит такое, прошу ткнуть носом, буду только благодарен.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ang54   IAR + CoLinkEx + STM32F107.   Apr 26 2011, 12:17


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01352 секунд с 7
ELECTRONIX ©2004-2016