앞에서의 TIM7의 인터럽트를 통해 20ms 주기를 만들어서 AHRS의 데이터를 받았습니다.

자료 출처 : 인프런 바닥부터 시작하는 STM32 드론 개발
https://www.inflearn.com/course/stm32cubelde-stm32f4%EB%93%9C%EB%A1%A0-%EA%B0%9C%EB%B0%9C
[무료] 바닥부터 시작하는 STM32 드론 개발의 모든 것 - 인프런 | 강의
※ 본 강의는 22년9월부터 전면 무료화 되었습니다. 무료 컴파일러인 STM32CubeIDE를 이용한 STM32F4 고성능 자작 드론의 FCC 비행제어 시스템을 처음부터 끝까지 모두 직접 개발하는 유일한 강좌입니
www.inflearn.com
하지만 이제 우리가 받아올 GPS 데이터는 100ms 주기로 데이터를 수신!
앞서서 prescaler와 CCR (CounterPeiod) 조정에서
CCR값은 1로 나두었는데, 왜냐하믄
한 타이머로 두 가지의 주기를 만들기위해서 였습니다!



AHRS 데이터는 20ms (50Hz)주기로, GPS는 100ms (10Hz) 주기로 받아올 겁니다.
그러면 공배수인 100의 배수마다 함수가 겹치는데,
위의 사진 처럼 논리연산(&&)을 이용한 else if 절을 사용하여 이를 방지해줍니다.

전체 흐름도는 이러합니다.

메인문 작성
가독성을 위해 함수로 작성해줍니다 ㅡ Encode_Msg_AHRS, Encode_Msg_GPS
(여기서 주석 내로 함수를 작성하면 되는 줄 알고, 팀원들과 파트를 나누어 코드를 작성하다보니 에러가 나곤 했습니다.
알고 보니 소스코드를 작성할 때 순서가 바뀌면 안되더라구요. 강의 들으시는 분들은 참고 하세요)


작성된 Encode_Msg_AHRS, Encode_Msg_GPS 함수들
여기서 중요한 건

telemetry_tx_buf를 [40]바이트로 할당해준 것입니다. 앞서 게시글에서 변경예정이라고 했는데
20바이트 씩 둘로 나누어 AHRS 데이터와 GPS를 받습니다.

인터럽트에서 (stm32f4xx_it.c)에서 할당해주는
20ms, 100ms 의 플래그 flag

마찬가지로 TIM7에서 카운터해줍니다.

완성입니다.
'stm 드론 개발 종합프로젝트 > Telemetry 무선 통신 환경 개발' 카테고리의 다른 글
| 3. 주기 조절 - 타이머 인터럽트를 사용 (0) | 2023.10.05 |
|---|---|
| 2. GCS 프로그램 연결, 프로토콜 설명 (1) | 2023.10.05 |
| 1. 3DR Telemetry 모듈 간 통신 확인 (0) | 2023.10.05 |