[X-NUCLEO-IKS01A2测评] 用Nucleo-STM32L476和MEMS board X-NUCLEO-IK...编程
本帖最后由 北方 于 2017-9-29 10:21 编辑1、从零开始创建一个项目, 选择import,但是因为IKS01A2比较新,只有IKS01A1的库,其实是可以用来测试的。只要对比其中的区别就好,因为识别i2c设备是通过I2C线路的,其实主板并不知道是什么设备。
2、创建后的文件结构如下,
3、文件代码如下,
/* Includes */
#include "mbed.h"
#include "x_nucleo_iks01a1.h"
/* Instantiate the expansion board */
static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15);
/* Retrieve the composing elements of the expansion board */
static GyroSensor *gyroscope = mems_expansion_board->GetGyroscope();
static MotionSensor *accelerometer = mems_expansion_board->GetAccelerometer();
static MagneticSensor *magnetometer = mems_expansion_board->magnetometer;
static HumiditySensor *humidity_sensor = mems_expansion_board->ht_sensor;
static PressureSensor *pressure_sensor = mems_expansion_board->pt_sensor;
static TempSensor *temp_sensor1 = mems_expansion_board->ht_sensor;
static TempSensor *temp_sensor2 = mems_expansion_board->pt_sensor;
/* Helper function for printing floats & doubles */
static char *printDouble(char* str, double v, int decimalDigits=2)
{
int i = 1;
int intPart, fractPart;
int len;
char *ptr;
/* prepare decimal digits multiplicator */
for (;decimalDigits!=0; i*=10, decimalDigits--);
/* calculate integer & fractinal parts */
intPart = (int)v;
fractPart = (int)((v-(double)(int)v)*i);
/* fill in integer part */
sprintf(str, "%i.", intPart);
/* prepare fill in of fractional part */
len = strlen(str);
ptr = &str;
/* fill in leading fractional zeros */
for (i/=10;i>1; i/=10, ptr++) {
if(fractPart >= i) break;
*ptr = '0';
}
/* fill in (rest of) fractional part */
sprintf(ptr, "%i", fractPart);
return str;
}
/* Simple main function */
int main() {
uint8_t id;
float value1, value2;
char buffer1, buffer2;
int32_t axes;
printf("\r\n--- Starting new run ---\r\n");
humidity_sensor->read_id(&id);
printf("HTS221humidity & temperature = 0x%X\r\n", id);
pressure_sensor->read_id(&id);
printf("LPS25Hpressure & temperature = 0x%X\r\n", id);
magnetometer->read_id(&id);
printf("LIS3MDL magnetometer = 0x%X\r\n", id);
gyroscope->read_id(&id);
printf("LSM6DS0 accelerometer & gyroscope = 0x%X\r\n", id);
wait(3);
while(1) {
printf("\r\n");
temp_sensor1->get_temperature(&value1);
humidity_sensor->get_humidity(&value2);
printf("HTS221: %7s°C, %s%%\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));
temp_sensor2->get_fahrenheit(&value1);
pressure_sensor->get_pressure(&value2);
printf("LPS25H: %7s°F, %smbar\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));
printf("---\r\n");
magnetometer->get_m_axes(axes);
printf("LIS3MDL :%7ld, %7ld, %7ld\r\n", axes, axes, axes);
accelerometer->get_x_axes(axes);
printf("LSM6DS0 : %7ld, %7ld, %7ld\r\n", axes, axes, axes);
gyroscope->get_g_axes(axes);
printf("LSM6DS0 : %7ld, %7ld, %7ld\r\n", axes, axes, axes);
wait(1.5);
}
}
4、点击Compile,直接生成可执行文件。把这个文件拖入自动添加的nucleo盘符,就可以flash和自动执行了。
汇总贴在此:
—by 北方
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=567445&fromuid=536508
(出处: 电子工程世界-论坛)
页:
[1]