сайт для палких паяльників
  • Facebook
  • Twitter
  • Google Plus
  • Add to favorites
  • Email
  • Print
  • RSS

Эта статья на русском языке

IAR – IAR Embedded Workbench for ARM 7.80

Встановлення та налаштування. Створення першого проекту.
Офіційний сайт: https://www.iar.com/
Комерційне IDE для мікроконтролерів STM32. У безкоштовному варіанті має обмеження на 30 днів, або за обсягом програми до 32Кб.
Завантажити можна з офіційного сайту.

Встановлення і налаштування IAR

Встановлюємо IAR. Тут все просто – скачав, встановив. Після інсталяції IAR попросить реєстрацію. Потрібно зареєструвати IAR для безкоштовного використання. При реєстрації вказуємо варіант обмеження для безкоштовної версії на 30 днів, або за обсягом програми до 32Кб. Після реєстрації на електронну пошту прийде реєстраційний ключ. Вводимо ключ реєстрації.

Встановлення бібліотек SPL

IAR для STM32 встановлюється без бібліотек SPL. Тому потрібно завантажити бібліотеки з сайту st.com. Для STM32F103 посилання: http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard -peripheral-libraries / stsw-stm32054.html

Створимо папку, у якій будуть зберігатися наші проекти, наприклад C:\STM32_Projects. У цій директорії створюємо папку Libraries і в неї розпаковуємо вміст архіву en.stsw-stm32054.zip (скачана бібліотека SPL). Точніше не весь архів, а вміст папки Libraries з архіву, решта нас мало цікавить.

Створюємо папку, в якій буде перший проект нашої програми:
C:\STM32_Projects\Example_First_Programm

Створюємо Workspace (меню File->New->Workspace)

Зберігаємо Workspace у папку C:\STM32_Projects (меню File->Save Workspace As…)

Створюємо проект (меню Project->Create New Project…)

Обираємо Tool chain: ARM

Зберігаємо проект у папку C:\STM32_Projects\Example_First_Programm.

Отримуємо наступну картину:

Додаємо групу для бібліотеки з ім’ям Lib (ім’я особливої ролі не відіграє)


До групи Lib додаємо файли з бібліотеки CMSIS:
C:\STM32_Projects\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar\startup_stm32f10x_md.s
C:\STM32_Projects\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c

Відкриваємо налаштування проекту:

В налаштуваннях на вкладці Target вказуємо Device

На вкладці Library Configuration вказуємо Use CMSIS і DSP library.

Переходимо у категорію C/C++ Compiler

На вкладці Preprocessor  в поле Additional include directories додаємо наступні шляхи:
C:\STM32_Projects
C:\STM32_Projects\Libraries
C:\STM32_Projects\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar
C:\STM32_Projects\Libraries\STM32F10x_StdPeriph_Driver\inc
C:\STM32_Projects\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

Краще вказувати відносні шляхи:
$PROJ_DIR$
$PROJ_DIR$\..\Libraries
$PROJ_DIR$\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar
$PROJ_DIR$\..\Libraries\STM32F10x_StdPeriph_Driver\inc
$PROJ_DIR$\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

Вказуємо Defined symbols:
STM32F10X_MD
USE_STDPERIPH_DRIVER

Переходимо в Категорію Output Converter і обираємо формат вихідного файлу.

Переходимо в Категорію Linker

Тут нам потрібно вказати Linker configuration file. Можна залишити як є. Але, якщо у подальшому планується редагувати цей файл, краще його скопіювати в папку проекту. Вмикаємо Override default і натискаємо кнопку з трьома крапками для вибору файлу.

Діалогове вікно відкриється у директорії з файлами icf. Знаходимо потрібний файл для нашого контролера, правою кнопкою миші викликаємо контекстне меню і виконуємо пункт Копіювати.

Далі переходимо у папку STM32_Project і вставляємо файл в папку нашого проекту.

Після чого заходимо в папку проекту і обираємо скопійований файл.

Тепер натиснувши кнопку Edit… можна редагувати icf файл свого проекту.

Переходимо у категорію Debugger і обераємо Driver. У моєму випадку це ST-Link.

У директорії проекту або в директорії C:\STM32_Projects\Libraries\ створюємо файл stm32f10x_conf.h
Наприклад, такого змісту:

/**
  ******************************************************************************
  * @file    stm32f10x_conf.h 
  * @author  MCD Application Team
  * @version V3.4.0
  * @date    10/15/2010
  * @brief   Library configuration file.
  ******************************************************************************
  * @copy
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>
  */ 

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_CONF_H
#define __STM32F10x_CONF_H

