MPU9250MOME

画像1

画像2

画像3

MSB firstと書かれている。
CPOLは見つけられなかったので、2種類試し、WHO_AM_Iが正しい方を選択。ロジックアナライザーで確認するべき。
CPOL(LOW)-->0
立ち上がりでラッチ、立ち下がりでシフトと書かれているので、
CPHA(1 Edge)-->0​

画像4

/* USER CODE BEGIN 0 */
const uint8_t WHO_AM_I    = 0x75;
const uint8_t PWR_MGMT_1  = 0x6B;
const uint8_t CONFIG      = 0x1A;
const uint8_t GYRO_CONFIG = 0x1B;
const uint8_t GYRO_ZOUT_H = 0x47;
const uint8_t GYRO_ZOUT_L = 0x48;
const uint8_t ZG_OFFSET_H = 0x17;
const uint8_t ZG_OFFSET_L = 0x18;
uint8_t Tx = 0;
uint8_t Rx = 0;
int16_t GYRO_ZOUT = 0;
int16_t ZG_OFFSET = 0;
char buffer[1024];

void send_uart(char *s){
	HAL_UART_Transmit(&huart2, (uint8_t *) s, strlen(s), 2000);
}

void write_spi(uint8_t Tx, uint8_t write_val){
	HAL_GPIO_WritePin(SS_GPIO_Port, SS_Pin, GPIO_PIN_RESET);
	HAL_SPI_Transmit(&hspi1,(uint8_t *)&Tx,1,100);
	HAL_SPI_Transmit(&hspi1,(uint8_t *)&write_val,1,100);
	HAL_GPIO_WritePin(SS_GPIO_Port, SS_Pin, GPIO_PIN_SET);
}

void read_spi(uint8_t Tx){
	Tx = Tx | 0b10000000;
	HAL_GPIO_WritePin(SS_GPIO_Port, SS_Pin, GPIO_PIN_RESET);
	HAL_SPI_Transmit(&hspi1,(uint8_t *)&Tx,1,100);
	HAL_SPI_Receive(&hspi1,(uint8_t *)&Rx,1,100);
	HAL_GPIO_WritePin(SS_GPIO_Port, SS_Pin, GPIO_PIN_SET);
}
/* USER CODE END 0 */

  /* USER CODE BEGIN 2 */
	read_spi(WHO_AM_I);
	sprintf(buffer, "I am %u\n", Rx);
	send_uart(buffer);
	write_spi(PWR_MGMT_1, 0b00000000);
	write_spi(CONFIG, 0b00000000);
	write_spi(GYRO_CONFIG, 0b00011000);
	read_spi(GYRO_CONFIG);
	sprintf(buffer, "GYRO CONFIG is %u\n", Rx);
	send_uart(buffer);
 /* USER CODE END 2 */

    /* USER CODE BEGIN 3 */
 	read_spi(GYRO_ZOUT_H);
	GYRO_ZOUT = Rx << 8;
	read_spi(GYRO_ZOUT_L);
	GYRO_ZOUT += Rx;
	sprintf(buffer, "GYRO_ZOUT is %lf\n", (double)GYRO_ZOUT/16.384);
	send_uart(buffer);
	HAL_Delay(50);
 }
 /* USER CODE END 3 */

画像5


この記事が気に入ったらサポートをしてみませんか?