Шаблоны проектов IAR для STM8S/STM8L SPL


Честно говоря запарился я на каждый проект перетаскивать исходники, настраивать пути, прописывать хедеры и прочее прочее. И наконец-то созрел сделать себе нормальные шаблоны. Лучше ведь поздно чем никогда, верно?
И для того чтобы не забыть, что и где я правил в оригинальной библиотеке, да и чтобы где-то забэкапить результаты своих трудов решил написать эту заметку. Ну а если кому-то это поможет сэкономить время — буду только рад =)
Для создания шаблонов использовался IAR 1.42.3, и библиотеки STM8S SPL v2.2.0, STM8L51x SPL v1.6.1.
Установка
Для установки нужно всего лишь распаковать архивы вc:\Program Files (x86)\IAR Systems\Embedded Workbench 6.5\stm8\config\template\project\
Собственно в папках содержатся структуры будущих проектов, а в файлах с расширением .projtempl находится описание шаблона и полный список его файлов.
STM8L15x SPL
После создания проекта по шаблону он должен сразу полностью компилиться, выдавая одно предупреждение по поводу «ITC_GetCPUCC»(на него надо забить).В настройках проекта сразу выбран STM8L152C6 (STM8L-DICOVERY). Там же в настройках компилятора задефайнено следующее:
STM8L15X_MD
HSE_VALUE=((uint32_t)16000000)
LSE_VALUE=((uint32_t)32768)
HSI_VALUE=((uint32_t)16000000)
LSI_VALUE=((uint32_t)38000)
Соответственно, чтобы подправить семейство или тактовые частоты, достаточно просто подправить эти дефайны. Ну а если кому-то больше нравится править внутри хедеров, то эти дефайны могут быть найдены в stm8l15x.h
Отличие от исходной библиотеки заключается в организации прерываний:
- файл stm8l15x_it.h. Выкинул все лишнее, оставив прототипы функций-обработчиков прерываний.
- Файл stm8l15x_it.с. Состоит только из заглушек обработчиков вида:
... #ifndef ADC1_COMP_IRQ //ADC1/Comparator Interrupt routine. INTERRUPT_HANDLER(ADC1_COMP_IRQHandler,18) { while (1){}; } #endif ...
- файл stm8l15x_conf.h. По умолчанию закоментированы хедеры всех периферийных блоков, кроме stm8l15x_clk.h и stm8l15x_gpio.h. Добавил блок дефайнов вида:
Работает так: если дефайн закоментирован, то при возникновении случайно разрешенного прерывания контроллер мертво повисает в обработчике-заглушке. Для того чтобы воспользоваться обработчиком в своих целях — раскоментируем нужный дефайн, и размещаем обработчик там где хочется./* Uncomment the line below to create your own interrupt handlers */ //#define TRAP_IRQ /* TRAP */ //#define FLASH_IRQ /* FLASH EOP/PG_DIS */ //#define DMA1_CHANNEL0_1_IRQ /* DMA1 Channel0/1 */ //#define DMA1_CHANNEL2_3_IRQ /* DMA1 Channel2/3 */ ...
STM8S SPL
После создания проекта по шаблону он также должен сразу полностью компилиться, выдавая такое же предупрежедение.В настройках проекта сразу выбран STM8S003F3. Там же в настройках компилятора задефайнено следующее:
STM8S003
HSE_VALUE=((uint32_t)16000000)
HSI_VALUE=((uint32_t)16000000)
LSI_VALUE=((uint32_t)128000)
В этой библиотеке пришлось править чуть больше, так как она рассчитана на большое количество мк с разной периферией, а следовательно щедро приправлена директивами условной компиляции.
Подвергнуты изменениям:
- файлы stm8l15x_conf.h, stm8l15x_it.h, stm8l15x_it.с.Изменения аналогичны правкам в STM8L SPL выше.
- файлы stm8s_adc1.c, stm8s_adc2.c, stm8s_can.c, stm8s_uart1.c, stm8s_uart2.c, stm8s_uart3.c, stm8s_uart4.c, stm8s_tim2.c, stm8s_tim3.c, stm8s_tim4.c, stm8s_tim5.c, stm8s_tim6.c. Все тело этих файлов заключено в директивы условной компиляции, аналогичные директивам в stm8s.h в разделе «Peripherals declarations». Просто структуры некоторых периферийных блоков не будут создаваться, если выбрано семейство мк, где они отсутствуют. В файлах же идет активное обращение к этим структурам, и чтобы избежать ошибок, нужно либо удалять файлы, либо оборачивать их в блоки условной компиляции.
Если вдруг найдутся ошибки, то пишите — исправлю.
- +1
- 05 апреля 2015, 18:04
- 1essor1
- 2
Файлы в топике:
SPL_STM8L15x_template.zip, SPL_STM8S_template.zip
После создания проекта по шаблону он должен сразу полностью компилиться, выдавая одно предупреждение по поводу «ITC_GetCPUCC»(на него надо забить).А можно этот косяк исправить? Или это фатально?
- zhelezyaka
- 24 мая 2015, 01:12
- ↓
Дело в функции ITC_GetCPUCC() в файле stm8l15x_itc.c.
Вообщем-то там так и написано: «Ignore compiler warning, the returned value is in A register».
Если не используешь функции из этого файла, то можешь сделать так: ПКМ на файле stm8l15x_itc.c в дереве проекта->Options->Exclude from build
uint8_t ITC_GetCPUCC(void)
{
#ifdef _COSMIC_
_asm("push cc");
_asm("pop a");
return; /* Ignore compiler warning, the returned value is in A register */
#elif defined _RAISONANCE_ /* _RAISONANCE_ */
return _getCC_();
#else /* _IAR_ */
asm("push cc");
asm("pop a"); /* Ignore compiler warning, the returned value is in A register */
#endif /* _COSMIC_*/
}
Вообщем-то там так и написано: «Ignore compiler warning, the returned value is in A register».
Если не используешь функции из этого файла, то можешь сделать так: ПКМ на файле stm8l15x_itc.c в дереве проекта->Options->Exclude from build
Спасибо огромное за такое великое дело, я только начинаю осваивать программирование микроконтроллеров, и возникла большая проблема с установкой библиотек, потратил часов 12 наверное чтобы самому разобраться и сделать, но не тут то было… и Ваш топик мне очень и очень помог!!! Спасибо огромное!
- Brathobbit
- 05 января 2017, 04:33
- ↓
Комментарии (3)
RSS свернуть / развернуть