/* Includes ------------------------------------------------------------------*/
/* Uncomment the line below to enable peripheral header file inclusion */
/* #include "stm32f10x_adc.h" */
/* #include "stm32f10x_bkp.h" */
/* #include "stm32f10x_can.h" */
/* #include "stm32f10x_cec.h" */
/* #include "stm32f10x_crc.h" */
/* #include "stm32f10x_dac.h" */
/* #include "stm32f10x_dbgmcu.h" */
/* #include "stm32f10x_dma.h" */
/* #include "stm32f10x_exti.h" */
/* #include "stm32f10x_flash.h" */
/* #include "stm32f10x_fsmc.h" */
/* #include "stm32f10x_gpio.h" */
/* #include "stm32f10x_i2c.h" */
/* #include "stm32f10x_iwdg.h" */
/* #include "stm32f10x_pwr.h" */
/* #include "stm32f10x_rcc.h" */
/* #include "stm32f10x_rtc.h"  */
/* #include "stm32f10x_sdio.h" */
/* #include "stm32f10x_spi.h" */
/* #include "stm32f10x_tim.h" */
/* #include "stm32f10x_usart.h" */
/* #include "stm32f10x_wwdg.h" */
/* #include "misc.h" */ /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */


/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Uncomment the line below to expanse the "assert_param" macro in the 
   Standard Peripheral Library drivers code */
/* #define USE_FULL_ASSERT    1 */

/* Exported macro ------------------------------------------------------------*/
#ifdef  USE_FULL_ASSERT

/**
  * @brief  The assert_param macro is used for function's parameters check.
  * @param  expr: If expr is false, it calls assert_failed function
  *   which reports the name of the source file and the source
  *   line number of the call that failed. 
  *   If expr is true, it returns no value.
  * @retval None
  */
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
  void assert_failed(uint8_t* file, uint32_t line);
#else
  #define assert_param(expr) ((void)0)
#endif /* USE_FULL_ASSERT */

#endif /* __STM32F10x_CONF_H */

/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/

Пишемо у main.c наступний код програми:

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

int main(void)
{
  int i;
  /* Initialize Leds mounted on STM32 board */
  GPIO_InitTypeDef  GPIO_InitStructure;
  /* Initialize LED which connected to PC13, Enable the Clock*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  /* Configure the GPIO_LED pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  while (1)
  {
    /* Toggle LED which connected to PC13*/
    GPIOC->ODR ^= GPIO_Pin_13;

    /* delay */
    for(i=0;i<0x100000;i++);
  }
}

Додаємо в проект файли stm32f10x_gpio.c, stm32f10x_rcc.c з папки C:\STM32_Projects\Libraries\STM32F10x_StdPeriph_Driver\src (вони використовуються в проекті)

Збираємо проект (меню Project-> Make або Project-> Rebuild All)

Під час компіляції можуть виникнути такі попередження:
Warning [25]: Label ‘Reset_Handler’ is defined pubweak in a section implicitly declared root C:\STM32_Projects\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar\startup_stm32f10x_md.s 124

Опис проблеми можна почитати тут:
https://www.iar.com/support/tech-notes/assembler/warning25-label-xxxxx-is-defined-pubweak-in-a-section-implicitly-declared-root/

Рішення наступне: Потрібно відкрити файл startup_stm32f10x_md.s (ми його вже додали в проект) і замінити рядки

SECTION .text:CODE:REORDER

на

SECTION .text:CODE:NOROOT:REORDER

Тобто по суті, додати NOROOT.

Після коригування файлу startup_stm32f10x_md.s такі попередження при компіляції мають зникнути.

Успіхів.

Дивись також:

2 комментария: IAR Workbench – IDE для STM32

  • БлудныйКот говорить:

    Спасибо, то что надо!
    Скажите, какая среда удобней Keil или IAR? и в чём их различия?

    • andre говорить:

      Выбор среды разработки – это как выбирать костюм. То что подошло мне может не подойти Вам. И никто не может запретить Вам иметь несколько костюмов на разные случаи. Эти обе среды платные и в бесплатном варианте имеют одинаковые ограничения. IAR компилирует более плотнее. Я долгое время работал с IAR для STM8 и немного привык к ней. Но Keil более популярный. Я тяготею к бесплатному GCC и использую CooCox.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

 
Translate
Архіви

© 2011-2017 Андрій Корягін, Кременчук, Україна