본문 바로가기
  • 경제적 자유를 얻는 그날까지
엔지니어링/드론

[STM32 자작드론] GPS 데이터 수신기 UART DMA 구현하기

by 베니스상인 2023. 2. 5.

Ublox NEO M8 GNSS 모듈

  • GPS, Galileo, GLONASS, DeiDou 수신
  • UART, SPI, I2C 인터페이스
  • NMEA, UBX 메시지 프로토콜
  • 최대 30Hz(High Nav), 보통 1~10Hz 사용
  • u-center 프로그램있음

 

 

 

 

 

NMEA(The National Marine Electronics Association) 0183 프로토콜

  • UART 인터페이스
  • $GP??? 로 시작하는 아스키 Message 방식(데이터 길이가 가변이고 파싱코드 필요)
  • ,로 데이터 필드 구분
  • 범용적이며 데이터를 직관적으로 확이할 수 있음

 

NMEA 프로토콜 구조

애플리케이션 레이어에서의 문장 구조의 형식 및 특징은 다음과 같다.

  • '$'로 시작한다.
  • 첫 두 자리는 제품의 종류를 나타낸다. GPS 제품일 경우 GP, 수심 측정 장비인 Depth Sounder 제품일 경우 SD를 사용한다.
  • 다음 세 자리는 해당 프로토콜이 가지고 있는 데이터의 종류를 나타낸다.
  • 데이터의 구분은 ','로 하며 '*'로 끝난다.
  • '$'와 '*'사이의 모든 데이터를 XOR(exclusive or) 연산을 하여 체크섬 값을 만들어 추가한다.
  • <CR><LF>를 붙인다.

주로 사용되는 문장에 대한 예시와 설명은 다음과 같다.

$ELEXTECH, Inc G1800s
$HW Version 1.6
$SW Version 231.000.100
$Startup 4
$TOW: 0
$WK: 1192
$POS: 6378137 0 0
$Baud rate: 9600 System clock: 24.553MHz
$GPGGA,114455.532,3735.0079,N,12701.6446,E,1,03,7.9,48.8,M,19.6,M,0.0,0000*48
$GPGSA,A,2,19,25,15,,,,,,,,,,21.5,7.9,20.0*32
$GPGSV,3,1,10,03,86,244,00,19,51,218,38,16,51,057,00,07,40,048,00*77
$GPGSV,3,2,10,13,34,279,00,23,33,236,00,15,29,076,40,25,25,143,38*71
$GPGSV,3,3,10,21,18,051,,27,12,315,*77
$GPRMC,114455.532,A,3735.0079,N,12701.6446,E,0.000000,121.61,110706,,*0A

  • Elextech사에서 만든 G1800s라는 GPS모듈이다.
  • Baud Rate는 9600bps이다.

 

 

 

GPGGA

GPGGA Global Positioning System Fix Data라고 한다. 여기에서 주로 알 수 있는 것은 시간, 위도, 경도, 고도 등이다.

$GPGGA,114455.532,3735.0079,N,12701.6446,E,1,03,7.9,48.8,M,19.6,M,0.0,0000*48

  • 114455.532는 시간으로서 Zulu time (그리니치 표준시) 기준으로 11시 44분 55.532초를 뜻한다.
  • 3735.0079는 위도로서 37도 35.0079분을 뜻한다. 도(degree) 단위로 환산시, 35.0079/60 = 0.5 대략 37.5도가 된다.
  • 뒤의 N은 북위를 뜻한다. 적도 남쪽에 있다면 S가 된다.
  • 12701.6446은 경도로서 127도 1.6446분을 뜻한다. 도(degree) 단위로 환산시, 1.6446/60 = 0.027 대략 127.0도가 된다.
  • 뒤의 E는 동경을 뜻한다. W가 되면 서경이 된다.
  • '1'은 Fix의 종류를 뜻한다. 이 자리의 숫자에 따른 뜻은 다음과 같다.
    • 0 : Invalid 잘못된 데이터. 주로 위성이 안 잡힐 경우.
    • 1 : GPS에서 제공하는 기본 위성을 가지고만 계산할 경우.
    • 2 : DGPS를 이용하여 보정하여 계산할 경우
    • DGPS를 이용할 경우 더욱 정확한 측정이 가능해진다. DGPS는 지구의 지표의 위치가 명확히 알려진 곳에 기지국을 설치하거나 또 다른 위성(NAVSTAR GPS위성이 아닌 타 위성)이 GPS송출 신호를 내보내어 보정하도록 하는 방법이다. 보통 15M정도의 오차를 가지는 GPS가 DGPS로 보정할 경우 5M로 오차가 줄어들게 된다.
  • '03'은 계산에 사용한 위성을 개수를 나타낸다. 위치를 알기 위해서 최소3개 이상의 신호를 받아야 한다.
  • '7.9'는 horizontal dilution of Precision으로 2차원적 오차결정(수평방향)을 뜻한다.
  • '48.8M'는 해수면 기준 고도(해발)이다.
  • '19.6M'는 지오이드고(geoid height)이다
  • '0.0'과 '0000'은 DGPS 사용시 마지막으로 update한 시간과 DGPS 기지국의 ID이다.
  • '48'은 Check Sum이다.

