inflearn logo
강의

講義

知識共有

STM32 ドローン開発のすべてをゼロから始める

2-3. LPS22HH 気圧センサー インターフェース

안녕하세요 질문 있습니다.

307

theka17142306

投稿した質問数 19

0

안녕하세요 기압센서 부분 관련 질문 드립니다.

 

질문 1)

강의를 보면 10분 50초 부분에 3 bytes를 받아서

상위 두 bytes를 shift하고 bitwise OR연산을 한다고 하는데 강의 뒷 부분의 실제 코드에는 그러한 연산을 하는 부분이 없는거 같은데 어느 함수 부분에서 그러한 연산을 하나요??

질문 2)

10분 23초 부분에 EN_LPFP와 LPFP_CFG 를 각가 1로 설정해야 된다고 되어 있는데 코드 어느 부분에서 그러한 설정을 하나요??

LPS22HH기압센서 드론-개발 iot

回答 2

1

theka17142306

명쾌한 답변 감사 드립니다.

0

ChrisP

안녕하세요!

A1)

강의 10:50의 설명에서는 bitwise shift를 통해 1바이트 3개를 3바이트 하나의 데이터로 합치지만, LPS22HH.c 라이브러리 에서는

LPS22HH_Readbytes(PRESSURE_OUT_XL, 3, (unsigned char*)pressure);

함수를 호출하고, 그 안에서는 아래같은 코드가 수행됩니다.

void LPS22HH_Readbytes(unsigned char reg_addr, unsigned char len, unsigned char* data)

{

...

SPI3_SendByte(reg_addr | 0x80); //Register. MSB 1 is read instruction.

while(i < len)

{

data[i++] = SPI3_SendByte(0x00); //Send DUMMY

}

...

}

이 코드의 내용은 (unsigned char*)pressure 포인터의 시작 주소부터 1번지씩 3 번 증가시키면서 읽은 값을 저장하는 코드입니다.

이 내용은 C언어의 포인터에 대한 내용이고, 코드가 강의 내용과는 살짝 달라 보이지만 연산의 결과는 동일합니다.

이 코드를 강의의 내용처럼 바꾼다면 아래처럼 할 수 있겠죠.

unsigned char tmp1 = SPI3_SendByte(0x00); //Send DUMMY

unsigned char tmp2 = SPI3_SendByte(0x00); //Send DUMMY

unsigned char tmp3 = SPI3_SendByte(0x00); //Send DUMMY

unsigned int total = (tmp3 << 16) | (tmp2 << 8) | tmp1;

 

A2)

해당 내용은 LPS22HH의 데이터시트를 보면서 라이브러리 코드와 비교하셔야 합니다.

데이터시트의 레지스터 맵 부분을 보시면 

이런 표를 보실 수 있습니다. 이것은 CTRL_REG1의 각각의 비트가 의미하는게 뭔지를 나타냅니다.

여기서 빨간색 네모 친 bit2와 bit3이 각각 LPFP_CFG와 EN_LPFP를 나타내죠. 이걸 기억해두시고,

이번에는 LPS22HH.c 의 int LPS22HH_Initialization(void) 함수를 보시면  196번째 줄 부터

// Enable LPF, Cut-off frequency

//0x08: ODR/9 0x0c: ODR/20

temp_reg = LPS22HH_Readbyte(CTRL_REG1);

temp_reg = temp_reg | 0x0c; //0000 1100

LPS22HH_Writebyte(CTRL_REG1, temp_reg);

이런 코드를 보실 수 있습니다.

이 코드는 CTRL_REG1 의 bit2와 bit3에 1을 넣는 코드입니다. (나머지는 그대로 둠)

따라서 LPFP_CFG와 EN_LPFP에 둘 다 1을 넣게 되는 것이죠.

비행승인 문의드립니다

0

37

0

드론의 M4 모터가 느리게 작동합니다.

0

63

2

STM32CubeIDE 관련해서 질문이 있습니다.

0

91

2

while문 루프 속도

0

60

2

변수 선언

0

51

2

FS-i6를 꺼도 LED 토글되는 이유

0

67

2

Fs-i6 i-bus 수신 데이터 이상

0

109

3

3-4. UBX 위도 경도 정보 Terminal에서 깨짐 현상

0

88

2

3-4. LED 토글 안됨

0

50

1

3-1. M8N GPS 강의 통신 연결 관련 문의

0

78

1

2-3. LPS22HH 강의 수행값이 아두이노 IDE Plotter 및 Terminal에서 인식 안됨

0

77

2

6-4 SwC 2000

0

103

2

6-4 ESC Calibration

0

68

1

esc, 모터 교체

0

111

2

부저 소리가 안납니다.

0

134

2

비행 질문

0

63

1

7-5. offset

0

75

2

sysmem.c

0

74

2

전체 제어의 주기를 1KHz로 설정한 이유가 궁금합니다.

0

89

2

부품 구매 관련 문의

0

65

1

PID 게인 문제

0

84

3

3d telemetry cp210x 연결

0

122

2

8-1. 3DR Telemetry HAL_UART_Receive_IT(&huart1, &uart1_rx_data, 1); 관련 문의

0

71

2

PID제어 질문

0

124

2