MPU6050(姿态传感器)
BH1750(光照度)
HDC1080(温湿度)
MCP3421(数模转换)
都在一个I2C总线上
main.c
/**********************
芯片:STM32F103
实现功能:
引脚:
***********************/
#include "stdio.h"
#include "stm32f10x.h"
#include "main.h"
#include "bsp_DMAusart2.h"
#include "bsp_tim3.h"
#include "bsp_tim2.h"
#include "bsp_SysTick.h"
#include "bsp_dwt.h"
#include "bsp_i2c.h"
#include "bsp_crc.h"
#include "bsp_mpu6050.h"
#include "bsp_bh1750.h"
#include "bsp_hdc1080.h"
#include "bsp_mcp3421.h"
extern unsigned int Task_Delay[NumOfTask];
uint8_t Scan_key_flag;
float DWT_UsedTime = 0; //DWT
int main()
{
// 初始化USART
USART2_DMA_Init(9600, TwoUART.Tx_buf, TwoUART.Rx_buf, USART2_REC_LEN);
USART2_DMASendString("AppStart!\n", sizeof("AppStart!"));
// 初始化定时器
TIM2_Init();
//TIM3_Init(36-1, 1);1us
TIM3_Int_Init(71, 999); // 1ms
uint8_t status1 = 0;
uint8_t hdc1080_delay = 0;
uint8_t bh1750_delay = 0;
uint8_t hdc1080_init_flage = 0;
float bh1750_dat;
float temper = 0, humidity = 0;
float mcp3421_dat = 0;
int bh1750_err = 0, hdc1080_err = 0, MCP3421_err = 0;
short mpu6050_Accel[3]; // 加速度
short mpu6050_Gyro[3]; // 陀螺仪
float mpu6050_Temp; // 姿态传感器内部温度
uint8_t mpu6050_init_flage = 0;
while(1)
{
DWT_UsedTime = DWT_TS_GET_Flag();
if(Scan_key_flag == 1)
{
Scan_key_flag = 0;
// 计数
hdc1080_delay++;
bh1750_delay++;
}
switch(status1)
{
case 0: // bh1750光照
bh1750_err = BH1750_READ_DATA(&bh1750_dat , &bh1750_delay);
if(bh1750_err >= 0)
{
status1 = 1;
}
break;
case 1: // mcp3421温湿度
if(hdc1080_init_flage == 0)
{
HDC1080_Init();
hdc1080_init_flage = 1;
}else
{
hdc1080_err = HDC1080_Read_TemperAndHumidity( &temper, &humidity, &hdc1080_delay);
if(hdc1080_err >= 0)
{
status1 = 2;
}
}
break;
case 2: // hdc1080数压力
MCP3421_Init();
MCP3421_Read(&mcp3421_dat);
status1 = 3;
break;
case 3: // mpu6050姿态传感器
if(mpu6050_init_flage == 0)
{
MPU6050_Init();
mpu6050_init_flage = 1;
}else
{
if(MPU6050ReadID() == 1) // 检测MPU是否存在
{
MPU6050ReadAcc(mpu6050_Accel); // 加速度
MPU6050ReadGyro(mpu6050_Gyro); // 陀螺仪
MPU6050_ReturnTemp(&mpu6050_Temp); // 器件内部温度
}
status1 = 0;
}
break;
}
DWT_UsedTime = DWT_TS_GET();
// 输出数据
if(bh1750_err >=0 && hdc1080_err >=0 )
{
char buffer6[256] = {0};
sprintf(buffer6, "时间: %6.7f 计数:%d 光照: %5.5f 温度: %5.5f 湿度: %5.5f 压力: %5.5f Status%d\r\n 姿态: 加速度: %d %d %d 陀螺仪:%d %d %d 温度:%5.2f\r\n",
DWT_UsedTime/72000000.0, hdc1080_delay, bh1750_dat, temper, humidity, mcp3421_dat, status1,
mpu6050_Accel[0], mpu6050_Accel[1], mpu6050_Accel[2],
mpu6050_Gyro[0], mpu6050_Gyro[1], mpu6050_Gyro[2], mpu6050_Temp); // 计数耗时时间
USART2_DMASendString(buffer6, 256);
}
}
}