2783|1

425

帖子

4

TA的资源

纯净的硅(初级)

楼主
 

[X-NUCLEO-IKS01A2测评] 用Nucleo-STM32L476和MEMS board X-NUCLEO-IK...编程 [复制链接]

  本帖最后由 北方 于 2017-9-29 10:21 编辑

1、从零开始创建一个项目, 选择import,但是因为IKS01A2比较新,只有IKS01A1的库,其实是可以用来测试的。只要对比其中的区别就好,因为识别i2c设备是通过I2C线路的,其实主板并不知道是什么设备。
2、创建后的文件结构如下,

3、文件代码如下,

  1. /* Includes */
  2. #include "mbed.h"
  3. #include "x_nucleo_iks01a1.h"

  4. /* Instantiate the expansion board */
  5. static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15);

  6. /* Retrieve the composing elements of the expansion board */
  7. static GyroSensor *gyroscope = mems_expansion_board->GetGyroscope();
  8. static MotionSensor *accelerometer = mems_expansion_board->GetAccelerometer();
  9. static MagneticSensor *magnetometer = mems_expansion_board->magnetometer;
  10. static HumiditySensor *humidity_sensor = mems_expansion_board->ht_sensor;
  11. static PressureSensor *pressure_sensor = mems_expansion_board->pt_sensor;
  12. static TempSensor *temp_sensor1 = mems_expansion_board->ht_sensor;
  13. static TempSensor *temp_sensor2 = mems_expansion_board->pt_sensor;

  14. /* Helper function for printing floats & doubles */
  15. static char *printDouble(char* str, double v, int decimalDigits=2)
  16. {
  17.   int i = 1;
  18.   int intPart, fractPart;
  19.   int len;
  20.   char *ptr;

  21.   /* prepare decimal digits multiplicator */
  22.   for (;decimalDigits!=0; i*=10, decimalDigits--);

  23.   /* calculate integer & fractinal parts */
  24.   intPart = (int)v;
  25.   fractPart = (int)((v-(double)(int)v)*i);

  26.   /* fill in integer part */
  27.   sprintf(str, "%i.", intPart);

  28.   /* prepare fill in of fractional part */
  29.   len = strlen(str);
  30.   ptr = &str[len];

  31.   /* fill in leading fractional zeros */
  32.   for (i/=10;i>1; i/=10, ptr++) {
  33.     if(fractPart >= i) break;
  34.     *ptr = '0';
  35.   }

  36.   /* fill in (rest of) fractional part */
  37.   sprintf(ptr, "%i", fractPart);

  38.   return str;
  39. }


  40. /* Simple main function */
  41. int main() {
  42.   uint8_t id;
  43.   float value1, value2;
  44.   char buffer1[32], buffer2[32];
  45.   int32_t axes[3];
  46.   
  47.   printf("\r\n--- Starting new run ---\r\n");

  48.   humidity_sensor->read_id(&id);
  49.   printf("HTS221  humidity & temperature    = 0x%X\r\n", id);
  50.   pressure_sensor->read_id(&id);
  51.   printf("LPS25H  pressure & temperature    = 0x%X\r\n", id);
  52.   magnetometer->read_id(&id);
  53.   printf("LIS3MDL magnetometer              = 0x%X\r\n", id);
  54.   gyroscope->read_id(&id);
  55.   printf("LSM6DS0 accelerometer & gyroscope = 0x%X\r\n", id);
  56.   
  57.   wait(3);

  58.   while(1) {
  59.     printf("\r\n");

  60.     temp_sensor1->get_temperature(&value1);
  61.     humidity_sensor->get_humidity(&value2);
  62.     printf("HTS221: [temp] %7s°C,   [hum] %s%%\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));
  63.    
  64.     temp_sensor2->get_fahrenheit(&value1);
  65.     pressure_sensor->get_pressure(&value2);
  66.     printf("LPS25H: [temp] %7s°F, [press] %smbar\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));

  67.     printf("---\r\n");

  68.     magnetometer->get_m_axes(axes);
  69.     printf("LIS3MDL [mag/mgauss]:  %7ld, %7ld, %7ld\r\n", axes[0], axes[1], axes[2]);

  70.     accelerometer->get_x_axes(axes);
  71.     printf("LSM6DS0 [acc/mg]:      %7ld, %7ld, %7ld\r\n", axes[0], axes[1], axes[2]);

  72.     gyroscope->get_g_axes(axes);
  73.     printf("LSM6DS0 [gyro/mdps]:   %7ld, %7ld, %7ld\r\n", axes[0], axes[1], axes[2]);

  74.     wait(1.5);
  75.   }
  76. }
复制代码

4、点击Compile,直接生成可执行文件。把这个文件拖入自动添加的nucleo盘符,就可以flash和自动执行了。




最新回复

汇总贴在此: [X-NUCLEO-IKS01A2测评]—by 北方 https://bbs.eeworld.com.cn/forum ... 7445&fromuid=536508 (出处: 电子工程世界-论坛)  详情 回复 发表于 2017-10-2 15:55
点赞 关注
 
 

回复
举报

1万

帖子

203

TA的资源

管理员

沙发
 
汇总贴在此:
[X-NUCLEO-IKS01A2测评]—by 北方
https://bbs.eeworld.com.cn/forum ... 7445&fromuid=536508
(出处: 电子工程世界-论坛)
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表