임베디드

임베디드250626 - Cortex M 시리즈

_KDE_ 2025. 6. 26. 15:21

과제리뷰

기존에는 위의 구조였지만 생각해보니

아래구조가 더 좋아 보임


부저 

 

 

PWM은 TIMER의 기능

 

 

 

 

TIMER의 주인공은 CNT임

 

ARR(Auto Reload Register)은 CNT가 증가할 때 가질 수 있는 최댓값

 

PSC가 100 이다 SystemCLK 100개 발생해야 CLK 1개 발생 (CLK 발생시간 1us) -> CNT 1 증가 시간 (1us)

 

이 때 ARR이 999면 0부터 999까지 올라가는 시간은 1ms임

 

ARR * 10^-6 = 주기(s)

 

ARR만 조절하면 주파수 조절이 가능해짐

 

주파수 f = 10^6/(ARR )

Duty정하기 -> 기준 값이 있으면 기준값보다 작은 CNT값이 있고, 큰 값이 있음

이 기준보다 크면 Low, 작으면 High 설정

 

파란색과 분홍색의 주파수는 같지만 duty cycle이 다름

 

이 기준값은

CCR(Capture Compare Register)로 내가 변경할 수 있음

 

 

주파수를 바꾸고 싶다 ? -> ARR 수정

Duty Cycle을 바꾸고 싶다? CCR 수정

 

Duty Cycle이 90%하고 싶으면 CRR을 ARR의 90%로 설정

 

 

CRR 값

 

CNT가 증가하다가 ARR이 값자기 CNT보다 작아지면 CNT는 계속 증가함(overflow가 날때까지)

-> 이런경우 주파수에 영향을 줄 수 있음

 

CNT하고 ARR 값이 같아지고 ARR이 바뀔 수 있게 해야 함 -> 이 기능이 arm에 이미 있음

auto-reload preload-> enable하면 CNT하고 ARR이 같아지고 CNT가 overflow가 발생하고 나서야 ARR이 바뀌게 하는 기능


Buzzer는 Blocking 방식으로 작성돼서 짧게하는 것이 좋음


모터

PA8포트 사용

 


DHT - 11

1. MCU에서 dht11로 신호를 보내야 함 (outmode)

Time Counter의 증가속도를 1us로 해주자

 

두가지 인터럽트중에 하나 골라서 사용

 

 

1.swstack 설명

 

 

 

 

2.object diagram

 

3.sequence diagram

FSM은 Listener, Controller, Presenter 전부 공유 가능할 수 있음

FSM에 따라 동작하는 기능이 다르게 할 수도 있음