2289|0

1382

帖子

2

TA的资源

五彩晶圆(初级)

楼主
 

STEVAL-IDB007V1 板载传感器的读取 [复制链接]

  本帖最后由 cruelfox 于 2018-1-29 08:40 编辑

DK 软件中提供了传感器的API,可以不从头写起就访问板载的传感器了。下面的代码是从BLE SensorDemo范例中 sensor.c 抄出来的。

初始化IMU:
  1. IMU_6AXES_DrvTypeDef *Imu6AxesDrv = NULL;
  2. LSM6DS3_DrvExtTypeDef *Imu6AxesDrvExt = NULL;

  3. typedef struct {
  4.   int32_t AXIS_X;
  5.   int32_t AXIS_Y;
  6.   int32_t AXIS_Z;
  7. } AxesRaw_t;

  8. static AxesRaw_t acceleration_data;

  9. void init_acc(void)
  10. {
  11.   /* LSM6DS3 library setting */
  12.   IMU_6AXES_InitTypeDef InitStructure;
  13.   uint8_t tmp1 = 0x00;
  14.   
  15.   Imu6AxesDrv = &LSM6DS3Drv;
  16.   Imu6AxesDrvExt = &LSM6DS3Drv_ext_internal;
  17.   InitStructure.G_FullScale      = 125.0f;
  18.   InitStructure.G_OutputDataRate = 13.0f;
  19.   InitStructure.G_X_Axis         = 0; //1;
  20.   InitStructure.G_Y_Axis         = 0;//1;
  21.   InitStructure.G_Z_Axis         = 0; //1;
  22.   InitStructure.X_FullScale      = 2.0f;
  23.   InitStructure.X_OutputDataRate = 13.0f;
  24.   InitStructure.X_X_Axis         = 1;
  25.   InitStructure.X_Y_Axis         = 1;
  26.   InitStructure.X_Z_Axis         = 1;  
  27.   
  28.   /* LSM6DS3 initiliazation */
  29.   Imu6AxesDrv->Init(&InitStructure);
  30.    
  31.   /* Disable all mems IRQs in order to enable free fall detection */ //TBR
  32.   LSM6DS3_IO_Write(&tmp1, LSM6DS3_XG_MEMS_ADDRESS, LSM6DS3_XG_INT1_CTRL, 1);
  33.   
  34.   /* Clear first previous data */
  35.   Imu6AxesDrv->Get_X_Axes((int32_t *)&acceleration_data);
  36.   
  37.   /* Enable Free fall detection */
  38.   Imu6AxesDrvExt->Enable_Free_Fall_Detection();
  39. }
复制代码


在需要加速计数据的时候,例如这样访问:

  1. AxesRaw_t acc_data;
  2. if (Imu6AxesDrv->Get_X_Axes((int32_t *)&acc_data)== IMU_6AXES_OK) {
  3.                         printf("g=(%d, %d, %d);", acc_data.AXIS_X, acc_data.AXIS_Y, acc_data.AXIS_Z);
  4. }
复制代码


压力计的初始化:
  1. PRESSURE_DrvTypeDef* xLPS25HBDrv = &LPS25HBDrv;  
  2. void init_prs(void)
  3. {  
  4.   /* LPS25HB initialization */

  5.   PRESSURE_InitTypeDef InitStructure;
  6.   InitStructure.OutputDataRate = LPS25HB_ODR_1Hz;
  7.   InitStructure.BlockDataUpdate = LPS25HB_BDU_READ; //LPS25HB_BDU_READ LPS25HB_BDU_CONT
  8.   InitStructure.DiffEnable = LPS25HB_DIFF_ENABLE;  // LPS25HB_DIFF_ENABLE
  9.   InitStructure.SPIMode = LPS25HB_SPI_SIM_3W;  // LPS25HB_SPI_SIM_3W
  10.   InitStructure.PressureResolution = LPS25HB_P_RES_AVG_32;
  11.   InitStructure.TemperatureResolution = LPS25HB_T_RES_AVG_16;  
  12.   xLPS25HBDrv->Init(&InitStructure);
  13. }
复制代码


读取其中的温度和压力传感器并转换为浮点数:
  1. float data;
  2.    if (xLPS25HBDrv->GetTemperature(&data) == 0)
  3.      {
  4.             printf("\tT=%f,", data);
  5.       }
  6.     if (xLPS25HBDrv->GetPressure(&data) == 0)
  7.       {
  8.             printf("\tp=%f\r\n", data);
  9.       }
复制代码


在这些API背后,调用的是诸如 SdkEvalI2CRead()  SdkEvalSPIRead() 的函数去访问 I2C, SPI 硬件实现传感器的访问。这样对某些用户显得方便,不用管背后实现的细节。事实上,这两个板载的传感器都是支持SPI, I2C两种方式访问的,只是评估板将压力计以I2C连接,IMU以SPI连接了。如果接口方式更换,使用DK库中提供的上层API只需改动一下配置的头文件就照样用了,甚为方便。

当然,要充分挖掘这两个传感器的更复杂功能,扒开API隐藏掉的细节,自己操作 I2C、SPI 对其进行读写也是必要的。
点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表