GPGSV

GPGSV GPS Satellites in View는 현재 GPS Module이 수신할 수 있는 모든 위성의 정보이다. 모든 위성을 계산에 사용하지는 않는다.


$GPGSV,3,1,10,03,86,244,00,19,51,218,38,16,51,057,00,07,40,048,00*77
$GPGSV,3,2,10,13,34,279,00,23,33,236,00,15,29,076,40,25,25,143,38*71
$GPGSV,3,3,10,21,18,051,,27,12,315,*77

  • '3'은 앞으로 나올 GPGSV가 총 몇 개의 Sentence일지 알려준다. 여기에서는 총 3개의 Sentence이다.
  • '1'은 GPGSV Sentence중 몇 번째의 Sentence인지 알려준다. 여기에서는 1번째 Sentence이다.
  • '10'은 현재 수신할 수 있는 모든 위성의 개수를 나타낸다.
  • '03,86,244,00'는
    • 3번 위성이고,
    • 현재 자신의 위치에서 86도 (degree) elevation
    • 244도 (degree)의 Azimuth
    • 신호대잡음비 (SNR)은 0이다.
  • '77'은 Checksum이다.

최대 4개의 위성이 하나의 Sentence에 들어갈 수 있다.

 

 

GPRMC

GPRMC Recommended Minimum data는 추천되는 최소한의 데이터들이다.

$GPRMC,114455.532,A,3735.0079,N,12701.6446,E,0.000000,121.61,110706,,*0A

  • 114455.532는 시간으로서 Zulu time (그리니치 표준시) 기준으로 11시 44분 55.532초를 뜻한다.
  • A는 GPS 신호의 신뢰성을 뜻한다. (A = 신뢰할 수 있음, V = 신뢰할 수 없음)
  • 3735.0079는 위도로서 37도 35.0079분을 뜻한다. 도(degree) 단위로 환산시, 35.0079/60 = 0.5 대략 37.5도가 된다.
  • 뒤의 N은 북위를 뜻한다. 적도 남쪽에 있다면 S가 된다.
  • 12701.6446은 경도로서 127도 1.6446분을 뜻한다. 도(degree) 단위로 환산시, 1.6446/60 = 0.027 대략 127.0도가 된다.
  • 뒤의 E는 동경을 뜻한다. W가 되면 서경이 된다.
  • '0.000000'은 Speed over ground로서 knots 단위의 속도계이다. 비행기에서는 KIAS라는 속도 단위를 사용하고, 배에서는 Knots를 사용한다. KIAS는 Knots indicator air speed의 약자이다. km/h로 변환시 대략 1.8을 곱한다.
  • '121.61'은 Track Angle in degree true로서, 진행 방향을 정북을 0도부터 359도까지 표현한 것이다. 121.61은 대략 동남쪽이다.
  • '110706'은 Date를 뜻한다. 여기에서는 11th, July, 2006이며 2006년 7월 11일이다.
  • ' '는 Magnetic Variation으로서 나침반이다. 예시의 GPS Module은 나침반이 내장되어 있지 않다.
  • '*0A'는 체크섬이다.

 

GPGSA

GSA는 GNSS DOP and Active Satellite를 의미한다. 데이타를 제공하는 위성을 나열하는 GSA 레코드에는 위성 번호에 대한 12개의 필드가 포함되어 있지만 8개의 위성 만 고려되므로 4개의 필드는 비어 있다.GSA는 단독으로 쓰이기 보다는 GSV와 상호참조로 위성상태를 확인하거나 시각적 분석을 위한 GLONASS 인공위성 및 이들의 자료등을 활용할 수 있다. 이 GSA 문장의 각각에는 대화자 ID GN가 있어야한다. 인공위성은 조합된 솔루션에 사용되며 각각의 위치 데이타에 사용된 결합 위성은 PDOP(축위오차), HDOP(수평오차) 및 VDOP(수직오차)를가지고있다. [2]

$--GSA,a,x,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,x.x,x.x,x.x*hh<CR><LF>

$--GSA : 문장 IDa : 모드1 - A = 2D/3D 자동변환 ,M =수동 전환x : 모드2 - 2 = 2D , 3=3Dxx :사용된 위성번호 1~12개VDOP, HDOP, PDOP : 오차값hh : 체크섬

 

 

 

 

https://ko.wikipedia.org/wiki/NMEA_0183

 

NMEA 0183 - 위키백과, 우리 모두의 백과사전

NMEA라고 주로 불리는 NMEA 0183은 시간, 위치, 방위 등의 정보를 전송하기 위한 규격이다. NMEA 0183은 미국의 NMEA(The National Marine Electronics Association)에서 정의해 놓았다. 이 데이터들은 주로 자이로컴

ko.wikipedia.org

 

 

NMEA GPS 데이터 수신

  • GPS는 38400bps UART3으로 Byte 단위로 인터럽트 기반 수신
  • 수신된 GPS 데이터는 바로 UART6으로 출력하여 터미널에서 확인
  • GGA값이 모두 없는 것을 보면 실내에서 시험하기 때문에 위성에서 받은 GPS 데이터는 수신하지 못하는 것을 알 수 있다.

 

 

 

 

 

 

UBX 프로토콜

  • UBlox 자체의 GPS 통신 프로토콜
  • UART, I2C, USB, SPI 인터페이스
  • 0xB5 0x62로 시작
  • 바이너리 구조(같은 길이의 메시지 구조)
  • 호스트와 통신시 Tx/Rx 이와 같은 메시지 구조로 통신을 하게 됨

 

Class ID

 

 

 

NAV-POSLLH 메시지 내용

 

 

 

UBX 설정변경

U-blox M8N은 기본적으로  9600bps NMEA 방식으로 GPS데이터를 수신하지만 UBX 포멧으로 변경하고 좀 더 빠른 주기로 보내기 위해 u-center 프로그램을 이용하여 설정을 변경한다. 

 

 

 

u-center 프로그램은 아랭에서 다운받을 수 있다.

 

https://www.u-blox.com/en/product/u-center

 

u-center

GNSS evaluation software for Windows

www.u-blox.com

 

처음은 기본적으로 9600bps 시리얼로 설정되어 있기 때문에 속도를 9600bps로 설정하여 NMEA로 메시지를 수신한다. 정상적으로 메시지가 수신되면 메시지 로깅창에서 데이터가 연속적으로 들어오는 것을 확인할 수 있다. 

 

데이터 수신이 확인되면 설정에 들어가서 아래 항목들을 변경한다. 

 

1) UBX CFG - PORT설정후 Send 전송

  • UART 설정
  • Protocol in: UBX
  • Protocol out: UBX
  • Baudrate: 115200

    ▶  코드전송: B5 62 06 00 14 00 01 00 00 00 D0 08 00 00 00 C2 01 00 01 00 01 00 00 00 00 00 B8 42

 

 

2) UBX CFG - MSG설정후 Send 전송

  • Message NAV-POSLLH(위도, 경도, 고도 정보를 받아오는 메시지)
  • UART 1

    ▶  코드전송: B5 62 06 01 08 00 01 02 00 01 00 00 00 00 13 BE

 

 

 

3) UBX CFG - RATE설정후 Send 전송

  • GPS  rate: 100 ms (10Hz) 로 설정

  ▶  코드전송: B5 62 06 08 06 00 64 00 01 00 01 00 7A 12  

 

 

4) UBX CFG - CFG 설정후 Send 전송

  • Save current configuration  선택(이 과정을 생략하면 M8N의 설정을 바꾸고 전원을 껏다 켜면 다시 설정이 초기화됨)
  • 디바이스는 모두 선택

  ▶  코드전송: B5 62 06 09 0D 00 00 00 00 00 FF FF 00 00 00 00 00 00 17 31 BF 

 

 

설정변경후 프로그램을 Exit하고 다시 실행할때는  115200bps로 연결하고, 데이터는 UBX 포멧으로 수신되는 것을 확인할 수 있다.

 

 

 

POSLLH 메시지값

 

 

 

 

 

GPS 수신기 CubeMX 설정

 

GPS수신기는 STM32CubeMX에서 UART3에 아래와 같이 설정한다.

  • baudrate: 115200bps 
  • Tx3( PB10)
  • Rx3(PB11)
  • Interrupt Enable: UART로 그대로 수신하면 됨

 

그리고 DMA 로 데이터를 수신하기 위해 아래와 같이 설정한다.

  • DMA Request: USART3_RX
  • Stream: DMA1 Stream1
  • Mode: Circular

UART 수신시 DMA를 사용하는 이유는 UART 데이터가 한 바이트씩 들어올 때마다 인터럽트를 발생시켜서 버퍼에 저장하는 것보다 DMA를 사용하면 설정된 데이터크기만큼 알아서 읽어서 버퍼에 저장해두기 때문에 인터럽트 발생 빈도도 적어지고 CPU의 로드를 줄 일 수 있기 때문에 훨씬 효율적이다.

 

DMA 설정시 USART3_RX를 선택하며 자동으로 할당된 DMA와 Stream 채널을 연결해준다. 그리고 Mode에서 Circular 방식을 사용하는 것은 같은 DMA 동작을 반복해서 수행할 경우 다시 설정을 Reload 할 필요없이 자동으로 Reloading되도록 설정한 것이다.

 

 

Revolt FC의 외부 핀맵은 아래와 같다.

 

Revolt FC Top

 

 

 

 

 

UART3의 수신데이터 DMA를 사용하기 위해서는 DMA 설정을 해줘야 한다. 주변기기에서 메모리로 DMA를 수행하기 때문에 각각의 주소값, 그리고 전송할 데이터 사이즈를 설정한다.  전송이 완료되었을 때 DMA 인터럽트가 발생할 수 있도록 TC(Total Complete) 인터럽트도 활성화한다. 이 과정은 초기에 한번만 설정하면 되고, DMA가 완료되면 설정값은 자동으로 Reload된다.

void GPS_DMA_init(GPS_RAW_MESSAGE* gps_raw_message, USART_TypeDef* UART,DMA_TypeDef* DMA,uint32_t DMA_STREAM)
{


	//DMA, INTERRUPT SETTINGS
	LL_DMA_SetMemoryAddress(DMA,DMA_STREAM,(uint32_t)(gps_raw_message->gps_raw_buf));
	LL_DMA_SetPeriphAddress(DMA,DMA_STREAM,LL_USART_DMA_GetRegAddr(UART));
	LL_DMA_SetDataLength(DMA,DMA_STREAM,MSG_LENGTH_NAV_SOL);

	//  LL_DMA_EnableIT_HT(DMA1, LL_DMA_STREAM_1);
    LL_DMA_EnableIT_TC(DMA, DMA_STREAM);
	LL_USART_EnableDMAReq_RX(UART);

}

GPS_Receiver.c 내용

 

 

 

main.c에서는 위에 언급한 DMA 설정을 초기화해주고 DMA_EnableStream을 실행한다. 그리고 UART 인터럽트는 바이트 수신시마다 발생하는 RXNE인터럽트를 사용하지 않고  IDLE 인터럽트를 사용한다.  

 

 GPS_DMA_init(&raw_gps, USART3, DMA1, LL_DMA_STREAM_1);
 LL_DMA_EnableStream(DMA1,LL_DMA_STREAM_1);
 LL_USART_EnableIT_IDLE(USART3);

main.c 내용

 

 

UART IDLE 인터럽트란 UART 데이터가 모두 수신된 이후 Idle 상태가 감지되면 인터럽트가 발생한다. 즉, 데이터 수신이 완료되고 나서 발생하는 인터럽트이다. DMA를 사용하게 되면 RXNE 인터럽트를 사용하지 않더라도 데이터 수신 바이트마다 DMA가 알아서 설정된 메모리 버퍼 공간으로 데이터를 전송하기 때문에 수신 완료 인터럽트만 알면 된다. 

 

 

 

 

 

인터럽트 서비스 루틴은 UART3 IDLE 인터럽트 발생시와 DMA 수신이 완료되었을 때 발생한다. 

void USART3_IRQHandler(void)
{
	if(LL_USART_IsEnabledIT_IDLE(USART3) && LL_USART_IsActiveFlag_IDLE(USART3)) {
		LL_USART_ClearFlag_IDLE(USART3);
		flag_INT_UART3_GPS = 1; // flag 클리어

	}
}

void DMA1_Stream1_IRQHandler(void)
{
    if (LL_DMA_IsEnabledIT_TC(DMA1, LL_DMA_STREAM_1) && LL_DMA_IsActiveFlag_TC1(DMA1)) {
		LL_DMA_ClearFlag_TC1(DMA1);
        flag_DMA1_DONE = 1;
    }
}

stm32f4xx_it.c 내용

 

 

.

.UART3 IDLE 인터럽트가 수신되면 데이터 수신이 완료되었기 때문에 DMA를 종료하고 TC 플래그를 클리어시킨다. DMA가 완료되었을 때는 데이터를 GPS 데이터를 Parsing하고 다시 DMA를 시작한다.

while(1) 
{
	 if(flag_INT_UART3_GPS == 1){
		  LL_DMA_DisableStream(DMA1,LL_DMA_STREAM_1);
		  LL_DMA_ClearFlag_TC1(DMA1);
		  flag_INT_UART3_GPS =0;

	  }

	  if(flag_DMA1_DONE == 1)
	  {
		  GPS_Parsing(&raw_gps, &msg_nav, &recv_cnt, &err_cnt);
		  LL_DMA_EnableStream(DMA1,LL_DMA_STREAM_1);
		  flag_DMA1_DONE = 0;
	  }
 }

main.c 내용

 

 

 

 

STM32에서 UBX 형식으로 GPS 데이터를 DMA 수신한 결과

 

시험공간이 실내이어서 유효한 GPS 데이터가 보이지 않지만 GPS 수신데이터에서 받은 time값은 순차적으로 잘 증가하는 것을 보였으며, 115200bps, 10Hz 주기로 GPS 수신 패킷의 손실없이 수신이 되는 것을 확인하였다.

 

 

 

git log(1)

swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git add .

swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git commit -m "done receiving GPS data with NMEA, but, can't configure UBX with CFG messages"
[main cb2666f] done receiving GPS data with NMEA, but, can't configure UBX with CFG messages
 435 files changed, 42116 insertions(+), 98001 deletions(-)
delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/3.snap
 create mode 100644 .metadata/.plugins/org.eclipse.core.resources/4.snap


swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git push -u origin main
Username for 'https://github.com': shlee853
Password for 'https://shlee853@github.com': 
Enumerating objects: 436, done.
Counting objects: 100% (436/436), done.
Delta compression using up to 8 threads
Compressing objects: 100% (270/270), done.
Writing objects: 100% (275/275), 1.02 MiB | 2.78 MiB/s, done.
Total 275 (delta 139), reused 0 (delta 0)
remote: Resolving deltas: 100% (139/139), completed with 71 local objects.
To https://github.com/shlee853/STM32F4_FC_DEV.git
   2c77903..cb2666f  main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.



swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git log --pretty=oneline
cb2666fed0ff08b71738e501bc091ec138c4b98b (HEAD -> main, origin/main) done receiving GPS data with NMEA, but, can't configure UBX with CFG messages
2c7790379d578411ffd79b477bc3d011fbef1e4a done implementation for quaternion algorithm(Madgwick/Mahony) & serial plotter
a6c6c2c509d4b8f015c27d609f126741bb7b7c28 Implemented udDelay function using sysTick(obsoleted LL_mDelay)
891968755a226792e2732c03d22b81d1042d2bc1 done project ICM20602(gyro&accel sensors) interface using SPI
19c17e72497f7834e9a04da35338347f51a986c8 done project for receiving data using interupt and transmit received data
cc840798716809f6b47b4111b825a60381d1934d done project for poilling Transmit data using USART6
00af3f79301c64ba1b43044869f96cf8848c678a Initial Release & done project for LED blink

 

 

git log(2)

 

swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ ll
total 20
drwxrwxr-x 5 swift swift 4096  2월 14 05:01 ./
drwxrwxr-x 4 swift swift 4096  2월 11 08:07 ../
drwxrwxr-x 8 swift swift 4096  2월  6 01:47 .git/
drwxrwxr-x 3 swift swift 4096  1월 27 00:06 .metadata/
drwxrwxr-x 6 swift swift 4096  2월 14 05:02 STM32F4_FC_DEV/
swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git add .
swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   STM32F4_FC_DEV/.mxproject
	new file:   STM32F4_FC_DEV/Core/Inc/GPS_Receiver.h
	modified:   STM32F4_FC_DEV/Core/Inc/Quaternion.h
	new file:   STM32F4_FC_DEV/Core/Inc/dma.h
	modified:   STM32F4_FC_DEV/Core/Inc/main.h
	modified:   STM32F4_FC_DEV/Core/Inc/stm32f4xx_it.h
	modified:   STM32F4_FC_DEV/Core/Inc/usart.h
	new file:   STM32F4_FC_DEV/Core/Src/GPS_Receiver.c
	modified:   STM32F4_FC_DEV/Core/Src/Quaternion.c
	new file:   STM32F4_FC_DEV/Core/Src/dma.c
	modified:   STM32F4_FC_DEV/Core/Src/main.c
	modified:   STM32F4_FC_DEV/Core/Src/stm32f4xx_it.c
	modified:   STM32F4_FC_DEV/Core/Src/usart.c
	new file:   STM32F4_FC_DEV/Debug/Core/Src/GPS_Receiver.d
	new file:   STM32F4_FC_DEV/Debug/Core/Src/GPS_Receiver.o
	new file:   STM32F4_FC_DEV/Debug/Core/Src/GPS_Receiver.su
	modified:   STM32F4_FC_DEV/Debug/Core/Src/ICM20602.d
	modified:   STM32F4_FC_DEV/Debug/Core/Src/ICM20602.o
	modified:   STM32F4_FC_DEV/Debug/Core/Src/Quaternion.d
	modified:   STM32F4_FC_DEV/Debug/Core/Src/Quaternion.o
	modified:   STM32F4_FC_DEV/Debug/Core/Src/Quaternion.su
	new file:   STM32F4_FC_DEV/Debug/Core/Src/dma.d
	new file:   STM32F4_FC_DEV/Debug/Core/Src/dma.o
	new file:   STM32F4_FC_DEV/Debug/Core/Src/dma.su
	modified:   STM32F4_FC_DEV/Debug/Core/Src/gpio.d
	modified:   STM32F4_FC_DEV/Debug/Core/Src/gpio.o
	modified:   STM32F4_FC_DEV/Debug/Core/Src/main.d
	modified:   STM32F4_FC_DEV/Debug/Core/Src/main.o
	modified:   STM32F4_FC_DEV/Debug/Core/Src/main.su
	modified:   STM32F4_FC_DEV/Debug/Core/Src/spi.d
	modified:   STM32F4_FC_DEV/Debug/Core/Src/spi.o
	modified:   STM32F4_FC_DEV/Debug/Core/Src/stm32f4xx_it.d
	modified:   STM32F4_FC_DEV/Debug/Core/Src/stm32f4xx_it.o
	modified:   STM32F4_FC_DEV/Debug/Core/Src/stm32f4xx_it.su
	modified:   STM32F4_FC_DEV/Debug/Core/Src/subdir.mk
	modified:   STM32F4_FC_DEV/Debug/Core/Src/tim.d
	modified:   STM32F4_FC_DEV/Debug/Core/Src/tim.o
	modified:   STM32F4_FC_DEV/Debug/Core/Src/usart.d
	modified:   STM32F4_FC_DEV/Debug/Core/Src/usart.o
	modified:   STM32F4_FC_DEV/Debug/Core/Src/usart.su
	modified:   STM32F4_FC_DEV/Debug/STM32F4_FC_DEV.elf
	modified:   STM32F4_FC_DEV/Debug/STM32F4_FC_DEV.list
	modified:   STM32F4_FC_DEV/Debug/STM32F4_FC_DEV.map
	modified:   STM32F4_FC_DEV/Debug/objects.list
	modified:   STM32F4_FC_DEV/STM32F4_FC_DEV.ioc

swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git commit -m "done receiving  GPS data with DMA and Parsing UBX data format"
[main c858506] done receiving  GPS data with DMA and Parsing UBX data format
 741 files changed, 163242 insertions(+), 45835 deletions(-)
 create mode 100644 STM32F4_FC_DEV/Core/Inc/GPS_Receiver.h
 create mode 100644 STM32F4_FC_DEV/Core/Inc/dma.h
 create mode 100644 STM32F4_FC_DEV/Core/Src/GPS_Receiver.c
 create mode 100644 STM32F4_FC_DEV/Core/Src/dma.c
 rename .metadata/.plugins/org.eclipse.core.resources/.history/b0/c00e8aaa4ea5001d17d8c297dc8150a1 => STM32F4_FC_DEV/Core/Src/main.c (73%)
 create mode 100644 STM32F4_FC_DEV/Debug/Core/Src/GPS_Receiver.d
 create mode 100644 STM32F4_FC_DEV/Debug/Core/Src/GPS_Receiver.o
 create mode 100644 STM32F4_FC_DEV/Debug/Core/Src/GPS_Receiver.su
 rewrite STM32F4_FC_DEV/Debug/Core/Src/ICM20602.o (74%)
 rewrite STM32F4_FC_DEV/Debug/Core/Src/Quaternion.o (81%)
 create mode 100644 STM32F4_FC_DEV/Debug/Core/Src/dma.d
 create mode 100644 STM32F4_FC_DEV/Debug/Core/Src/dma.o
 create mode 100644 STM32F4_FC_DEV/Debug/Core/Src/dma.su
 rewrite STM32F4_FC_DEV/Debug/Core/Src/gpio.o (74%)
 rewrite STM32F4_FC_DEV/Debug/Core/Src/main.o (80%)
 rewrite STM32F4_FC_DEV/Debug/Core/Src/spi.o (74%)
 rewrite STM32F4_FC_DEV/Debug/Core/Src/stm32f4xx_it.o (79%)
 rewrite STM32F4_FC_DEV/Debug/Core/Src/tim.o (74%)
 rewrite STM32F4_FC_DEV/Debug/Core/Src/usart.o (81%)
 rewrite STM32F4_FC_DEV/Debug/STM32F4_FC_DEV.elf (75%)
 rewrite STM32F4_FC_DEV/Debug/STM32F4_FC_DEV.list (69%)



swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git push -u origin main
Username for 'https://github.com': shlee853
Password for 'https://shlee853@github.com': 
Enumerating objects: 1014, done.
Counting objects: 100% (1014/1014), done.
Delta compression using up to 8 threads
Compressing objects: 100% (819/819), done.
Writing objects: 100% (828/828), 1.45 MiB | 1.06 MiB/s, done.
Total 828 (delta 530), reused 0 (delta 0)
remote: Resolving deltas: 100% (530/530), completed with 46 local objects.
To https://github.com/shlee853/STM32F4_FC_DEV.git
   cb2666f..c858506  main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$ git log --pretty=oneline
c8585068d7bfc48fe531b63e0f518ee2d68291d8 (HEAD -> main, origin/main) done receiving  GPS data with DMA and Parsing UBX data format
cb2666fed0ff08b71738e501bc091ec138c4b98b done receiving GPS data with NMEA, but, can't configure UBX with CFG messages
2c7790379d578411ffd79b477bc3d011fbef1e4a done implementation for quaternion algorithm(Madgwick/Mahony) & serial plotter
a6c6c2c509d4b8f015c27d609f126741bb7b7c28 Implemented udDelay function using sysTick(obsoleted LL_mDelay)
891968755a226792e2732c03d22b81d1042d2bc1 done project ICM20602(gyro&accel sensors) interface using SPI
19c17e72497f7834e9a04da35338347f51a986c8 done project for receiving data using interupt and transmit received data
cc840798716809f6b47b4111b825a60381d1934d done project for poilling Transmit data using USART6
00af3f79301c64ba1b43044869f96cf8848c678a Initial Release & done project for LED blink
swift@swift-HP-Pavilion-dv6-Notebook-PC:~/workspace/STM32CubeIDE/dev$

 

 

github 

https://github.com/shlee853/STM32F4_FC_DEV/tree/main/STM32F4_FC_DEV

 

GitHub - shlee853/STM32F4_FC_DEV: Development DIY Flight Controller using STM32F404 MCU

Development DIY Flight Controller using STM32F404 MCU - GitHub - shlee853/STM32F4_FC_DEV: Development DIY Flight Controller using STM32F404 MCU

github.com

 

728x90

댓글