2024.01.09
TOOL
Software - STM32_CUBE_IDE
Hardware(board) - STM32(NUCLEO_F411RE)
Architecture - cortex-m4
어제에 이어서 STM32를 이용한 LED제어를 했다.
시간에 간격마다 RED / GREEN / YELLOW LED를 제어 했는데
기존 코드 처럼 만들게 된다면.
Define이 점점 더 많아진다.
그럼 어떻게 해야할까?
구조체로 바꿔보자.
메모리 모양이다.(자료구조형을 만든 것)
그 구조의 모형은
4byte 만큼 할당해준 mode register다.
그 다음 4byte OSPEEDR
그 다음 4byte PUPDR
그 다음 4byte IDR / 그 다음 4byte ODR / 그 다음 4byte BSRR / 그 다음 4byte LLKR /
그 다음 4byte PUPDR / 그 다음 4byte AFRL / 그 다음 4byte AFRH
이러한 모양으로 GPIO.TYPEDEF라는 자료구조형을 만든 것.
HAL DRIVE와 유사한 형태이다.
구조체에서 (->) 화살표는 무엇을 뜻하는가?
포인터에 접근 할 때는 화살표형식으로 접근한다.
자료형의 의미
Data type
Data = memory
Type = 구조
코드를 구조체로 바꾸어 보자.
Base 값만 수정하여 B와 C를 생성했다.
그러나 Base Address 말고는 바뀐 코드가 없다. 따라서 더 간략하게 바꿔보도록 했다.
Base 값만 수정하여 B와 C를 생성했다.
그러나 Base Address 말고는 바뀐 코드가 없다. 따라서 더 간략하게 바꿔보도록 했다.
(GPIO_TypeDef *) : 자료형주소
GPIOA_BASE : 숫자
구조체를 선언한 뒤
GPIOA->MODER |= (1<<10); 이것처럼 포인터 형식으로 바꿨다
해당 코드는 위와 아래가 같은 동작방식이다.
구조체에서 (->) 화살표는 무엇을 뜻하는가?
주소에 접근 할 때는 화살표형식으로 접근한다.
자료형의 의미
Data type
Data = memory
Type = 구조
해당 부분인
RCC_TYPE_DEF를 찾아서 붙여 넣어줌
Drivers > CMSIC > Device > ST > STM32F4XX > Include > stm32f411xe.h
보드동작은 어제와 동일하게 동작함.
Void : 포인터 사용할 때 사용
자료(구조) / *주소 / 핀번호 / 상태
이후 좀 더 직관적으로 설계하기 위해 변수에 의미부여를 행하였다.
변수에 의미부여를 해보자.
MAIN : CALLER
LightWrite : CALLEE
MAIN이 LightWrite를 부른다.
구체화의 반대말은 추상화다.
----------
MAIN 함수가 뜻 하는건 뭘까?
LOW Level 에서 생각하면 Program의 시작점이다. 라고 볼 수 있고(Hard ware적인 느낌)
HIGH Level 에서 생각하면 초기화 / application의 start 볼 수 있다.(soft ware적인 느낌)
현재 코드는 arm에 종속되어 있어서
Application이 너무 arm과 결합력이 강하다.
결합력이 강하면 arm만 사용해야한다.
>> 만약 하드웨어가 변경되면 다 바꿔야한다.
변경되었을 때 문제를 최소화 해보자.
>> APP - Driver - H/W 순서로 코드를 연결시켜줘야 한다.
인접한 Layer단에서만 부를수 있도록 구조화를 시키는것.
수정시 용이하다. app단은 손을 대지 않아도 되기 때문에 추가작업에도 용이하게 된다.
SW추가해서 제어하기
PC4에 Push Button을 연결한 뒤 동작검증 진행
STM32내에서 GPIO INPUT을 활성화 해준 뒤 PINMAP 설정
GPIOC input을 추가했다.
moder : 00 / input
pupdr : 01 / pull up
SysInit.c 부분에 추가
GPIOC input을 추가했다.
moder : 00 / input
pupdr : 01 / pull up
main.c
보드동작
누르면 led on, 떼면 led off
Toggle기능을 추가하여
Sw 한번 누르면 켜지고
한번 더 누르면 꺼지는 LED 만들었다.
SW를 눌렀을때와 / 뗄때 입력을 받는 두 가지 버전을 구현했다.
누를때
뗄때
SW입력마다 STATE가 넘어가도
STATE에 따라 TOGGLE 되도록 회로를 재구현했다.
MAIN.C
STM32F411_REG_Def.h
SysInit.c
SysInit.h
apMain.c
apMain.h
Light.c
Light.h
Led.c
Led.h
Button.h
Button.c
결과
BUTTON 여러개를 사용하여 MOD설정을 하지 않고 1개의 BUTTON으로 MOD가 변경된다.
구조체에서 이거 꼭 기억
프레임워크를 구성한 뒤 구조를 짜는 형태로
이런식으로 구조화 할 경우 오류 발생시 수정이 용이하며, 추가적으로 module을 추가할 때도 용이하다.
STM32-5 (Stop_Watch/Ultra_Sonic) (1) | 2024.01.13 |
---|---|
STM32-4 (Stop_Watch) (0) | 2024.01.11 |
STM32-1 (1) | 2024.01.08 |