[STM32H7 EVM] 보드에는 SSM 모듈 연결용 커넥터가 있고 다양한 형태의 SSM 모듈을 연결해서 인터페이스 테스트가 가능하다.
Arduino 에서 I2C는 PB8(SCL), PB9(SDA)에 할당되어 있다.
// I2C Definitions
#define PIN_WIRE_SDA PB9
#define PIN_WIRE_SCL PB8
I2C 출력 테스트
I2C를 가장간단히 테스트 해볼수 있는 I2C 장치로 PCF8574 SSM 모듈을 사용해서 기본 출력 테스트를 해 보았다.
#include <Wire.h>
#define PCF_8574_ADDR 0x20
void write8(uint8_t Address, uint8_t Value)
{
Wire.beginTransmission(Address);
Wire.write(Value);
Wire.endTransmission();
}
void setup()
{
Serial.begin(115200);
Serial.println(F("PF8574 test"));
Wire.begin();
write8(PCF_8574_ADDR, 0xff);
}
int cnt = 0;
void loop()
{
if(cnt>8)cnt = 0;
write8(PCF_8574_ADDR, ~(1<<cnt++));
delay(100);
}
STM32H7에서 Arduino의 I2C 기본 인터페이스 출력 테스트가 동작 하였으니 I2C로 입력 테스틀 해 보자
간단히 테스트 해볼 수 있는 I2C 거리 측정 센서 모듈 VL53L01 모듈을 이용하여 거리정보를 측정해 보자
VL53L01 용 라이브러리는 STM32duino VL53L01 를 설치 하여 테스트 했다.
VL53L01 기본 예제 코드를 수정해서 시리얼 포트로 출력하도록 했다.
#include <Wire.h>
#include <VL53L1X.h>
VL53L1X sensor;
void setup()
{
Serial.begin(115200);
Wire.begin();
Wire.setClock(400000); // use 400 kHz I2C
sensor.setTimeout(500);
if (!sensor.init())
{
Serial.println("Failed to detect and initialize sensor!");
while (1);
}
// Use long distance mode and allow up to 50000 us (50 ms) for a measurement.
// You can change these settings to adjust the performance of the sensor, but
// the minimum timing budget is 20 ms for short distance mode and 33 ms for
// medium and long distance modes. See the VL53L1X datasheet for more
// information on range and timing limits.
sensor.setDistanceMode(VL53L1X::Long);
sensor.setMeasurementTimingBudget(50000);
// Start continuous readings at a rate of one measurement every 50 ms (the
// inter-measurement period). This period should be at least as long as the
// timing budget.
sensor.startContinuous(50);
}
void loop()
{
Serial.print(sensor.read());
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
}
Arduino의 시리얼 그래프로 출력해보니 VL53L01 거리값이 정상적으로 출력되는것을 확인할 수 있다.
반응형