过节吃完饭,回来继续测试板载传感器。本次测试ISM330DHCX,3轴加速度+3轴陀螺仪传感器,读Datasheet发现,是带嵌入式机器学习内核的,这部分还没有测试,趁这会先把基本功能测试一下。读完datasheet,了解个大概,看原理图,如图1所示:
图1
依然使用的SPI接口,根据前面的IC测试,思路搬过来使用。依然使用CubeMx现把框架搭一下,引脚定义如图2所示:
图2
下面就是添加所需要的初始化代码,IC初始化如下:
- /* Start device configuration. */
- ism330dhcx_device_conf_set(&dev_ctx, PROPERTY_ENABLE);
- /* Enable Block Data Update */
- ism330dhcx_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
- /* Set Output Data Rate */
- ism330dhcx_xl_data_rate_set(&dev_ctx, ISM330DHCX_XL_ODR_12Hz5);
- ism330dhcx_gy_data_rate_set(&dev_ctx, ISM330DHCX_GY_ODR_12Hz5);
- /* Set full scale */
- ism330dhcx_xl_full_scale_set(&dev_ctx, ISM330DHCX_2g);
- ism330dhcx_gy_full_scale_set(&dev_ctx, ISM330DHCX_2000dps);
- /* Configure filtering chain(No aux interface)
- *
- * Accelerometer - LPF1 + LPF2 path
- */
- ism330dhcx_xl_hp_path_on_out_set(&dev_ctx, ISM330DHCX_LP_ODR_DIV_100);
- ism330dhcx_xl_filter_lp2_set(&dev_ctx, PROPERTY_ENABLE);
复制代码
在while中添加读取数据的code,如下所示:
- ism330dhcx_xl_flag_data_ready_get(&dev_ctx, &dreg);
- if(dreg)
- {
- /* Read acceleration field data */
- memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
- ism330dhcx_acceleration_raw_get(&dev_ctx, data_raw_acceleration);
- acceleration_mg[0] =
- ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[0]);
- acceleration_mg[1] =
- ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[1]);
- acceleration_mg[2] =
- ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[2]);
- }
- ism330dhcx_gy_flag_data_ready_get(&dev_ctx, &dreg);
- if (dreg) {
- /* Read angular rate field data */
- memset(data_raw_angular_rate, 0x00, 3 * sizeof(int16_t));
- ism330dhcx_angular_rate_raw_get(&dev_ctx, data_raw_angular_rate);
- angular_rate_mdps[0] =
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[0]);
- angular_rate_mdps[1] =
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[1]);
- angular_rate_mdps[2] =
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[2]);
-
- }
- ism330dhcx_temp_flag_data_ready_get(&dev_ctx, &dreg);
- if (dreg) {
- /* Read temperature data */
- memset(&data_raw_temperature, 0x00, sizeof(int16_t));
- ism330dhcx_temperature_raw_get(&dev_ctx, &data_raw_temperature);
- temperature_degC = ism330dhcx_from_lsb_to_celsius(
- data_raw_temperature);
- }
复制代码
测试失败,显示hardware_fault,硬件错误。想了想,是晚上有点恍惚,把时钟配置错了,板载的外部时钟是16M,而cubemx中的默认时钟是8M,修改过来,重新生成项目,debug,测试结果如下;
图3
这段时间总是感觉知识浮于基础,得往深处继续挖掘学习。下次试一试Nano edge AI。
|
属实可以,等楼主
论坛有分享Nano edge AI 使用教程的可参考,https://shequ.stmicroelectronics.cn/thread-636670-1-1.html
这个帖子之前看过,写的不错
加油
哈哈,稍等片刻。
必须更新!