본문 바로가기
프로젝트 기록/23SEMA_Control_STM32

[LoRa] 1편. 통신을 위한 준비

by 소요이 2023. 1. 10.
728x90

[1편. 통신을 위한 준비]

 

 

0단계. 실습 배경

완성된 코드는 있지만, 한번에 돌리면 안 될 확률이 높다.

작년 선배들이 실전에 썼던 코드는 동작을 하는지 확인도 못 했다.

따라서 line by line으로 내가 코드를 이해하며 따라해 보는 과정이 필요하다.

 

- LoRa_Init()으로 로라를 세팅하고,

- 보낼 배열 Tx_information[20] = {0,} 을 만든다

- 배열의 값을 변화시키며 값이 변화하는지 Teraterm, STM Studio로 확인하고

- Rx측의 코드에서 수신받는 배열의 값도 변화시키고 Teraterm으로 확인해본 다음

(변화시키는 방식은 teraterm 입력으로 UART 통신을 먼저 해볼 생각이다.)

- 마지막으로 두 보드를 따로 연결할 생각이다.

 

 

클럭 설정은 아래와 같이 하였음.

보드에 붙어있는 crystal oscillator 로 LSE, HSE를 모두 사용.

PLLM은 /8, 180, /2로 많이 사용한다고 해서 그렇게 세팅하였고

APB1를 사용하는 타이머는 45MHz, (2~7, 12~14)

APB2를 사용하는 타이머는 90MHz로 동작하게 될 것임

 

 

APB1,2 사용하는 패리패럴

 

 

 

 

 

 

 

1단계. 배열의 값을 변화시키고 확인하기

/* USER CODE BEGIN 2 */
  void Init_LoRa();

	for (int i = 0; i<20; i++)
	{
		Tx_information[i] = i+30;
		sprintf(Tx_buffer, "%2d\n\n\r", Tx_information[i]);
		HAL_UART_Transmit(&huart2, Tx_buffer, strlen(Tx_buffer), 100);
		HAL_Delay(100);
	}
  /* USER CODE END 2 */

USER CODE BEGIN2에 있는 코드 중

관련 부분만 가져왔다.

for문으로 Tx_information[]의 값을 하나하나 변경시켰고, 

예상대로라면 30~49의 값이 나와야 한다.

 

Teraterm으로 확인 완료

 

알아둘 점: Tx_information 배열의 첫 Address는 0x2000 0384이다.

전체 변수 변화 관찰 완료
Tx_information[1]의 값 
Tx_information[10]의 값

 

근데 이상한 것은,, 384가 배열의 [0]번째 값인데

왜 403이 0인지를 모르겠다.

400이상 넘어가면 주소값이 달라지는 것 같기도 하고..

아무튼 테라텀으로는 49까지 배열의 값이 바뀌는 것을 확인했다.

 

답변: 우리는 8bit기 때문에 

 

 

 

2. Rx측 코드 배열 값 변경하고 확인해보기

Rx코드 배열 값 바꾸는 부분 코드

 

data 01, 02, 03, 19 4가지 변수 값 확인

 

/* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  LoRa_receive(&myLoRa, rx_information, 20);
	  data01 = rx_information[1];
	  data02 = rx_information[2];
	  data03 = rx_information[3];
	  data19 = rx_information[19];

	  sprintf(uart_buf, "%2d %2d %2d %2d\n\n\r", rx_information[1],rx_information[2],rx_information[3],rx_information[19]);
	  HAL_UART_Transmit(&huart2, uart_buf, strlen(uart_buf), 100);

	  HAL_Delay(300);
	  	  //uint8_t nVel1;
	  	  // Velocity1, Velocity2, Acceleration1, Acceleration2, Acc Flag, Check Bit, Current, Voltage, Minute, Second
	  	  //nVel1 = rx_information[1];

	  		//memset(abc, 0, sizeof(abc));
	  		//sprintf(abc, "%d\r\n", nVel1);
	  		//HAL_UART_Transmit(&huart2, abc, strlen(abc), 0xFFFF);

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

 

data값들 확인 및 LoRa 배열 값 확인

rx_information[0]값이 10으로 계속 뜬다.

 

 

 

 

 

왜인지는 모르겠는데, 초기화를 안 했을 경우 이렇게 뜬다.

 

배열도 0으로 초기화하고, 

혹시 lora recieve의 값도 고려하지 않기 위해 주석처리 했는데도 이렇게 뜬다.

뭐지~