stm32 튜토리얼
stm32 시작하기
수색…
비고
이 절에서는 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 디스커버리 키트를 사용할 것이다. (다른 보드도 사용할 수 있습니다.)
SW4STM32를 열고 새로운 C 프로젝트를 만듭니다 : 파일 → 새로 만들기 → C 프로젝트
"STM32F4_Discovery-Blinky" 와 같은 이름을 지정하고 Project Type 목록에서 Executable / Ac6 STM32 MCU Project를 선택하십시오. 기본적으로 사용 가능한 유일한 툴 체인은 Ac6 STM32 MCU GCC 입니다. 다음을 클릭하십시오.
다음 단계는 디버그 / 릴리스 설정 이며 다음을 클릭하여 건너 뛸 수 있습니다.
보드 선택 . 이 예제에서 STM32F4 Discovery 또는 새로운 사용자 정의 보드를 추가 할 수 있으므로 기존 보드를 선택할 수 있습니다.
다음 단계는 프로젝트 펌웨어 구성 입니다. 펌웨어 없음 , 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가 디스커버리 키트 의 회로도를 사용하는지 결정합니다.
실제 핀 및 포트 이름은 이미 #define 및 enum 의해 숨겨져 있으며 Ctrl + 클릭 을 사용하여이를 추적합니다.
-
main내부에서HAL_Init()함수를 호출하여 모든 주변 장치를 재설정하고 Flash 인터페이스와 Systick을 초기화합니다. (Systick은 깜빡이는 데 지연을 생성하는 데 사용됩니다.) - 시스템 시계를 구성해야합니다. STM32CubeMX 클럭 구성 기능을 사용 하거나 참조 매뉴얼을 사용하여 수행 할 수 있습니다. 이 예에서 시스템 클록은 외부 8MHz 크리스털 발진기 (HSE)가 제공하는 내부 PLL (Phase Locked Loop)에 의해 공급됩니다. 프리 스케일 레이터는 최대 가용 주파수 인 F4 디스커버리의 경우 168MHz를 달성하도록 설정되었습니다.
- 주변기기 초기화 (이 경우 GPIO 핀).
- 무한 루프 안에서 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 포트와 같은 기타 디버그 매개 변수는 프레임 워크에 의해 자동으로 생성되고 채워집니다. 마지막으로 디버그 버튼을 클릭하십시오.



