수색…


비고

이 절에서는 stm32가 무엇인지, 왜 개발자가 그것을 사용하고자하는지에 대한 개요를 제공합니다.

또한 stm32 내의 큰 주제를 언급하고 관련 주제에 링크해야합니다. stm32의 설명서는 새로운 기능이므로 해당 관련 항목의 초기 버전을 만들어야 할 수도 있습니다.

STM32 란 무엇입니까?


STM32는 ST 마이크로 일렉트로닉스가 개발 한 32 비트 플래시 마이크로 컨트롤러 제품군이다. ARM® Cortex®-M 프로세서를 기반으로하며 매우 높은 성능, 실시간 기능, 디지털 신호 처리 및 저전력, 저전압 작동을 결합한 32 비트 제품을 제공합니다.

각 시리즈, 개발 도구 및 부품 번호 디코딩에 대한 자세한 설명은 Wikipedia 에서 찾을 수 있습니다.

제품 시리즈

Cortex-M0 / -M0 + Cortex-M3 Cortex-M4 Cortex-M7
고성능 : STM32F2 STM32F4 STM32F7 , STM32H7
주류: STM32F0 STM32F1 STM32F3
초 저전력 : STM32L0 STM32L1 STM32L4

개발 보드

STM32 Nucleo ( mbed 가능 ) 디스커버리 키트 평가 보드
일반적인 사용 사례 : 유연한 프로토 타이핑, 커뮤니티 프로토 타이핑, 독창적 인 데모 완벽한 기능 평가
확장 가능성 : +++ ++ ++
연결성 : Arduino ™, ST, Morpho

버전

번역 출시일
1.0.0 2016-11-01

SW4STM32 및 HAL 라이브러리를 사용하여 깜박임 LED 예제로 처음 설치

( 참고 : STM32에는 즉시 사용할 수있는 많은 IDE, 툴 체인 및 라이브러리가 있습니다. 다음 설치는 최소한의 노력만으로도 작동하지만 많은 사람들 중 하나 일뿐입니다. 다른 사람을 자유롭게 탐험 해보십시오. 이 예제에서는 누군가가 여기에서 사용할 도구를 사용하도록 강요합니다.)


IDE 설치

STM32 용 System Workbench : Windows, Linux 및 OS X에서 무료로 사용할 수있는 IDE. AC6 에서 제작되었으며 OpenSTM32 커뮤니티 웹 사이트 에서 등록한 후 다운로드 할 수 있습니다.

IDE 자체는 Eclipse를 기반으로하지만 STM32 개발을위한 몇 가지 추가 기능이 다음과 같이 제공됩니다.

  • Ac6 STM32 MCU GCC 툴 체인
  • 대상 보드에 따라 자동으로 생성 된 디버그 구성이있는 OpenOCD 및 GDB (arm-none-eabi-gdb)
  • 칩을 프로그램하거나 지우는 붙박이 선택권

자신의 보드를 만들기 전에 STM32로 시작하려면 온보드 SWD (Serial Wire Debug) 프로그래머 / 디버거 인 ST-Link와 함께 제공되는 Discovery , Nucleo 또는 Eval 보드 를 시험해 보는 것이 좋습니다.

프로젝트 만들기

이 예제는 STM32F407VG 마이크로 컨트롤러를 특징으로하는 STM32F4 디스커버리 키트를 사용할 것이다. (다른 보드도 사용할 수 있습니다.)

  1. SW4STM32를 열고 새로운 C 프로젝트를 만듭니다 : 파일 → 새로 만들기 → C 프로젝트

  2. "STM32F4_Discovery-Blinky" 와 같은 이름을 지정하고 Project Type 목록에서 Executable / Ac6 STM32 MCU Project를 선택하십시오. 기본적으로 사용 가능한 유일한 툴 체인은 Ac6 STM32 MCU GCC 입니다. 다음을 클릭하십시오.

    여기에 이미지 설명을 입력하십시오.

  3. 다음 단계는 디버그 / 릴리스 설정 이며 다음을 클릭하여 건너 뛸 수 있습니다.

  4. 보드 선택 . 이 예제에서 STM32F4 Discovery 또는 새로운 사용자 정의 보드를 추가 할 수 있으므로 기존 보드를 선택할 수 있습니다.

    여기에 이미지 설명을 입력하십시오.

  5. 다음 단계는 프로젝트 펌웨어 구성 입니다. 펌웨어 없음 , SPL ( Standard Peripheral Library ) 또는 HAL ( Hardware Abstraction Layer ) 중에서 선택하십시오. 어떤 것이 개발에 더 적합한 지에 대해 질문을 받았지만이 질문은이 예에서 범위를 벗어납니다. 이 예제는 현재 ST Microelectronics에서 지원하는 HAL 라이브러리를 사용합니다. HAL을위한 추가 소프트웨어 툴은 초기화 코드 생성기 인 STM32CubeMX 입니다. 또한 STM32CubeFx 또는 STM32CubeLx 소프트웨어 패키지에서 몇 가지 예제 애플리케이션을 사용할 수 있습니다. 대상 펌웨어를 다운로드하십시오. 누락 된 경우 "프로젝트의 저수준 드라이버 추가""응용 프로그램의 소스로" 옵션을 선택하는 것이 좋습니다. 마지막으로 마침을 클릭하십시오.

    여기에 이미지 설명을 입력하십시오.

