상세 컨텐츠

본문 제목

STM32-3 Timer Interrupt / StopWatch UpCounter

카테고리 없음

by 썽심 2024. 1. 11. 21:12

본문

728x90

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 동작 넣어줌

 

 

 

 

보드동작

728x90