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[len];
-
- /* 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[32], buffer2[32];
- int32_t axes[3];
-
- printf("\r\n--- Starting new run ---\r\n");
-
- humidity_sensor->read_id(&id);
- printf("HTS221 humidity & temperature = 0x%X\r\n", id);
- pressure_sensor->read_id(&id);
- printf("LPS25H pressure & 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: [temp] %7s°C, [hum] %s%%\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));
-
- temp_sensor2->get_fahrenheit(&value1);
- pressure_sensor->get_pressure(&value2);
- printf("LPS25H: [temp] %7s°F, [press] %smbar\r\n", printDouble(buffer1, value1), printDouble(buffer2, value2));
-
- printf("---\r\n");
-
- magnetometer->get_m_axes(axes);
- printf("LIS3MDL [mag/mgauss]: %7ld, %7ld, %7ld\r\n", axes[0], axes[1], axes[2]);
-
- accelerometer->get_x_axes(axes);
- printf("LSM6DS0 [acc/mg]: %7ld, %7ld, %7ld\r\n", axes[0], axes[1], axes[2]);
-
- gyroscope->get_g_axes(axes);
- printf("LSM6DS0 [gyro/mdps]: %7ld, %7ld, %7ld\r\n", axes[0], axes[1], axes[2]);
-
- wait(1.5);
- }
- }
4、点击Compile,直接生成可执行文件。把这个文件拖入自动添加的nucleo盘符,就可以flash和自动执行了。
本帖最后由 北方 于 2017-9-29 10:21 编辑