지난 시간 기본적인 Setting을 마치고 '간단하게' 1ms Timer를 만들어보려 했다. 말 그대로 간단하게 1ms Timer만 만들고 종료하려고 시작을 했는데... 우선 STM32H735은 General Purpose Timer로 10개의 Timer를 가지고 있다고 한다.
나는 여기서 32-bit Timer인 2와 5를 사용할 예정이다. 각 Core에 할당하여 따로 1ms Timer를 돌리는 것이 목적이었다. STM32H7 프로젝트는 특이하게, Peripheral을 선택하면 어느 Core할당할 것인지 설정하는 부분이 있다.
TIM2는 M4 Core에 TIM5는 M7 Core에 할당하였다. TIM2와 TIM5는 Manual을 보면, APB1 Bus에 물려있는 것을 볼 수 있는데 APB1은 이전 시간에 설정한 Clock 분주를 보면 200MHz가 들어가고 있다.
그렇다면 간단하게 1ms Timer를 맞출 수 있는데, 디테일은 아래 게시글을 참고하자!
https://enginbear.tistory.com/28
[Whale Car] 1ms Timer 만들기
최근 내연기관에서 전기차로 넘어가는 것이 핫 토픽입니다.(한 물 간 거 같기도 하구요..ㅎ) 테슬라의 모델 3의 보급을 기점으로 많은 자동차 제조사들이 너도나도 전기차를 내놓기 시작했는데
enginbear.tistory.com
그렇담 이론상 아래 수식에 따라서 설정하면 1ms Timer가 설정될 것이다.
그리고 각 Core 별로 아래와 같은 코드를 작성하여 실제 1ms로 Count가 올라가는 것을 확인해 보자. 였겠지만 이번에는 알리에서 구매한 오실로스코프를 개시할 차례다.
우연히 알리를 구매하다가 세일하길래 무지성으로 사버렸다 ㅎ.. 근데 3.5만 원 가격치고는 꽤 괜찮은 성능을 보여주는 것 같아 매우 만족스럽다.
오실로 스코프도 있겠다 확실하게 확인하기 위해 1ms Timer에서 Pin을 토글 하는 Code를 삽입하여 오실로 스코프로 찍어보자.
근데 정말 희한하게도 생뚱맞은 주파수가 나온다. 지금 사진상으로 보았을 때, 100Hz가 나오는데... 계산상 지금 Timer는 주기가 100Hz니까. 1 주기 = 2회 Timer 수행 = Timer 주기 200Hz = 5ms마다 실행..? 이것 때문에 진짜 며칠을 쏟아부었다.. 계산을 수백 번 해보고 다시 찍어보아도 정확히 5배만큼의 시간이 나온다... 며칠을 허비하고 허비한 끝에 찾고서야 말았다....
Input Clock이 Default로 잡혀있는 것을 보면 25 MHz로 잡혀있는데.. Nucleo 보드의 경우 보드 위쪽에 달린 ST-Link 쪽에서 Clock을 넣어주게 된다.
그렇담 우리의 ST-Link가 주는 HSE Clock은 실제로 몇일까..?
....
Nucleo에 들어오는 실제 HSE Input Clock은 5 MHz이다.. 심지어 25 MHz는 없다..
그래서 Clock 분주비가 25 MHz로 되어있어 내가 한 계산식대로라면 Timer는 5ms로 동작하는 것이 맞다.. HSE를 실제 Clock과 맞게 5 MHz로 계산해서 넣게 되면
정확히 1KHz..! 1ms Timer가 만들어진다..ㅠ
나처럼 고생하는 사람이 없길 바라며 글을 마치도록 하겠다.
'프로젝트 일지 > Whale Car' 카테고리의 다른 글
[Whale Car] Core간 Communication (0) | 2024.11.27 |
---|---|
[Whale Car] Schedule 이식 그리고 CPU Load (0) | 2024.10.21 |
[Whale Car] STM32H745ZIQ 보드 연결 (0) | 2024.10.03 |
[Whale Car] 개발 보드 변경 (2) | 2024.09.19 |
[Whale Car] Serial 통신 뚫기 (1) | 2024.04.08 |