[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로 동작하게 될 것임
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의 값이 나와야 한다.
알아둘 점: Tx_information 배열의 첫 Address는 0x2000 0384이다.
근데 이상한 것은,, 384가 배열의 [0]번째 값인데
왜 403이 0인지를 모르겠다.
400이상 넘어가면 주소값이 달라지는 것 같기도 하고..
아무튼 테라텀으로는 49까지 배열의 값이 바뀌는 것을 확인했다.
답변: 우리는 8bit기 때문에
2. Rx측 코드 배열 값 변경하고 확인해보기
Rx코드 배열 값 바꾸는 부분 코드
/* 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 */
}
rx_information[0]값이 10으로 계속 뜬다.
왜인지는 모르겠는데, 초기화를 안 했을 경우 이렇게 뜬다.
배열도 0으로 초기화하고,
혹시 lora recieve의 값도 고려하지 않기 위해 주석처리 했는데도 이렇게 뜬다.
뭐지~
'프로젝트 기록 > 23SEMA_Control_STM32' 카테고리의 다른 글
[STM32] teraterm에서 시리얼 입력이 안될 때 (0) | 2023.01.10 |
---|---|
[STM32 CUBE IDE] 프로젝트에 라이브러리 파일 추가하기 (1) | 2023.01.10 |
[STM32제어] ADC Interrupt+DMA로 받아오기 (0) | 2023.01.09 |
[LoRa]1- 모듈, SPI인터페이스 (1) | 2023.01.09 |
[STM32] STM Studio 사용법 (0) | 2023.01.09 |