LPS22HH_Get_Temp함수 질문입니다.!ㅎㅎ
382
작성한 질문수 8
1. LPS22HH 의 Get_Temp함수에선 ICM20602와 다르게
Readbytes함수를 호출해서 (unsigned char*) 형태로 조금 다른데
이뜻은 unsigned char 로 형변환하여 구조체 멤버변수에 저장하는건가요??ㅎㅎ
2. Get_Temp함수와 Get3Axis 함수에서
Readbytes 함수를 호출할때 장치주소를 한번만 쓰시는데 그 이유가 궁금하고
그 뜻은 구조체 멤버변수에 배열형태로 주소가 이어져있기때문에 가능한건가요??
따로 다른 IC를 쓸때 참고하려고 여쭤봅니다.ㅎㅎ
답변 2
0
답변 감사드립니다!
몇가지 궁금점 해소가 안된것이 있어서 질문드립니다.
1.gyro 함수는 <<쉬프트연산을 하는데 temp함수는 unsigned char*형태로 형변환하기 때문에
<<쉬프트연산이 필요 없다는 말씀이시죠?
2.unsigned char*변수가 주소를 증가시키며 데이터를 수신하는것은 알겠으나
장치주소는 서로 다른데 한번만 써도 되는지 궁금합니다!
Readbytes함수를 써도 장치주소 Sendbyte는 한번만 쓰여있어서 궁금하여 여쭤봅니다!ㅎㅎ
0
1. icm-20602 수신 함수는 쉬프트 연산을 하지만 lps22hh 함수는 쉬프트 연산을 하지 않고도 순서대로 저장되는 이유는 (정확히 말씀드리면) 데이터 저장 순서가 달라서 그렇습니다.
리틀엔디언과 빅엔디언의 차이인데, icm-20602는 빅엔디언으로 데이터를 보내주기 때문에, 낮은번지부터 순서대로 받으면 high 바이트와 low 바이트 순서가 뒤바뀌어 있습니다. 따라서 비트연산등을 통해 그 엇갈려있는 순서를 원래대로 바꿔서 저장해주어야 합니다. (리틀엔디언으로 저장해야 하기 때문)
lps22hh는 데이터를 보내줄 때부터 리틀엔디언으로 보내주기 때문에 바이트 순서를 바꿔줄 필요 없이 순차적으로 읽어와서 저장해주면 됩니다.
※ 포인터와 리틀엔디언, 빅엔디언을 공부하시면 도움이 될 겁니다.
2. 레지스터 주소를 증가시키며 데이터를 수신하기 위해서는 레지스터의 주소가 연속되어있어야 합니다.
TEMP_OUT_L 0x2B부터 연속적으로 두바이트를 읽어오는 것과, TEMP_OUT_L 과 TEMP_OUT_H를 따로따로 한바이트씩 읽어오는것은 같은 효과겠지요. (두 레지스터의 주소가 연속되어있기 때문)
이와 마찬가지로 자이로 데이터 레지스터의 주소도 연속되어있기 때문에 시작주소부터 순차적으로 6바이트를 읽어오면 3축 자이로의 값을 모두 읽어오는 것과 같습니다.
0
도움이 됐다니 다행입니다!
네 맞습니다. 저도 좀 찾아보니 STM32 byte order는 Little endian만을 지원하는 것 같고, ARM Cortex M계열은 Dynamic endianness switching 을 지원하지 않는다고 어떤 분이 글을 올려놓은게 있네요. 이 경우 칩 제조사의 Endian 방식을 따르라고 되어있다고 합니다.
https://electronics.stackexchange.com/questions/183021/stm32f103c8xx-big-or-small-endian
STM32는 Little endian을 지원하는 것 같고, 보통 대부분의 MCU의 경우 Little endian을 따릅니다. 저도 아직 Big endian 포맷을 따르는 MCU는 본적이 없고요.
그럼 앞으로도 계속 궁금해하시고 공부하시면서 개발하시기 바랍니다~
0
https://stackoverflow.com/questions/41194895/how-to-change-endianess-settings-in-cortex-m3
이것도 한번 보시면 좋을 것 같습니다.
M3와 M4 는 또 다를 수 있기 때문에, 가장 확실한 건 칩 제조사의 스펙매뉴얼을 확인해보는것 같네요~
0
안녕하세요!
1. temperature 변수는 int16_t* 포인터 변수이고 ReadBytes() 함수의 세번째 매개변수는 unsigned char* 포인터 변수입니다. 형태가 다르기 때문에 형변환을 해주어야 에러없이 빌드됩니다.
2. ReadBytes 내부에서 unsigned char* 변수가 가리키는 주소를 1씩 증가시키면서 데이터를 수신하도록 되어있기 때문에 시작주소를 전달합니다.
해당 질문은 C언어의 포인터와 함수, 배열에 관한 내용이므로 자세한 내용은 C언어의 해당 파트를 공부하시면 도움이 됩니다!
비행승인 문의드립니다
0
32
0
드론의 M4 모터가 느리게 작동합니다.
0
56
2
STM32CubeIDE 관련해서 질문이 있습니다.
0
88
2
while문 루프 속도
0
57
2
변수 선언
0
47
2
FS-i6를 꺼도 LED 토글되는 이유
0
64
2
Fs-i6 i-bus 수신 데이터 이상
0
106
3
3-4. UBX 위도 경도 정보 Terminal에서 깨짐 현상
0
84
2
3-4. LED 토글 안됨
0
46
1
3-1. M8N GPS 강의 통신 연결 관련 문의
0
75
1
2-3. LPS22HH 강의 수행값이 아두이노 IDE Plotter 및 Terminal에서 인식 안됨
0
75
2
6-4 SwC 2000
0
100
2
6-4 ESC Calibration
0
65
1
esc, 모터 교체
0
108
2
부저 소리가 안납니다.
0
130
2
비행 질문
0
61
1
7-5. offset
0
72
2
sysmem.c
0
69
2
전체 제어의 주기를 1KHz로 설정한 이유가 궁금합니다.
0
86
2
부품 구매 관련 문의
0
62
1
PID 게인 문제
0
79
3
3d telemetry cp210x 연결
0
117
2
8-1. 3DR Telemetry HAL_UART_Receive_IT(&huart1, &uart1_rx_data, 1); 관련 문의
0
69
2
PID제어 질문
0
120
2





