过节吃完饭,回来继续测试板载传感器。本次测试ISM330DHCX,3轴加速度+3轴陀螺仪传感器,读Datasheet发现,是带嵌入式机器学习内核的,这部分还没有测试,趁这会先把基本功能测试一下。读完datasheet,了解个大概,看原理图,如图1所示:0 z& ? a; x) J' p$ S1 \8 j7 ]
t3 \& C+ T, `+ C5 N
) M' v3 n- i1 V0 b5 \7 l图1' j/ ~7 s; C5 Q8 ^# z" }! M0 e
依然使用的SPI接口,根据前面的IC测试,思路搬过来使用。依然使用CubeMx现把框架搭一下,引脚定义如图2所示:" w6 p# h5 ~ `2 h1 r
3 W3 J2 V8 m5 E: o! s
, @' d2 u3 B8 D$ |5 Q1 R% X. m图2
+ M+ s, O8 @ l下面就是添加所需要的初始化代码,IC初始化如下:' }9 j( A" p3 W Q. ]9 o; a
- /* Start device configuration. */8 t/ P, W- M7 T- a" x4 U
- ism330dhcx_device_conf_set(&dev_ctx, PROPERTY_ENABLE);) n7 j* t8 @. }9 J5 z5 u6 e4 \
- /* Enable Block Data Update */
9 }5 m4 v' w; x4 R - ism330dhcx_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);7 f3 [+ V, O. [8 X2 r; i
- /* Set Output Data Rate */3 u! Z1 ?8 b' g- C3 S( w
- ism330dhcx_xl_data_rate_set(&dev_ctx, ISM330DHCX_XL_ODR_12Hz5);) y6 ]) w) _; d, r5 M2 ?# G
- ism330dhcx_gy_data_rate_set(&dev_ctx, ISM330DHCX_GY_ODR_12Hz5);
; x5 K8 D% R4 I* r+ E9 N- H% Z G8 C - /* Set full scale */
( h3 w; T3 X) ?, B1 d% m( W - ism330dhcx_xl_full_scale_set(&dev_ctx, ISM330DHCX_2g);
w7 U1 r2 O) U I, R0 ? - ism330dhcx_gy_full_scale_set(&dev_ctx, ISM330DHCX_2000dps);
8 _& ~9 _; A8 e8 s4 p3 F% c, ^$ K - /* Configure filtering chain(No aux interface)
( r$ g2 P% N3 ~ C4 ^) A0 a - *: W% d* M$ L) d0 E: z/ M w
- * Accelerometer - LPF1 + LPF2 path$ g& |& Q( E ?
- */6 [/ D; T1 |/ |6 M M
- ism330dhcx_xl_hp_path_on_out_set(&dev_ctx, ISM330DHCX_LP_ODR_DIV_100);- i% I6 q7 N5 j" N: S7 m
- ism330dhcx_xl_filter_lp2_set(&dev_ctx, PROPERTY_ENABLE);
复制代码 2 M* o- p/ ?2 s2 }
在while中添加读取数据的code,如下所示:# |. n6 S3 s: @, L% S
- ism330dhcx_xl_flag_data_ready_get(&dev_ctx, &dreg);2 T: m. C5 I# Z; r+ `+ I: J+ M* z
- if(dreg)( e, \- ]- k7 ?6 k% o$ b& W+ z) G
- {
A3 N. x/ D& y6 t0 ~0 @ - /* Read acceleration field data */
" a) k( m. T- T# r1 ^! [: Y - memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));3 F, h |8 M* z; x% y9 j% W3 o
- ism330dhcx_acceleration_raw_get(&dev_ctx, data_raw_acceleration);
& a7 e( r3 t1 k - acceleration_mg[0] =' Y& B( Z+ a* I3 \+ Y
- ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[0]);
0 L& U9 o# v* M+ u5 ]! K - acceleration_mg[1] =
- }' a7 N" X7 M( V9 D2 c - ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[1]);
0 z* b% @* U" D g C5 j - acceleration_mg[2] =& C- D* N5 N* \" I( @: t- ^
- ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[2]);
- s. Y3 b# s4 I: {8 X. _ - }' x. i. W* [' _9 l' q$ B, A1 H
- ism330dhcx_gy_flag_data_ready_get(&dev_ctx, &dreg);
* [; H$ ?. }! l- @$ r* N" q - H" h3 P: J) l$ N6 `
- if (dreg) {7 G m5 U% J) v1 A6 u
- /* Read angular rate field data */, l$ u' x# Z1 l" w: `5 K( V
- memset(data_raw_angular_rate, 0x00, 3 * sizeof(int16_t));, i) B9 L3 z8 X/ F& o, J
- ism330dhcx_angular_rate_raw_get(&dev_ctx, data_raw_angular_rate);: d" q0 l. y# t: c0 L
- angular_rate_mdps[0] =
6 F8 O; d, ?0 H) ] - ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[0]);
( y1 b- Z# Q& f l - angular_rate_mdps[1] =
, s) v) ~5 u% z7 p' B6 ` - ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[1]);
6 p: A; `; f3 n( @5 M - angular_rate_mdps[2] =* ]: c( I" n8 N& P' u
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[2]);2 a* i" w( N% m( M4 u/ w. p- I4 [
-
9 X% u$ e! I/ C, b6 p9 o/ v - }/ u! x* W, J% M- L& u [& [
| t! E- l1 W' d. f p2 X" T b- ism330dhcx_temp_flag_data_ready_get(&dev_ctx, &dreg);
& f/ S* K ~( v' j3 U - ; U& Y8 E: w+ W% Q( ]% W6 h
- if (dreg) {' F( g# L9 \, J
- /* Read temperature data */ k/ y9 x, ]0 O% o
- memset(&data_raw_temperature, 0x00, sizeof(int16_t));
7 U, I& n% B. Q' u - ism330dhcx_temperature_raw_get(&dev_ctx, &data_raw_temperature);, ]5 Y+ Q; O. {/ ~9 N
- temperature_degC = ism330dhcx_from_lsb_to_celsius(
1 D0 V3 p2 K4 J1 c* ^, S( d - data_raw_temperature);5 Q0 |2 | k* g" ?- G
" h) e C8 `4 S1 a; x( r& G- }
复制代码 2 h+ c( y0 g9 L( j3 `0 J" R
% B/ v: W4 N0 }% n0 H: Y3 _. n. m9 @
7 s' `' d) U) v9 s测试失败,显示hardware_fault,硬件错误。想了想,是晚上有点恍惚,把时钟配置错了,板载的外部时钟是16M,而cubemx中的默认时钟是8M,修改过来,重新生成项目,debug,测试结果如下;4 q# o' _$ K7 J) ?9 g* |: u9 n
, `1 a8 S3 `1 t) \$ ?" }8 K
5 t- r- _& ^% v% z9 t图3
+ H6 q4 k% [$ B4 m! q( R4 d! y+ y# ~7 {7 H
4 T0 b, `6 o3 ^- `/ I: Z0 X5 x# q这段时间总是感觉知识浮于基础,得往深处继续挖掘学习。下次试一试Nano edge AI。) a- U& d8 b2 V
/ e0 o/ Z0 m% _/ |' o* ^ |
属实可以,等楼主4 t, K+ ^- g# l, s. d# T
论坛有分享Nano edge AI 使用教程的可参考,https://shequ.stmicroelectronics.cn/thread-636670-1-1.html
这个帖子之前看过,写的不错
加油
哈哈,稍等片刻。
必须更新!