2024.01.08
TOOL
Software - STM32_CUBE_IDE
Hardware(board) - STM32(NUCLEO_F411RE)
Architecture - cortex-m4
32bit
Frequency :100MHz
MHz당 1.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번지 주소라면 Address에 100이라는 주소를 보내고 그 주소의 값을 읽게된다.
core에서 100이라는 주소가 가게 된다.
그럼 그 주소가 연결되어있는 부분은 전부 전송
WR / RD값에 따라 값을 읽고 쓰게되는데
000이 만약 되어있으면 ROM만 DATA를 읽게된다.
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를 키기 위해선 어떻게 해야할까?
PA가 GREEN_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
GPIO의 BLOCK_DIAGRAM
INPUT_OUTPUT에 대한 설정
16PIN이 있고 각, 각, 각 PIN설정이 가능함
Clock speed 설정
ODR에 값을 쓰는대로 만들어줌
OUPUT DATA REG
5번값에 따라 값이 달라짐
이렇게 하면 직접적으로 reg값을 건드려서 동작시키기게 된다.
우리가 GPIOA PIN을 5번을 OUTPUT으로 설정했다.
그러나 여기서
PC8번과 PA12, PB1
RED / GREEN / YELLOW를 설정하여 빵 판에 연결하여, LED동작을 시켜보자
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 |