깜박임 LED 응용

이 프로젝트는 STM32F4 디스커버리로 생성 되었으므로 디스커버리 키트의 주변 장치 (가속도계, 오디오)를 인터페이스하는 데 사용할 수있는 / STM32F4_Discovery-Blinky / Utilities / STM32F4-Discovery / 프로젝트 폴더 아래에 이미 몇 가지 기능이 있습니다. , LED, 누름 버튼). 이 예제에서 void BSP_LED_Init(Led_TypeDef Led)void BSP_LED_Toggle(Led_TypeDef Led) 함수는 stm32f4_discovery.c 파일에서 사용되어 녹색 LED 인 LED4 를 깜박입니다. 어떤 LED가 디스커버리 키트 의 회로도를 사용하는지 결정합니다.

여기에 이미지 설명을 입력하십시오.

실제 핀 및 포트 이름은 이미 #defineenum 의해 숨겨져 있으며 Ctrl + 클릭 을 사용하여이를 추적합니다.

  1. main 내부에서 HAL_Init() 함수를 호출하여 모든 주변 장치를 재설정하고 Flash 인터페이스와 Systick을 초기화합니다. (Systick은 깜빡이는 데 지연을 생성하는 데 사용됩니다.)
  2. 시스템 시계를 구성해야합니다. STM32CubeMX 클럭 구성 기능을 사용 하거나 참조 매뉴얼을 사용하여 수행 할 수 있습니다. 이 예에서 시스템 클록은 외부 8MHz 크리스털 발진기 (HSE)가 제공하는 내부 PLL (Phase Locked Loop)에 의해 공급됩니다. 프리 스케일 레이터는 최대 가용 주파수 인 F4 디스커버리의 경우 168MHz를 달성하도록 설정되었습니다.
  3. 주변기기 초기화 (이 경우 GPIO 핀).
  4. 무한 루프 안에서 LED 토글 링과 HAL_Delay() 함수를 호출하십시오. HAL_Delay()Systick 사용하고 밀리 초 단위로 지연을 생성합니다.

전체 코드는 다음과 같습니다.

#include "stm32f4xx.h"
#include "stm32f4_discovery.h"
            
void SystemClock_Config(void);

int main(void)
{
    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    HAL_Init();

    /* Configure the system clock */
    SystemClock_Config();

    /* Initialize one of the LED GPIO pin */
    BSP_LED_Init(LED4);

    while(1)
    {
        BSP_LED_Toggle(LED4);
        HAL_Delay(1000);       // in miliseconds
    }
}

/**
 * @brief  System Clock Configuration
 *         The system Clock is configured as follow :
 *            System Clock source            = PLL (HSE)
 *            SYSCLK(Hz)                     = 168000000
 *            HCLK(Hz)                       = 168000000
 *            AHB Prescaler                  = 1
 *            APB1 Prescaler                 = 4
 *            APB2 Prescaler                 = 2
 *            HSE Frequency(Hz)              = HSE_VALUE
 *            PLL_M                          = (HSE_VALUE/1000000u)
 *            PLL_N                          = 336
 *            PLL_P                          = 2
 *            PLL_Q                          = 7
 *            VDD(V)                         = 3.3
 *            Main regulator output voltage  = Scale1 mode
 *            Flash Latency(WS)              = 5
 * @param  None
 * @retval None
 */
void SystemClock_Config(void)
{
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_OscInitTypeDef RCC_OscInitStruct;

  // Enable Power Control clock
  __PWR_CLK_ENABLE();

  // The voltage scaling allows optimizing the power consumption when the
  // device is clocked below the maximum system frequency, to update the
  // voltage scaling value regarding system frequency refer to product
  // datasheet.
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  // Enable HSE Oscillator and activate PLL with HSE as source
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

  // This assumes the HSE_VALUE is a multiple of 1MHz. If this is not
  // your case, you have to recompute these PLL constants.
  RCC_OscInitStruct.PLL.PLLM = (HSE_VALUE/1000000u);
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  // Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
  // clocks dividers
  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK
      | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
}

망치로 건축하십시오 여기에 이미지 설명을 입력하십시오. 프로젝트 폴더를 마우스 오른쪽 단추로 클릭하고 대상 → 프로그램 칩 ... 옵션을 선택하여 응용 프로그램을 다운로드하십시오.

다운로드하는 또 다른 방법은 디버그 를 사용 하는 것 입니다. 그렇게하려면 버그 아이콘 옆에있는 화살표를 클릭하십시오. 여기에 이미지 설명을 입력하십시오. 도구 모음에서 디버그 구성 ... 메뉴를 엽니 다. 새로운 Ac6 STM32 디버깅 구성을 작성하고 C / C ++ Application 필드가 비어 있으면 다음을 작성하십시오.

디버그 \ STM32F4_Discovery-Blinky.elf

OpenOCD 구성 파일 및 사용 된 Telnet 및 GDB 포트와 같은 기타 디버그 매개 변수는 프레임 워크에 의해 자동으로 생성되고 채워집니다. 마지막으로 디버그 버튼을 클릭하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow