• 카테고리

    질문 & 답변
  • 세부 분야

    임베디드 · IoT

  • 해결 여부

    해결됨

M8N BaudRate 변화따른 수신 오작동현상

20.05.29 23:23 작성 조회수 391

0

안녕하세요. UART4를 9600bps로 fix하고 UART6을 BaudRate을 921600bps, 115200bps로 하면 GPS 데이터를 잘 읽어오는데 9600bps로 수정하면 20번 정도 데이터를 가져오다가 그 다음부터는 데이터가 엄청나게 많은 양을 쏟아내며 프로그램이 종료가 됩니다. 그러다보니 강의에서 처럼 M8N의 설정을 바꿀 수가 없어 질문을 드립니다. GPS의 문제인 것 같은데 혹시 BaudRate를 다르게 해서(921600bps, 115200bps등) 바꿀 수 없을까요?

답변 8

·

답변을 작성해보세요.

1

우선 급한 문제는 해결되었다니 다행이네요.

말씀하신것처럼 HAL 방식은 버퍼 크기만큼 데이터를 받아오는 방식에 적합합니다. HAL의 코드 구조 상, 1바이트 단위로 버퍼에 저장하는건 좀 느리게 동작할 겁니다.  HAL 방식으로 메시지프레임 크기만큼 데이터를 한번에 받아오는 방식의 단점이, 중간에 데이터가 한바이트라도 누락되면 그걸 처리해주는 코드를 작성하기가 좀 번거롭습니다. 그래서 저는 LL 로 한바이트씩 수신될 때마다 검사하고 버퍼에 저장하는 코드를 직접 작성하는걸 선호합니다. 이건 성향의 차이라서 잘 동작한다면 뭘 쓰든 문제될 건 없을 것 같네요.

'B5 62 ···', '62 B5 62 ···', 'B5 62 ···'

이 부분은 저도 대답을 드리기가 좀 어렵습니다. 코드의 문제일 것 같은데, 수신받아서 저장하거나 버퍼의 배열 인덱스를 증감하는 부분에서 문제가 있을 것 같습니다. 그 부분을 한번 확인해보세요.

0

아 그러면 u-center 말고 그냥 일반 터미널 프로그램으로 한번 출력해보세요. 아마 u-center에서 메시지 프로토콜에 맞는 프레임만 출력해서 보여줄수도 있습니다. 그리고 LL로 제 수업처럼 똑같이 따라하신다면 문제없이 잘 출력될거에요 ㅎㅎ 한번 확인해보시기 바랍니다.

0

GPS 출력 주기는 200ms로 설정하였고 이보다 더 빠르게 100ms 로 해도 터미널 및 LED 토글 변화가 3초정도의 주기를 같고 있습니다... ㅠㅠ HAL로 여러 시도해보고 도저히 안되면 LL로 갈아타겠습니다! 도움이 되는 답변 주셔서 항상 감사합니다!

0

그리고 개행 속도가 느리다는게, 데이터 표시되는 주기가 3초라는 말씀인가요? 그렇다면 아마 GPS 설정에서 메시지 출력주기가 잘 설정되었는지 한번 확인해보세요. 코드가 달라서 느리게 출력될 순 있긴해도 3초는 너무 긴 것 같습니다 ㅎㅎ

0

 ChrisP님 우선 문제점이 일어나는 부분을 해결하였습니다. 저는 LL Driver보다는 HAL Driver에 익숙해서 지금 까지 계속 HAL로 변형해서 수업을 듣고 있습니다. LL에서는 1바이트 단위로 읽는 것이 안정적으로 작동하는 것 같습니다. HAL에서도 동일하게 했는데 불안불안 하더니 결국 많은 데이터를 쏟아내는 일이 생기더라구요 ㅠㅠ 제가 실력이 안 좋은 것이 겠지만...

 무튼 HAL에서는 Buffer를 만들어 읽어야 안정화되는 것 같습니다. 1바이트씩 Buffer_Rx[i]에 담고 나중에 한번에 읽으니 BaudRate을 9600으로 수정하여도 많은 양의 데이터를 쏟아내는일이 없었으며, CheckSUM, DataParsing 모두 안정적으로 데이터를 주고 받았으며, M8N 데이터 수정도 Buffer_Tx[i]로 1바이트씩 담고 한 번에 송신하니 M8N의 기능을 수정하는 것도 문제 없이 되었습니다.  

 다만, HAL의 문제점이 속도가 느리네요. ChrisP님은 DataParsing후 터미널에 개행(\n)속도가 빠르시던데... 저는 좀 많이 느려요... 한번 Parsing 하는데 3초 정도 걸려요... 알고리즘의 차이 같은데... 무튼 ChrisP님의 강의에 조금이라도 도움이 되고자 글을 남겼습니다. 이상입니다. 감사합니다~

 그런데 M8N UBX 프로토콜 수정후

'B5 62 ···.', 'B5 62 ···','B5 62 ···.'로 나와야하는데

저는 'B5 62 ···', '62 B5 62 ···', 'B5 62 ···' 이런 식으로 데이터 하나 이상하게 나오는데... 혹시 M8N 에서 빨간 부분을 없애기 위해 좀 더 수정 해야할 부분이 더 있을 까요? ㅠㅠ

UBX 프로토콜 Binary Console 화면

0

아 STM32의 UART 보레이트를 115200 으로 하셨다면 GPS도 같은 보레이트로 설정되어있어야 합니다.

GPS의 기본 설정은 9600 bps로 되어있을겁니다. 따라서 u-center로 설정을 바꿔주셔야 하는데, 문제는 GPS 전원을 뺐다가 다시 넣으면 원래 설정으로 초기화 되는 문제가 있습니다.

이 문제를 해결하기 위해서 3-5 강의에서 코드를 통해서 u-center 없이 GPS의 보레이트를 115200 으로 설정합니다.

3-5 영상을 보시면 이해가 좀 가실겁니다.

한번 해보시고 안되면 다시 질문주시기 바랍니다~

0

BaudRate를 UART6을 115200으로 설정하고 u-center 들어가서 설정을 변경 및 'Send'를 입력해도 강의에서 처럼 UBX 프로토콜로 설정이 안되네요 ㅎㅎㅎ 우선 ChrisP님께서 PC와 직접연결을 시도해보며 여러 다른 시도를 해보겠습니다. 늦은 시간 답변 주셔서 감사합니다!

0

안녕하세요!

우선 터미널 프로그램을 다른걸로 바꿔서 해보시길 추천드립니다.

그래도 같은 증상이 반복된다면, PC와 GPS를 바로 연결해서 한번 설정을 바꿔보세요.

PC ↔ GPS 를 USB to UART 모듈로 연결하시면 됩니다.

단, 이 경우 핀 피치가 달라서 1.27mm 를 2.54mm 로 바꿔줄 커넥터가 필요할 수 있습니다.

GPS에 동봉된 케이블에 그 커넥터가 들어있을테니 그걸로 연결하시면 될 겁니다.

GPS 설정을 115200bps로 바꿔서 한번 해보세요.