过节吃完饭,回来继续测试板载传感器。本次测试ISM330DHCX,3轴加速度+3轴陀螺仪传感器,读Datasheet发现,是带嵌入式机器学习内核的,这部分还没有测试,趁这会先把基本功能测试一下。读完datasheet,了解个大概,看原理图,如图1所示:
& e) b# N/ j j4 L
. S8 O- g; n4 _7 L" A
, W; X2 T; |2 b4 M* b, D# J图10 O, D. {9 ^- t0 R4 Q. l' C
依然使用的SPI接口,根据前面的IC测试,思路搬过来使用。依然使用CubeMx现把框架搭一下,引脚定义如图2所示:2 ]- W$ `7 ^; c Y# A
0 L* n- _9 c4 ^4 }1 n7 C3 }5 ^4 H* }. v( O
图2
1 n1 Z; R, w) W, R% c. ?; u- A6 U% `下面就是添加所需要的初始化代码,IC初始化如下:
; Z- z6 Q2 R0 `' G" J( f/ K- /* Start device configuration. */7 a2 G l9 b8 _. N6 [/ `% e4 m" E- ?
- ism330dhcx_device_conf_set(&dev_ctx, PROPERTY_ENABLE);
8 \6 l- x l6 K: C" I! k. W - /* Enable Block Data Update */
; Y. V+ m& B8 }4 x! m5 j% F2 O - ism330dhcx_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
: x/ ~8 {3 `: |, p, ] \ - /* Set Output Data Rate */: \& g1 t. R2 b2 a# r/ P0 _
- ism330dhcx_xl_data_rate_set(&dev_ctx, ISM330DHCX_XL_ODR_12Hz5);' n- E7 y8 O3 P" ^7 o* ~
- ism330dhcx_gy_data_rate_set(&dev_ctx, ISM330DHCX_GY_ODR_12Hz5);
9 s( |! a4 X; b) v, z% b- G - /* Set full scale */
8 D8 R/ v3 F% k - ism330dhcx_xl_full_scale_set(&dev_ctx, ISM330DHCX_2g);& _# ^/ o( G% L2 P% _, L) n
- ism330dhcx_gy_full_scale_set(&dev_ctx, ISM330DHCX_2000dps);7 q1 c8 s- |# O4 Y5 s/ q
- /* Configure filtering chain(No aux interface)
8 O1 u, n5 f0 J( X - *
: g2 w% h S* T3 r& J - * Accelerometer - LPF1 + LPF2 path
+ {! e5 }8 @! @1 N - */: ^% I D/ M9 i' W0 ^1 ?! X
- ism330dhcx_xl_hp_path_on_out_set(&dev_ctx, ISM330DHCX_LP_ODR_DIV_100);
K, N+ f+ e0 \* ]5 _1 D - ism330dhcx_xl_filter_lp2_set(&dev_ctx, PROPERTY_ENABLE);
复制代码 8 R& b$ b% I! @- l# v- H- F
在while中添加读取数据的code,如下所示:
1 m$ \1 m3 Y$ V% A- ism330dhcx_xl_flag_data_ready_get(&dev_ctx, &dreg);
# O2 d: K4 Z d' e6 Z$ O \ - if(dreg)
8 p- A% H$ {9 N; A7 r - {/ a% Y; Q; p9 x, w9 j- G$ |
- /* Read acceleration field data */; ?( T& w& N! g; R6 z9 @
- memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));4 I% p; l* r) g1 ^
- ism330dhcx_acceleration_raw_get(&dev_ctx, data_raw_acceleration);
, }; u6 F& x6 B6 t6 ~0 Y- e+ Y# z - acceleration_mg[0] =- X- p5 o" e6 a1 N) \+ O
- ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[0]);8 T; v6 O4 p; K% \/ g1 d
- acceleration_mg[1] =
8 L: c2 o S# G" e2 Z9 w) ^ - ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[1]);9 P, e0 x F( c! ?
- acceleration_mg[2] =/ p) a% z/ j; P+ Q: @" H
- ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[2]);
& t9 F$ z; H/ V: X% r2 B% F7 S! \ - }) C6 z4 C+ Y6 R" X8 t& I: D7 g
- ism330dhcx_gy_flag_data_ready_get(&dev_ctx, &dreg);
% p: X W, V6 h0 W3 G - " X/ ^- |6 ?4 r! k0 V+ z" T, q/ @
- if (dreg) {
5 h$ J; L5 K4 Z - /* Read angular rate field data */) q5 |- ?: P' B. ]
- memset(data_raw_angular_rate, 0x00, 3 * sizeof(int16_t));
6 ]! K9 ~' b: h& f+ R2 [ - ism330dhcx_angular_rate_raw_get(&dev_ctx, data_raw_angular_rate);
; B$ K+ }! _6 | - angular_rate_mdps[0] =
+ e4 Q8 L0 i! z9 \4 f - ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[0]);6 u' A A; n* q' E6 ]
- angular_rate_mdps[1] =% n3 T6 T+ D" j& [! z. I
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[1]);& F0 m' h* }. K. }- K5 P% ~
- angular_rate_mdps[2] =# ]/ F1 J) Q- ]" f
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[2]);! N7 j3 S, g2 I9 S6 F9 `
-
% @" f l7 [8 v% o Q$ L9 i5 N% V2 U - }/ g K7 D- N9 v* I
- 2 W- k. ^+ e6 Q3 J! \* n# {
- ism330dhcx_temp_flag_data_ready_get(&dev_ctx, &dreg);
: p' b+ C- r$ \5 w! w
/ @" w- c& D# E; ~3 f- if (dreg) {8 u8 L U- S9 O
- /* Read temperature data */
5 B! T7 ?3 \ x$ ^ - memset(&data_raw_temperature, 0x00, sizeof(int16_t));
k) H. H9 t) O4 D; z - ism330dhcx_temperature_raw_get(&dev_ctx, &data_raw_temperature);- Y( Q8 J4 V' Q+ h. ?! n0 n
- temperature_degC = ism330dhcx_from_lsb_to_celsius(
" o- I: q( K! _ - data_raw_temperature);
% v) a1 g( r+ k3 g4 B3 q - : G! s0 A3 Q1 A5 @( j" p8 N
- }
复制代码 ! D% l4 O" Q) S
; J7 _" {( i) E3 u! K; d& P1 [
! \; {- c) V' J$ W7 Q" G6 c3 i( J, T
测试失败,显示hardware_fault,硬件错误。想了想,是晚上有点恍惚,把时钟配置错了,板载的外部时钟是16M,而cubemx中的默认时钟是8M,修改过来,重新生成项目,debug,测试结果如下;+ I: _' p5 J4 f" P' E+ ~
! F4 b2 F% u( y9 f# c5 E0 i
8 E0 z" u O& o! Q5 C E
图37 v( W" ]/ i, f) I- v0 n7 {
% o$ Y: C$ w2 ?0 ^5 u. W3 J Q% _, ~& x. H5 c6 l* [, U8 d
这段时间总是感觉知识浮于基础,得往深处继续挖掘学习。下次试一试Nano edge AI。
$ K2 l& x: d$ z( R5 v5 B/ R4 A
, W; X- v3 A/ @% a/ V |
属实可以,等楼主) W2 ~6 L# c( b: {
论坛有分享Nano edge AI 使用教程的可参考,https://shequ.stmicroelectronics.cn/thread-636670-1-1.html$ N% n7 c/ a0 G W- c
这个帖子之前看过,写的不错
加油
哈哈,稍等片刻。
必须更新!