过节吃完饭,回来继续测试板载传感器。本次测试ISM330DHCX,3轴加速度+3轴陀螺仪传感器,读Datasheet发现,是带嵌入式机器学习内核的,这部分还没有测试,趁这会先把基本功能测试一下。读完datasheet,了解个大概,看原理图,如图1所示:
. F& \- B. i0 f9 w. l' ~5 T T0 F
, F/ G: f# A5 T# P9 C& u
( q; N1 S) Q5 {: `) t! L% F3 _2 M图1' z! s) k, C, o. D( l0 z- \/ J# r
依然使用的SPI接口,根据前面的IC测试,思路搬过来使用。依然使用CubeMx现把框架搭一下,引脚定义如图2所示:
3 V [- x. l z# d( S: ]4 m
3 D& x" H |* a% Z4 \
) l* }& F* h% _4 h+ ?( U图2
( A ]2 u/ |$ @, M) N, ^$ R下面就是添加所需要的初始化代码,IC初始化如下:& a0 C0 D2 i' x! c% k% r
- /* Start device configuration. */+ l! ?2 Q7 A$ L' R+ G7 b) \
- ism330dhcx_device_conf_set(&dev_ctx, PROPERTY_ENABLE);7 P; ?! P' G D6 q" n
- /* Enable Block Data Update */3 i3 {( z7 g4 [& }1 D3 j; f
- ism330dhcx_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
7 L) d' h5 `6 ? d0 ~ - /* Set Output Data Rate */
% D3 b7 j% X4 N3 W$ e - ism330dhcx_xl_data_rate_set(&dev_ctx, ISM330DHCX_XL_ODR_12Hz5);' Z# x* {3 L. Q/ i* y+ |% b* A
- ism330dhcx_gy_data_rate_set(&dev_ctx, ISM330DHCX_GY_ODR_12Hz5);
: ]4 T) S# q: [$ I! k - /* Set full scale */5 i* e; a3 X Y# f6 t( q8 g
- ism330dhcx_xl_full_scale_set(&dev_ctx, ISM330DHCX_2g);) w1 v/ y8 G; [
- ism330dhcx_gy_full_scale_set(&dev_ctx, ISM330DHCX_2000dps);
( V& {* ^+ g! B. Q, P/ p7 u) ?: k$ e N - /* Configure filtering chain(No aux interface)
" P5 @! J1 H. I, E1 b" Z7 \6 {+ m - *
+ A) f& T: ~2 L8 l9 S - * Accelerometer - LPF1 + LPF2 path' C# z7 Y1 a r( |! J7 ~) c2 s
- */9 e- N# f C* L0 e1 u
- ism330dhcx_xl_hp_path_on_out_set(&dev_ctx, ISM330DHCX_LP_ODR_DIV_100);
+ c# M3 t3 q9 F2 @- _ - ism330dhcx_xl_filter_lp2_set(&dev_ctx, PROPERTY_ENABLE);
复制代码 . U+ \( X1 w) v1 v7 x. s3 I
在while中添加读取数据的code,如下所示:4 u$ D% Z8 R& i. C
- ism330dhcx_xl_flag_data_ready_get(&dev_ctx, &dreg);
Y' H3 i$ j( _ - if(dreg)( B# b2 E& L7 B1 J
- {1 k5 W( W" l/ `# s
- /* Read acceleration field data */) M& I4 L4 Y4 a4 O& R5 s
- memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
3 S) _/ f6 S0 F" R) E D0 M( d0 F0 J5 y: N - ism330dhcx_acceleration_raw_get(&dev_ctx, data_raw_acceleration);/ n2 s# ^7 p$ f% @, k
- acceleration_mg[0] =
$ c; N) |- @* S' k: [* n: G* }, L& o - ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[0]);
: r! N+ \: Z6 T6 Y7 R1 m! B - acceleration_mg[1] =
5 R& h0 {; }! r7 J. W* u4 H+ g - ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[1]);' U0 h- g' k9 Q* q9 V
- acceleration_mg[2] =+ n. z1 D$ I2 p9 R& ]
- ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[2]);
- K; _+ x; f: z( b% h6 e* l$ T - }8 v- }6 S. w1 S8 i
- ism330dhcx_gy_flag_data_ready_get(&dev_ctx, &dreg);
; Q/ G% `- m- v9 G0 I7 Y
* d2 f t/ z2 L& P- if (dreg) {" ~' L! V8 h/ o* D9 Y0 I) E' T. t; G
- /* Read angular rate field data */! m" P1 ]7 e# U6 o) r
- memset(data_raw_angular_rate, 0x00, 3 * sizeof(int16_t));/ w. c7 J# U; d$ x4 [1 o# @+ o
- ism330dhcx_angular_rate_raw_get(&dev_ctx, data_raw_angular_rate);
0 y! s k! p. x2 W - angular_rate_mdps[0] =
{: ~% d/ U8 T - ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[0]);
5 O2 g; R1 t* t8 o - angular_rate_mdps[1] =. r% x0 f( ^: ^3 J% `
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[1]);
7 K. c. I3 _! k( b2 n3 } - angular_rate_mdps[2] =8 P: U- W9 ], H& \
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[2]);
0 k) k$ X' x+ c) a -
/ D2 J$ D) D# U: _. M$ s: C - }* E6 U& v" o) z. o
7 U8 q; z- D. F- ism330dhcx_temp_flag_data_ready_get(&dev_ctx, &dreg);" F' o1 \- d( `' E5 ^
0 H6 x, F: {+ K2 |% P9 @" n5 s5 _- if (dreg) {
3 X' R. T5 J* Y- {1 D8 s( t - /* Read temperature data */9 ~5 R: y3 T3 w; |! F* @
- memset(&data_raw_temperature, 0x00, sizeof(int16_t));* M& G, Q# N/ M, S
- ism330dhcx_temperature_raw_get(&dev_ctx, &data_raw_temperature);
2 ~. i+ u# v$ c- {. ]( W - temperature_degC = ism330dhcx_from_lsb_to_celsius(
& ^8 Q5 M2 Q% d - data_raw_temperature);+ z9 f6 j# W) l& }9 I6 m5 J2 U
) ^5 d. f& D6 g. n/ K( W4 C' `- }
复制代码
0 h; t2 q- u3 p% \. \5 ?1 j3 ^$ p( t' G0 r) v; @/ I
. U) [1 L9 e5 f# S9 O$ \测试失败,显示hardware_fault,硬件错误。想了想,是晚上有点恍惚,把时钟配置错了,板载的外部时钟是16M,而cubemx中的默认时钟是8M,修改过来,重新生成项目,debug,测试结果如下;+ j H( E9 X. Y
: {) E" h3 I; \3 T+ k- s
6 P: C7 L: R/ g1 P图3$ P( s6 P) e% i$ i6 f' u3 V
) e" s( E7 m- N9 l+ K) U6 I* ~# l( ]# Z* X
这段时间总是感觉知识浮于基础,得往深处继续挖掘学习。下次试一试Nano edge AI。
/ x1 m) }, w% V- r2 @
( [) v7 ~5 c& e a/ _3 G |
属实可以,等楼主0 G* `( T5 s1 ~+ y* F0 |) p" t# C
论坛有分享Nano edge AI 使用教程的可参考,https://shequ.stmicroelectronics.cn/thread-636670-1-1.html
这个帖子之前看过,写的不错
加油
哈哈,稍等片刻。
必须更新!