过节吃完饭,回来继续测试板载传感器。本次测试ISM330DHCX,3轴加速度+3轴陀螺仪传感器,读Datasheet发现,是带嵌入式机器学习内核的,这部分还没有测试,趁这会先把基本功能测试一下。读完datasheet,了解个大概,看原理图,如图1所示:
( c1 @ f& ~9 y& @- i/ d) e
' r8 d3 ^# t, e
1 L; t6 l! X/ F2 F图1
, b. t$ C, f9 G2 q5 }+ _依然使用的SPI接口,根据前面的IC测试,思路搬过来使用。依然使用CubeMx现把框架搭一下,引脚定义如图2所示:
3 Q+ i2 @4 ]& c( s0 H/ I
; j6 }8 @4 r! B& K* y* N" \0 i N2 L; S! ~4 G6 ^; r& v \
图2
2 }+ F8 @% R$ v. ?+ p& E下面就是添加所需要的初始化代码,IC初始化如下:9 x6 F4 Z. Q9 @- _
- /* Start device configuration. */
' n+ f0 [7 [, Z6 ]) {! E# G - ism330dhcx_device_conf_set(&dev_ctx, PROPERTY_ENABLE);8 ?* H8 J6 l5 v- |5 c3 G* x, p
- /* Enable Block Data Update */) C' T5 N7 w' H5 s/ a9 |6 q8 u' H
- ism330dhcx_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
; c" C _* t3 e4 j- V$ X! | - /* Set Output Data Rate */
: f- U' p1 a4 ~2 ?# S: B - ism330dhcx_xl_data_rate_set(&dev_ctx, ISM330DHCX_XL_ODR_12Hz5);' u* u7 `& U* Q3 x' s2 s# P5 q8 _
- ism330dhcx_gy_data_rate_set(&dev_ctx, ISM330DHCX_GY_ODR_12Hz5);8 H4 ~- ~, Y, x% j! [: u$ a2 i# ~
- /* Set full scale *// p( u o }8 m) N2 q
- ism330dhcx_xl_full_scale_set(&dev_ctx, ISM330DHCX_2g);
4 m, }+ A; r8 |" N7 r9 U5 e - ism330dhcx_gy_full_scale_set(&dev_ctx, ISM330DHCX_2000dps);" ~; }4 a: z" M I0 w# W( i, }1 Q# P
- /* Configure filtering chain(No aux interface)* r" Y0 z& ~' R- R* \: |5 ]
- *0 G% s4 p/ ^9 _* Z$ F
- * Accelerometer - LPF1 + LPF2 path
+ j: f/ F$ ?& J0 a - */: x& K6 Y) x! E
- ism330dhcx_xl_hp_path_on_out_set(&dev_ctx, ISM330DHCX_LP_ODR_DIV_100);' K# e( U# P" y/ Y
- ism330dhcx_xl_filter_lp2_set(&dev_ctx, PROPERTY_ENABLE);
复制代码
" z: k: [$ K1 n# ~; V& k! {% o3 w在while中添加读取数据的code,如下所示:: V5 A3 A" A8 h
- ism330dhcx_xl_flag_data_ready_get(&dev_ctx, &dreg);
% T S; y% n$ L - if(dreg)
+ w$ L, _" O" u# ]; F% n - {
- U9 R; T1 ?1 S# {- |" e. T# d - /* Read acceleration field data */
0 r/ x0 p7 g; T, D( J - memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));$ z( p. _) V( E
- ism330dhcx_acceleration_raw_get(&dev_ctx, data_raw_acceleration);) `5 J/ a& a! m
- acceleration_mg[0] =
1 A3 k7 S5 w5 a5 s: h - ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[0]);
$ ?& v( M5 N7 v. T% ^" \ - acceleration_mg[1] =
/ ~! q7 _# p( T( N+ s$ d0 D/ q! v - ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[1]);
6 X) l/ C; e* M* D2 r* F - acceleration_mg[2] =: a* u2 }9 U) f' h
- ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[2]);
) O7 E! g# S) _ - }
# G2 h: a+ o, g/ g, v6 x. Q! a) [ - ism330dhcx_gy_flag_data_ready_get(&dev_ctx, &dreg);8 Y: A: K v) X* c: H; X' k: [
& g V# s% Y9 C- _' D- if (dreg) {( p; O4 {- h" ~4 l) b. z9 V
- /* Read angular rate field data */1 ~$ U$ ^0 R' r) u( D" V
- memset(data_raw_angular_rate, 0x00, 3 * sizeof(int16_t));
. F1 q Y( i1 i/ Q/ `! s' u - ism330dhcx_angular_rate_raw_get(&dev_ctx, data_raw_angular_rate);
4 s1 T4 y8 U( J/ ] - angular_rate_mdps[0] =' @. J/ R. I9 |' e$ D# G, ^1 m
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[0]);0 Q9 Y) `- D# f) k! S; s, f/ U
- angular_rate_mdps[1] =3 M9 i3 v+ _* `+ m' K' X6 `( J; d+ h
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[1]);2 V. M3 Y, J( W: ^: G) b" g) j
- angular_rate_mdps[2] =
8 o2 O1 |$ R1 L/ G% d; z - ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[2]);
% ?) z) n5 \8 W1 O; o& t# n& I0 \ - ) A: ~$ P k) B9 B$ b* K
- }- S" W# W; F2 r1 }. m; j
2 o( R. V) o& ]/ [, V- ism330dhcx_temp_flag_data_ready_get(&dev_ctx, &dreg);
# o# z* i& C0 Y/ I - / o. A5 a Z9 M5 G% W
- if (dreg) {% h l6 C6 H) A7 t& L" O6 c! r4 x
- /* Read temperature data */4 P; R! C0 y& X) c0 T( C, S5 Z0 H
- memset(&data_raw_temperature, 0x00, sizeof(int16_t)); |8 L& A( \" I- N3 B
- ism330dhcx_temperature_raw_get(&dev_ctx, &data_raw_temperature);7 l9 a6 i# S5 A& O2 m
- temperature_degC = ism330dhcx_from_lsb_to_celsius(3 g1 y& A# R! N
- data_raw_temperature);1 ~, l6 X9 H; E
- ( l" }2 Y6 l) e. B
- }
复制代码
g( U3 R- I+ V Q( F/ J! t* r4 e; P
, `, I' J' r2 z7 S" o
. o% T6 v i8 [- E* C: h6 \测试失败,显示hardware_fault,硬件错误。想了想,是晚上有点恍惚,把时钟配置错了,板载的外部时钟是16M,而cubemx中的默认时钟是8M,修改过来,重新生成项目,debug,测试结果如下;2 a, R+ @0 q) b* t. e
# d4 ~6 A p8 i
3 M0 j: L4 o, H- Y! s( z* u
图37 C s4 O; L* r
- Q( R8 |/ g- K- h
- R, ^+ Y, [+ l4 j8 U$ g; {这段时间总是感觉知识浮于基础,得往深处继续挖掘学习。下次试一试Nano edge AI。
2 i9 ^6 k# K9 r7 \. Y e" y' m& z/ y, \4 R* f! I8 I4 C; Y, L
|
属实可以,等楼主8 B+ l4 e# a: l8 [4 q! n
论坛有分享Nano edge AI 使用教程的可参考,https://shequ.stmicroelectronics.cn/thread-636670-1-1.html9 G) N9 S& \5 ~, T" i
这个帖子之前看过,写的不错
加油
哈哈,稍等片刻。
必须更新!