Шаблоны проектов 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

Комментарии (3)

RSS свернуть / развернуть
После создания проекта по шаблону он должен сразу полностью компилиться, выдавая одно предупреждение по поводу «ITC_GetCPUCC»(на него надо забить).
А можно этот косяк исправить? Или это фатально?
0
Дело в функции ITC_GetCPUCC() в файле stm8l15x_itc.c.
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
0
Спасибо огромное за такое великое дело, я только начинаю осваивать программирование микроконтроллеров, и возникла большая проблема с установкой библиотек, потратил часов 12 наверное чтобы самому разобраться и сделать, но не тут то было… и Ваш топик мне очень и очень помог!!! Спасибо огромное!
+1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.