상세 컨텐츠

본문 제목

STM32-1

설계공부/STM32

by 썽심 2024. 1. 8. 20:38

본문

728x90

2024.01.08

 

TOOL

Software - STM32_CUBE_IDE

Hardware(board) - STM32(NUCLEO_F411RE)

Architecture - cortex-m4

 

32bit

Frequency :100MHz

MHz1.25MIPS

최대 512kbyte Flash memory

128Kbyte Sram

 

Cortex4 Cortex3차이

fpu차이, 곱하기 연산이 있는가 없는가 차이

 

 

구조

 

 

외부 오실레이터 부분

 

ARM의 장점

각각 주변장치에 CLK을 넣어 줄수도있고 없을 수도있다.

장점 : 저전력을 만들 수 있다.

 

 

1. 사용한다 했을 때 제일먼저 해야하는 것 CLOCK설정을 해야한다.

Memory map

Memory map 절대 못바꿈

공장에서 찍어서 만들어준 것.

 

바꾼다하면 새롭게 SoC를 만드는것이다.

Memory maping에 대한 내용이 나온다.

 

 

 

 

Peripheral memort영역에는

Ahb / APB / PIO / UART 등등등등

연결이 되어있다고 보면된다.

 

그 메모리에 주소가 할당되어있고

 

그 주소 마다 동작하는게 다르다.

Ex) 0x4000 0000 – 0x40000 03FF timer영역이다.

 

 


BUS 메모리 할당하는 방법?

SoC를 한다하면 메모리메핑 부분은 가장 중요한 부분이다.

 

*연습*

이걸 보고 한번 메모리매핑해보자.

80C31 회로도이다.

 

이렇게 주소가 연결(SHORT)되어있다.

 

 

이 회로의 메모리 메핑에서 제일 중요한 부분은

DECODER 74LS138부분이다

 

디코더를 통해 동작을 나눠 동작시켜줄 수 있다.

 

 

74LS138의

Data Sheet_ Dicoder_table

 

이부분을 이용하여 memory maping을 하고자 한다.

 

 

CHIP ENABLE = CHIP SEL

머리에 바가 있으면

LOW ACTIVE = LOW상태일 때 동작

 

 

 

예시

A13 : 0

A14 : 1

A15 : 0

 

ROM : H

RAM : H

8255 : L

 

8255만 동작하고 나머지는 동작안한다

 

 

 

만약 ROM 선택한다 하면

RAM / IO 선택 안하고 싶으면 이렇게 000이 되었을 때

ROM이 선택되어 진다.

 

 

RAM선택하고싶으면 001

 

 

8255 (IO이다, GPIO랑 비슷_

010이 되면 8255가 선택 된다.

 

 

 

읽고싶은 주소가 100번지 주소라면 Address100이라는 주소를 보내고 그 주소의 값을 읽게된다.

core에서 100이라는 주소가 가게 된다.

그럼 그 주소가 연결되어있는 부분은 전부 전송

WR / RD값에 따라 값을 읽고 쓰게되는데

000이 만약 되어있으면 ROMDATA를 읽게된다.

 

200번지 주소를 읽고 싶다면 0X2200이라는 주소를 주면 RAM의 주소가된다.

 

 

0010 << 0x2XXX를 나타냄

200번지 주소가 붙으면

0x2200이 된다.

 

 

메모리 매핑한 것

 

 

AHB BUS PROTOCOL

Memory map이다.

Broad Casting : 송신 호스트가 전송한 데이터가 네트워크에 연결된 모든 호스트에 전송되는 방식

 

core에서 address에 Broad Casting을 하고 

address를 정해주는게

Decoder.

 

해당 페리페럴에 주소를 찝어 주는게 포인터방식


 

메모리 매핑을 통해 LED켜기

보드 – NUCLEO_F411RE

project생성

 

 

Board선택

STM32(NUCLEO_F411RE)

 

 

clock설정

 

설정해준 모습

 

AHB / APB 버스 설정을 위해

CLOCK 레퍼런스를 확인함

 

이부분이 지금 CLOCK설정하는 부분

 

 

그렇다면 LED를 키기 위해선 어떻게 해야할까?

PAGREEN_LED

 

 

LOOP돌도록 만들었음

 

컴파일

 

실행하면

보드가 구버전이라 업데이트 해야해서 해줌

 

 

다시 실행하면 보드가 깜빡임

 

이 코드를 만든게 CUBE_M_X가 만듬

이사이가 아닌 밖에 코드를 만들어 두고, main.c를 새로 만들면 사라지게 된다.

따라서 이사이에 넣어줘야한다.

 

 

 

HSI(내부클럭)가 아닌 HSE(외부클럭)

외부클럭 쓰는이유 : 안정도가 더 높음

 

CFGR_DATA_SHEET

 

 

선택 스위치 부분 _ 뭘 선택 할 것인지

 

 

ENABLE부분

 

여러 Peripheral들 중에 0번지를 선택한다. 하면 어떻게 할 것인가?

 

 

0x40023830이 선택한 것의 주소다

 

REG주소를 건들여보자!

RCC를 만들어 보자

일단 CLOCK설정만 해보자.

 

 

이걸 쓰려면 위에다

선언을 해줘야 함

 

그러나 이것도 상수와 같다

 

따라서 * << casting을 해줘야함

 

 

같은 형식

 

 

2. GPIO 설정을 해줘야함

GPIO부분을 설정

이걸 자동으로 설정해주는 툴이 

 

OUTPUTSPEED : DATA 전송 속도

LOW에서 HIGH

HIGH에서 LOW로 변경되는 속도가

 

 

PUSH PULL UP / PULL DOWN

 

GPIOBLOCK_DIAGRAM

 

 

 

INPUT_OUTPUT에 대한 설정

16PIN이 있고 각, , PIN설정이 가능함

 

 

Clock speed 설정

 

 

ODR에 값을 쓰는대로 만들어줌

OUPUT DATA REG

5번값에 따라 값이 달라짐

 

이렇게 하면 직접적으로 reg값을 건드려서 동작시키기게 된다.

 

 

우리가 GPIOA PIN5번을 OUTPUT으로 설정했다.

그러나 여기서

PC8번과 PA12, PB1

RED / GREEN / YELLOW를 설정하여 빵 판에 연결하여, LED동작을 시켜보자

728x90

'설계공부 > STM32' 카테고리의 다른 글

STM32-5 (Stop_Watch/Ultra_Sonic)  (1) 2024.01.13
STM32-4 (Stop_Watch)  (0) 2024.01.11
STM32-2 (Button Led, State Machine)  (1) 2024.01.09

관련글 더보기