过节吃完饭,回来继续测试板载传感器。本次测试ISM330DHCX,3轴加速度+3轴陀螺仪传感器,读Datasheet发现,是带嵌入式机器学习内核的,这部分还没有测试,趁这会先把基本功能测试一下。读完datasheet,了解个大概,看原理图,如图1所示:
- b4 X) z' G4 ?6 X' _/ _' v
% I. p; w4 Z$ B' Q9 N
3 S# O5 B; Z1 L. q0 k" I( f图11 l! t1 Y' }% F9 p5 T
依然使用的SPI接口,根据前面的IC测试,思路搬过来使用。依然使用CubeMx现把框架搭一下,引脚定义如图2所示:3 H+ ~- P8 q4 ?; y. c
5 [# w+ c3 N, B1 s, n+ z! i
2 U6 y4 K. r( W2 B+ S' W2 p" N图2; D0 D7 V6 r+ m/ Q' h% f
下面就是添加所需要的初始化代码,IC初始化如下:6 ^6 G) D6 n. P+ ] o: s
- /* Start device configuration. */; ]5 L# I( e* a
- ism330dhcx_device_conf_set(&dev_ctx, PROPERTY_ENABLE);
1 [! P7 u0 I2 N1 N, V# \" Y' P5 Y) ? - /* Enable Block Data Update */* H% W4 E# T& O4 B$ }8 R& ? P7 |
- ism330dhcx_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);1 ~6 T8 G/ x7 s6 G1 G) K- d% x
- /* Set Output Data Rate */
5 a; K* s A7 m- M5 }, o E - ism330dhcx_xl_data_rate_set(&dev_ctx, ISM330DHCX_XL_ODR_12Hz5);
4 d) q2 B- |: M/ T - ism330dhcx_gy_data_rate_set(&dev_ctx, ISM330DHCX_GY_ODR_12Hz5);+ ]% j0 c7 [) D! ~+ X0 D% W5 c
- /* Set full scale */
& x7 U6 R- z& {7 u& k8 p8 W; G - ism330dhcx_xl_full_scale_set(&dev_ctx, ISM330DHCX_2g);4 i) l. M, C8 w& ~4 W! f& v/ b# \
- ism330dhcx_gy_full_scale_set(&dev_ctx, ISM330DHCX_2000dps);2 K ]8 F3 `2 I
- /* Configure filtering chain(No aux interface)* k8 R, z- ^) F7 b! }: s
- *
( F; U" M w* V1 H1 S. N - * Accelerometer - LPF1 + LPF2 path
6 e0 l5 Z# d% c" R- S* T - */
- ]8 j9 h% |( S5 W1 |7 L% m, \ - ism330dhcx_xl_hp_path_on_out_set(&dev_ctx, ISM330DHCX_LP_ODR_DIV_100);
' U$ p- u; b1 ?5 [/ x- E& z4 G - ism330dhcx_xl_filter_lp2_set(&dev_ctx, PROPERTY_ENABLE);
复制代码
1 H- i5 V9 \( e# Q2 F# N ?4 I) V在while中添加读取数据的code,如下所示:
O/ n6 [9 \% Q! @" c- ism330dhcx_xl_flag_data_ready_get(&dev_ctx, &dreg);, B! a, U( Z+ w
- if(dreg)
; ^. `8 E$ D; s; K2 F: d - {5 G% t8 u1 m/ O/ ~8 `! r8 {2 e
- /* Read acceleration field data */7 H- r; I/ S: K7 \* |
- memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));* R: q) z: A; t( r7 _+ r' h
- ism330dhcx_acceleration_raw_get(&dev_ctx, data_raw_acceleration);2 u, S# t4 F) G' o* L& b
- acceleration_mg[0] =
; J7 F7 w- }& R+ C/ o" d$ x - ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[0]);
! P1 @1 }8 Q$ s- H! T! {% c3 h- i - acceleration_mg[1] =' u: O5 Q. b( l% L7 i1 J
- ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[1]);
) E" S# {! P' u/ ^ - acceleration_mg[2] =
4 v1 x6 }) i4 E4 r i - ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[2]);
, b9 ~/ Y' {7 U# a - }
9 M/ |2 U' T. [) z - ism330dhcx_gy_flag_data_ready_get(&dev_ctx, &dreg);
1 t6 \7 L* G# D3 V+ @; X9 @
4 A N7 D, K& }4 p$ _) p4 l3 s; h- if (dreg) {# y# Y0 x, l% u/ p/ j- {
- /* Read angular rate field data */
* `$ Y. P+ l2 H8 |+ ] - memset(data_raw_angular_rate, 0x00, 3 * sizeof(int16_t));+ l4 w6 ]; F' B. _( P+ }
- ism330dhcx_angular_rate_raw_get(&dev_ctx, data_raw_angular_rate);
# l& B$ w6 }0 Y) ^( ]6 ?% p$ M) E - angular_rate_mdps[0] =) y# k: x7 v6 I# d" s8 G% p' Y0 y
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[0]);+ G5 {, ]. G, F2 k# o: u
- angular_rate_mdps[1] =: Z# C+ f' B! G
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[1]);
|8 Y5 `- ?- J- s- y4 N" j - angular_rate_mdps[2] =
{9 P3 i& w* J# M - ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[2]);- k4 p1 ]# J! _* T4 ^6 o
- # M1 o2 Q! Q9 K+ ~# k
- }1 x5 k$ ~0 P7 U1 ]0 z6 ^
: c; Q/ w0 _. D+ b% M1 J, O- ism330dhcx_temp_flag_data_ready_get(&dev_ctx, &dreg);
0 v ?# }9 Q. p. h" z - : H y2 m- j8 l2 J8 Y$ o9 q2 L) x7 |
- if (dreg) {. i9 v/ M2 f3 l! V1 x
- /* Read temperature data */2 C* Q: z6 B; ~3 G
- memset(&data_raw_temperature, 0x00, sizeof(int16_t));6 K, l& D# ^; r% z4 ^. ~
- ism330dhcx_temperature_raw_get(&dev_ctx, &data_raw_temperature);4 Z; u! _, h9 O: E) I+ h Z
- temperature_degC = ism330dhcx_from_lsb_to_celsius(. X9 e: m5 B3 U! f
- data_raw_temperature);: k/ E) l; ^9 C# K- U
% Y( [* O3 [0 D6 w$ ?+ z5 X- }
复制代码
4 Y3 t, E5 z4 ^5 s. k$ Z8 B* e% `; {3 D& L+ B
, g: h) N: ^. _$ Z- p/ g5 N* |3 y
测试失败,显示hardware_fault,硬件错误。想了想,是晚上有点恍惚,把时钟配置错了,板载的外部时钟是16M,而cubemx中的默认时钟是8M,修改过来,重新生成项目,debug,测试结果如下;
" ]$ N3 i* w+ y! M6 F7 z6 r8 P) J4 A
4 m, G' R" _; z) L; I4 e% |2 ^3 I
6 }/ Y0 K1 ^) x0 ?' u5 Z' S1 }图3. @& r( f5 s) D/ N5 Q5 F) Q: Q A
& O; d' ~0 C6 y1 R- Y
2 {0 J, h) \ ?& a; F这段时间总是感觉知识浮于基础,得往深处继续挖掘学习。下次试一试Nano edge AI。
1 K. T" G0 a4 z8 a. j6 U# H9 t% A0 G/ Q" q! i
|
属实可以,等楼主9 F5 G% b* K1 `8 B- `
论坛有分享Nano edge AI 使用教程的可参考,https://shequ.stmicroelectronics.cn/thread-636670-1-1.html
这个帖子之前看过,写的不错
加油
哈哈,稍等片刻。
必须更新!