2024.01.10
TOOL
Software - STM32_CUBE_IDE
Hardware(board) - STM32(NUCLEO_F411RE)
Architecture - cortex-m4
FND 연결시 anode와 cathode를 잘 구분하여 연결해야한다.
anode : VCC 연결
cathode : GND 연결
새롭게 프로젝트를 생성
File > New > SMT32 Project 생성
PC9 / PC8 / PB8 / PC6 = LED
PA5 / PA6 / PA12 / PA11 = BUTTON
A / B / C / D / E / F / G DP
PC7 / PA9 / PA8 / PB10 / PB4 / PB5 / PB3 / PA10 = SEGMENT DATA
D1 / D2 / D3 / D4
PB15 / PB14 / PB13 / PC4
외부에서 들어오는 Clock을 설정하기 위해 설정
RCC > Clock 크리스탈
HSE > 8MHz > 100MHz
Apb1 peripheral clock : 50
Apb1 timer clock : 100
Apb2 peripheral clock : 100
Apb2 timer clock : 100
GPIO설정
설정방법 눌러서 선택
코드만들기
이걸 누르면 자동으로 code생성해준다.
(device configuration tool code generation): chip pin설정한 것이 generate
생성된 code모습
FND 연결 후 TEST결과
연결설정 CODE
제대로 나오니 A Node TYPE이다.
D1~4 ON / FND 1~9까지 나오도록 각 숫자 마다 나오는 LED를 지정해 줌
6 / 9에 dp추가
함수화 진행
사람눈에 1234 다킨것 처럼 보이게 하기
- 1ms로 동작해 잔상처럼 보이게 함.
Timer Interrupt
TM5 > Internal Clock Check > Prescaler 1000-1, Counter Period 100000-1
100M / 1000 = 100k (0.01ms) x 100000 = 1s
TM5 : Enabled check
어떤 조건이 맞으면 ISR함수로 무조건 점프
--> Interrupt를 사용하게되면 정확한 시간을 측정하여 delay를 줄 수 있다.
IRQ : Interrupt ReQuest 핸들러
IRQ는 인터럽트를 요청하는 signal
ISR(Interrupt Service Routine)
Drivers> STM32F4xx_HAL_Driver> SRC> stm32f4xx_hal_tim.c
IRQ핸들러 확인가능
Parameter에서 delay를 줌
변경함
100ms(0.1s) 간격으로 count 결과
FND 부분에 함수를 생성하여
구조화 진행
Architecture 구조화
인접한 layer 단에서 call할 수 있도록 구조화 진행
layer별로 폴더를 생성한 뒤 code를 옮겨줌
FND가 HAL Driver를 부르려면 불러줘야함 따라서
Inc폴더 내 main.h 의 이 부분을 복사 한 뒤
FND.h에 instance 해줌
FND.C
apmain.c
count는 0.1초로 진행
FND는 1ms 로 잔상표시
apmain.h
TIMER INTERRUPT
Counter : clock을 count
ARR 까지 증가를 시킬 것이다.
ARR은 TOP값.
TOP값을 1000
Prescaler : 100 이라고 하면
1kHz
따라서 1ms가 된다.
업데이트 인터럽트가 이 부분이다.
UPDATE Interrupt 되는 순간은 임의적으로 정하는 것.
36까지 count 하고
interrupt 가 되는 것을 볼 수 있다
소프트웨어로 제어 가능한 오토리워드를 가짐
Internal Clock : 외부 100MHz CLK 사용
CNT : Counter 얘를 중점적으로 생각해야함
PSC
ARR
이렇게 세가지 사용
Prescaler를 통해 주파수를 변환하여 Count를 진행
Prescaler : 분주기
two_BUTTON_StopWach
Button 설정 a12가 1번으로 설정
apmain.c
button 동작 넣어줌
보드동작