int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_I2C1_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
pData=0x80;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x6b, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
HAL_Delay(100);
pData=0x01;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x6b, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x18;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x1b, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x00;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x1c, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x80;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x37, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x01;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x38, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x00;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x6c, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x02;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x1a, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x04;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x19, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
if(num>=200)
{
HAL_UART_Transmit(&huart2, mpu_Data, 14, HAL_MAX_DELAY);
num=0;
}
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
其中下面这段代码顺序不可变,否则可能读不出值
/* USER CODE BEGIN 2 */
pData=0x80;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x6b, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
HAL_Delay(100);
pData=0x01;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x6b, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x18;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x1b, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x00;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x1c, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x80;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x37, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x01;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x38, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x00;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x6c, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x02;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x1a, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
pData=0x04;
HAL_I2C_Mem_Write(&hi2c1, 0xd1, 0x19, I2C_MEMADD_SIZE_8BIT, &pData, 1, HAL_MAX_DELAY);
/* USER CODE END 2 */
下面是MPU6050 INT引脚触发32外部中断并计数读值,并由HAL_UART_Transmit(&huart2, mpu_Data, 14, HAL_MAX_DELAY);发送出读取的值,这些值都被存在一个mpu_Data的数组里面。
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==GPIO_PIN_3)
{
num++;
HAL_I2C_Mem_Read(&hi2c1, 0xd1, 0x3B, I2C_MEMADD_SIZE_8BIT, mpu_Data, 14, HAL_MAX_DELAY);
}
}
/* USER CODE END 4 */