인프런 커뮤니티 질문&답변

Lee Kilhun님의 프로필 이미지
Lee Kilhun

작성한 질문수

바닥부터 시작하는 STM32 드론 개발의 모든 것

4-1. Flysky FS-i6 송신기 설정 및 FS-iA6B 수신기 i-Bus 데이터 수신

4-1 FS-i6 수신 테스트

작성

·

478

0

안녕하세요.  강의대로 따라한다고 하지만

결과가 항상 달라 애를 먹고 있습니다.

현상 : 수신 결과가 깨져서 나옵니다

UART5에서 수신된 데이터를  UART6으로  보는 것에서

각 통신속도가  115200으로 같은데 왜 안나올까요.

아래 코드에서 확인 가능할까요?

?

?.

void MX_UART5_Init(void)

{

  LL_USART_InitTypeDef USART_InitStruct = {0};

  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* Peripheral clock enable */

  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_UART5);

  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOC);

  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOD);

  /**UART5 GPIO Configuration

  PC12   ------> UART5_TX

  PD2   ------> UART5_RX

  */

  GPIO_InitStruct.Pin = LL_GPIO_PIN_12;

  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;

  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;

  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;

  GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;

  GPIO_InitStruct.Alternate = LL_GPIO_AF_8;

  LL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = LL_GPIO_PIN_2;

  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;

  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;

  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;

  GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;

  GPIO_InitStruct.Alternate = LL_GPIO_AF_8;

  LL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  /* UART5 interrupt Init */

  NVIC_SetPriority(UART5_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));

  NVIC_EnableIRQ(UART5_IRQn);

  USART_InitStruct.BaudRate = 115200;

  USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;

  USART_InitStruct.StopBits = LL_USART_STOPBITS_1;

  USART_InitStruct.Parity = LL_USART_PARITY_NONE;

  USART_InitStruct.TransferDirection = LL_USART_DIRECTION_RX;

  USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;

  USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;

  LL_USART_Init(UART5, &USART_InitStruct);

  LL_USART_ConfigAsyncMode(UART5);

  LL_USART_Enable(UART5);

}

/* USART6 init function */

void MX_USART6_UART_Init(void)

{

  LL_USART_InitTypeDef USART_InitStruct = {0};

  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* Peripheral clock enable */

  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART6);

  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOC);

  /**USART6 GPIO Configuration

  PC6   ------> USART6_TX

  PC7   ------> USART6_RX

  */

  GPIO_InitStruct.Pin = LL_GPIO_PIN_6|LL_GPIO_PIN_7;

  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;

  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;

  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;

  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;

  GPIO_InitStruct.Alternate = LL_GPIO_AF_8;

  LL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /* USART6 interrupt Init */

  NVIC_SetPriority(USART6_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));

  NVIC_EnableIRQ(USART6_IRQn);

  USART_InitStruct.BaudRate = 115200;

  USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;

  USART_InitStruct.StopBits = LL_USART_STOPBITS_1;

  USART_InitStruct.Parity = LL_USART_PARITY_NONE;

  USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;

  USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;

  USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;

  LL_USART_Init(USART6, &USART_InitStruct);

  LL_USART_ConfigAsyncMode(USART6);

  LL_USART_Enable(USART6);

}

답변 6

1

ChrisP님의 프로필 이미지
ChrisP
지식공유자

아 지금이 잘 출력되고 있는 겁니다.

HEX로 출력하면 '\n'같은 줄바꿈 문자가 hex로 바로 출력되기 때문에 줄이 바뀌지 않습니다.

ASCII로 출력하면 그때 줄바꿈이 되고요.

출력된 HEX값을 보면 i-Bus 프로토콜이 잘 출력되고 있습니다. 그대로 진행하시면 됩니다~

0

Lee Kilhun님의 프로필 이미지
Lee Kilhun
질문자

설정을 알려주신대로 했으나 줄바꿈이 안되더군요. ㅜ.ㅜ

테라텀이란 것을 다운 받아 수신했으나, hex 로 바꾸는 설정을 찾지 못해  진도를 내지 못하고 있습니다

오늘은 일단 쉬고 내일 다시 해야 겠어요.

0

ChrisP님의 프로필 이미지
ChrisP
지식공유자

프로그램이 뻗어버리는건 Terminal 프로그램 자체의 문제입니다. 다른 터미널 프로그램을 쓰셔도 좋습니다.

0

ChrisP님의 프로필 이미지
ChrisP
지식공유자

보시다시피 32바이트 데이터 출력엔 문제가 없습니다.

그리고 ASCII로 출력 시 CR=LF 를 체크하시면 줄바꿈이 잘 될겁니다.

확인해보세요!

0

Lee Kilhun님의 프로필 이미지
Lee Kilhun
질문자

강사님  

HEX로 출력 하니 수신 데이터과 그림과 같습니다. 

강의 화면과 다르게 줄바꿈 출력이 되고, 프로그램이 곧 죽어 버리네요 

추가 적인 설정이 필요 한가요? 

0

ChrisP님의 프로필 이미지
ChrisP
지식공유자

안녕하세요!

위의 첨부하신 터미널 사진에서 ASCII로 선택되어있는걸 HEX로 바꿔서 출력해보시겠어요?

그 사진을 올려주시면 다시 확인해보겠습니다.

반복적으로 데이터가 출력되고 있는걸로 봐선 잘 출력되고있는것 같아보이긴 하네요~

답글 부탁드립니다!

Lee Kilhun님의 프로필 이미지
Lee Kilhun

작성한 질문수

질문하기