1. 시작하기
Arduino UNO R4의 보급이 활발해져서 이미 구입하신 분들도 많을 것으로 생각됩니다. 이 보드에서 타이머 인터럽트를 사용하는 방법을 알아보다가 FspTimer라는 라이브러리가 표준으로 제공된다는 것을 알게 되어 사용법을 알아보았습니다.
2. FspTimer 구현
FspTimer의 헤더 파일과 소스 파일은 다음 위치에 있습니다.
C:\Users\%USERNAME%\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.0.2\cores\arduino\FspTimer.h
C:\Users\%USERNAME%\AppData\Local\Arduino15\packages\arduino\hardware\renesas_uno\1.0.2\cores\arduino\FspTimer.cpp
사용법은? 찾았는데, API에 대한 설명은 찾아볼 수 없었습니다.
3. API 조사
우선 아래 소스에서 사용되는 것부터 사용법을 알아보겠습니다.
3.1 get_available_timer
형식
static int8_t get_available_timer(uint8_t &type, bool force = false);
설명
사용하지 않는 타이머 채널 번호와 타이머 종류를 가져온다. 타이머 채널 번호는 반환값으로, 타이머 종류는 첫 번째 인자로 가져옵니다. 타이머 종류는 GPT_TIMER 또는 AGT_TIMER가 반환됩니다. 처리를 보면 사용하지 않는 타이머는 GPT_TIMER에서 검색되며, 둘 중 하나를 지정해서 가져오는 것은 불가능해 보입니다.
사용 예시
uint8_t timer_type;
int8_t timer_ch = FspTimer::get_available_timer(timer_type);
if (timer_ch < 0) {
// 할당 실패
}
3.2 begin
형식
bool begin(timer_mode_t mode, uint8_t type, uint8_t type, uint8_t channel, float freq_hz, float duty_perc, GPTimerCbk_f cbk = nullptr , void *ctx = nullptr );
설명
FspTimer의 인스턴스에 파라미터를 설정한다. 첫 번째 인수의 mode에 지정할 수 있는 것은 다음과 같다. 현재 어떤 동작이 될지는 미확인입니다.
| 값 | 설명 |
| TIMER_MODE_PERIODIC | 주기적 타이머 |
| TIMER_MODE_ONE_SHOT | 원샷 타이머 |
| TIMER_MODE_PWM | PWM 모드 |
| TIMER_MODE_ONE_SHOT_PULSE | 원샷 펄스 모드 |
| TIMER_MODE_TRIANGLE_WAVE_SYMMETRIC_PWM | 대칭 삼각파 PWM 모드 |
| TIMER_MODE_TRIANGLE_WAVE_ASYMMETRIC_PWM | 비대칭 삼각파 PWM 모드 |
| TIMER_MODE_TRIANGLE_WAVE_ASYMMETRIC_PWM_MODE3 | 비대칭 삼각파 PWM 모드 3 |
- type과 channel은 앞서 설명한 get_available_timer()에서 가져온 값을 지정한다.
- freq_hz에는 주파수를 float 형식으로 지정한다.
- duty_perc에는 듀티비를 float 형식으로 지정한다.
- cbk에는 인터럽트 발생 시 호출할 콜백 함수를 지정한다.
- ctx에는 위의 콜백 함수에 전달할 인수를 지정합니다.
사용 사례
void timer_callback(timer_callback_args_t *arg);
uint8_t timer_type;
int8_t timer_ch
FspTimer fsp_timer;
fsp_timer.begin(TIMER_MODE_PERIODIC, timer_type, static_cast<uint8_t>(timer_ch), 1000.0, 25.0, timer_callback, nullptr);
FspTimer 클래스에는 다음과 같은 begin 메서드도 정의되어 있으므로, freq_hz와 duty_perc는 float로 지정한다.
bool begin(timer_mode_t mode, uint8_t type, uint8_t channel, uint32_t period, uint32_t pulse, timer_source_div_t sd, GPTimerCbk_f cbk = nullptr , void *ctx = nullptr);
3.3 setup_overflow_irq
형식
bool setup_overflow_irq(uint8_t priority = 12, Irq_f isr_fnc = nullptr );
설명
타이머 오버플로우 인터럽트를 활성화한다. 두 번째 인자 isr_fnc는 사용하지 않는 것으로 보인다.
사용 예시
FspTimer fsp_timer;
fsp_timer.setup_overflow_irq();
3.4 open
형식
bool open();
설명
해당 타이머의 채널을 활성화한다.
사용 예시 FspTimer fsp_timer; fsp_timer.open();
3.5 start
형식
bool start();
타이머를 시작합니다.
사용 예시
FspTimer fsp_timer;
fsp_timer.start();
4. 프로그램 예시 타이머를 사용하여 LED를 점멸시키는 프로그램입니다.
#include <FspTimer.h>
static constexpr uint32_t led_on_ms = 100;
static constexpr uint32_t led_off_ms = 400;
static FspTimer fsp_timer;
static bool is_led_on;
void
timer_callback([[maybe_unused]]timer_callback_args_t *arg)
{
static uint32_t cnt = 0;
cnt++;
if (is_led_on) {
if (cnt > led_on_ms) {
digitalWrite(LED_BUILTIN, LOW); // turn the LED off
is_led_on = false;
cnt = 0;
}
} else {
if (cnt > led_off_ms) {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on
is_led_on = true;
cnt = 0;
}
}
}
void
setup()
{
while (!Serial) {
;
}
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on
is_led_on = true;
uint8_t timer_type;
int8_t timer_ch = FspTimer::get_available_timer(timer_type);
if (timer_ch < 0) {
Serial.println("get_available_timer() failed.");
return;
}
fsp_timer.begin(TIMER_MODE_PERIODIC, timer_type, static_cast<uint8_t>(timer_ch), 1000.0, 25.0, timer_callback, nullptr);
fsp_timer.setup_overflow_irq();
fsp_timer.open();
fsp_timer.start();
Serial.println("started.");
}
void
loop()
{
__WFI();
}
5. 앞으로의 방침 다음에는 FspTimer의 PWM 기능을 알아보고 싶습니다.
참고 문서

'아두이노우노 R4' 카테고리의 다른 글
| Arduino Uno R4 WiFi 핀 맵 (1) | 2024.04.30 |
|---|---|
| 오토 키보드 기능 사용법 아두이노 R4 Minima (0) | 2024.04.19 |
| UNO R4 업로드 에러 해결 방법 Failed uploading: uploading error: exit status 74 (1) | 2024.03.26 |
| Arduino Uno R4를 HID 키보드 장치로 만들기 (1) | 2024.03.26 |
| UNO R4 WiFi 네트워크 예제 (1) | 2024.03.20 |
| 우노 R4 WiFi 자동 완성 키보드로 사용하기 (1) | 2024.03.20 |
| 아두이노 우노 R4 WiFi CAN Bus 꿀팁 (1) | 2024.03.18 |
| 아두이노 우노 R4 Minima RTC, Real-Time Clock (1) | 2024.03.15 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.
귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.
캐어랩