сайт для палких паяльників

IAR – IAR Embedded Workbench for ARM 7.80

Установка и настройка. Создание первого проекта.
Официальный сайт: https://www.iar.com/
Платная среда разработки для микроконтроллеров STM32. В бесплатном варианте имеет ограничение либо на 30 дней, либо по объему программы до 32Кб.
Скачать можно с официального сайта.

Установка и настройка 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 и указываем используемый отладчик. В моем случае это 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 при компиляции таких предупреждений уже не будет.

Успехов.

Смотри также:

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

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

 
Translate
Архіви

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