![맨 위로 올라가기](https://tistory4.daumcdn.net/tistory/5482790/skin/images/ivmovetop.png)
Connecting IMU Sensor(MPU-6050) to STM32 Dev-Board.
MPU-6050 센서를 Arduino Uno 대신 Black Pill Board를 활용하여,
센서 데이터 값을 Console 창으로 출력하는 예제를 우선 만들어보려고 한다.
차후 BLE 통신으로 센서 값을 Slave Device로 송신하려면,
확실히 Custom 할 수 있을 만큼의 이해가 필요할 것으로 보인다.
https://github.com/chmnku/Point2Direction/blob/main/UnitTest/IMU/MPU_6050.c
Arduino Uno 를 활용하였던 예제를 참고하자면,
우선 IMU 센서를 사용하기 위해서는,
모듈간 Master와 Slave에 대한 이해가 요구된다.
Master(STM32F Dev-Board)- Controller
Slave(MPU-6050)- Peripheral
위와 같이 정리 할 수 있다.
그리고 Serial 통신이 아닌, I2C 통신으로 비동기 처리를 할 것이다.
그러면 STM32CubeMX에서 “I2C & Async” 두 가지 옵션이 선택되어야 할 것 같다.
그리고
setup 함수가 Init 함수와 같을테니까,
그리고 콘솔 화면에도 출력하기 위해서는 Serial 통신도 해야할 것이다.
Serial 통신이면 “Serial & sync” 일 것이니까 출력을 위해 이 두가지 옵션도 선택.
그리고 위에 이어서 이 두가지는 모두 “통신(Communication) 관련 옵션이니,
Application Layer에서 수행이 이루어져야 할 것으로 보인다.
그렇다면 ‘ap.c’ 코드 내 apInit 함수에서 관련 함수의 호출 발생되어야 할 것으로 보인다.
- Serial 통신 초기화 (Baudrate: 115200(default))
- I2C 통신 초기화 (Parameter 따로 없음: Master)
그리고 Master(Black Pil)에서 Slave(Peripheral:IMU)로 전송 시작
무엇을? = “0x68” 이라는 Sensor의 주소
그리고 I2C 통신으로 해당 바이트를 대기열에 넣고 보낸다.
107과 0
XXXX_write(107);
XXXX_write(0);
대략 이런식으로 될 것으로 보인다.
라이브러리에 지원되는 것이 있는지 확인이 필요해 보인다.
그리고 마지막으로 endTransmission.
여기까지가 apInit 함수의 내용이다.
여기서부터는 apMain 함수로 while 문 내에 들어갈 것이다.
- 먼저 uint8_t i; 라는 i 변수를 초기화한다.
- int16_t acc_raw[3], gyro_raw[3];
위와 같이 acc 와 gyro 값에 대한 raw 데이터가 들어갈 배열을 초기화한다. - 그리고
0x68 센서 주소.
59 값 write.
endTransmission 전송
request from 0x68의 6번째
for(i = 0; i < 3; i++) acc_raw[i] = (Wire.read() << 8) | Wire.read();
for(i = 0; i < 3; i++) gyro_raw[i] = (Wire.read() << 8) | Wire.read(); - 그리고
Serial 통신을 통하여 콘솔창에 해당 값들을 출력하기 위해,
sprintf(str, "Acc X:%d Y:%d Z%d / Gyro X:%d Y:%d Z%d",
acc_raw[0], acc_raw[1], acc_raw[2],
gyro_raw[0], gyro_raw[1], gyro_raw[2]);
Serial.println(str); - 반복.
정리하자면, 요구되는 배경 기술들을 리스트업을 해본다.
- STM32F 개발 보드에서의 Serial 통신을 통한 Console 창 출력
: UART - STM32F 개발 보드에서의 다른 모듈과의 I2C 통신 설정
: SDA, SCL - 필요로 하는 GPIO 핀 활성화 및 CubeMX에서의 Configuration List.
기존의 LED 테스트 템플릿을 활용하여, 다시 프로젝트를 생성한다.
***
모든 프로젝트에서 가장 우선시 되는 것은 내부 LED 점멸 테스트가 정상적으로
수행되어야 한다.
그리고 추가되는 옵션에 대해서는 소단위로 구분하여 디버깅해가며 작업한다.
======
Project는 최대한 C언어를 사용할 예정이니, C++로는 Project 생성하지 않을 것이다.
이렇게 해서 기본 템플릿 구성까지는 완료하였다.
'Firmware & Embedded > ARM' 카테고리의 다른 글
Delay (0) | 2024.02.22 |
---|---|
The method for setting up USB CDC on a dev-board(STM32f). (0) | 2024.02.19 |
Configuring GPIO Pins & Other options for the Bluepill Board / Troubleshooting Debugging Issues (0) | 2024.02.19 |
Reorganizing the File Structure of mbed Sys & Solving MACRO Issues! (0) | 2024.02.19 |
How to MACRO be configured to match the target HW Platform (0) | 2024.02.18 |