받아오는 데이터의 종류가 많기 때문에(센서 인터페이스, GPS, 송신기 etc)
데이터 별 송수신 주기를 할당해야합니다.

여기서 문제점은,
간단하게 HAL 라이브러리의 Delay 함수를 쓰게 된다면 전체 진행이 멈춘다는 (!!) 것입니다.
따라서 TIM7이라는 타이머를 사용하여 주기를 만들어 줄 것입니다.

이를 Non-Blocking Mode라고 합디다.


TIM7를 활성화해줍니다.
prescaler 41999, CounterPeiod 1 (이후에 조정)

실제로 해당 함수를 따라가보면 (stm32f4xx_hal_uart.c)
non blocking mode라고 주석이 적혀있답니다.

메인 코드에 전송할 임시공간을 20바이트 짜리로 선언해줍니다. (이후 변경 예정입니다)

인터럽트 소스코드에서 (stm32f4xx_it.c)
20ms 주기의 도착(?)을 안내할 flag라는 변수를 만들어줍니다. -정말 플래그 역할이라 그런 듯


다시 메인 문으로가서,
flag를 인터럽트 내에 선언했기에 외부 변수를 extern으로 가지고 오고,
TIM7을 활성화해주는 함수를 작성.

바이트 별 전송할 데이터를 20바이트의 어레이에 할당해줍니다.
맨 앞의 if절에서
TIM7의 20ms 카운터가 작동할 때 (flag ==1) 활성화로 함수 변경되면서
주기마다 반복 동작하게 된답니다.

GCS 프로그램을 통해(M-HIVE Ground Station)
GPS,
드론의 AHRS (피치, 롤, 요 데이터 등) 수신을 확인했습니다.
'stm 드론 개발 종합프로젝트 > Telemetry 무선 통신 환경 개발' 카테고리의 다른 글
| 4. 타이머 인터럽트를 통해 다른 주기의 AHRS, GPS 데이터 송수신 (0) | 2023.10.05 |
|---|---|
| 2. GCS 프로그램 연결, 프로토콜 설명 (1) | 2023.10.05 |
| 1. 3DR Telemetry 모듈 간 통신 확인 (0) | 2023.10.05 |