过节吃完饭,回来继续测试板载传感器。本次测试ISM330DHCX,3轴加速度+3轴陀螺仪传感器,读Datasheet发现,是带嵌入式机器学习内核的,这部分还没有测试,趁这会先把基本功能测试一下。读完datasheet,了解个大概,看原理图,如图1所示:% Q+ [' w) r& f4 e& q' |; `
: n+ b f, `. ]) G' L n: f/ F2 F7 y$ W# S; g- n+ u& H! g; W( @
图1
- c8 p5 a0 K" t8 z8 K依然使用的SPI接口,根据前面的IC测试,思路搬过来使用。依然使用CubeMx现把框架搭一下,引脚定义如图2所示:
" R1 C* V+ D; z$ t: S6 G. v
# B U# x8 g3 t( V) T( P* j. @
; s3 w& n8 B' H, a/ @# x) u' U4 |
图2- p. V2 V% v' D+ O% y
下面就是添加所需要的初始化代码,IC初始化如下:
1 m3 I8 w: Z$ k% d- /* Start device configuration. */
3 ]& z* g- Z6 j7 W. ]5 _! M$ |7 r - ism330dhcx_device_conf_set(&dev_ctx, PROPERTY_ENABLE);5 H8 g+ w' ~9 P: Y7 f
- /* Enable Block Data Update */+ i5 ^9 A& V! o0 l+ y2 o
- ism330dhcx_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
7 G) i/ h8 g# D - /* Set Output Data Rate */+ T' z/ l2 m2 I3 d: c/ ?6 r) o0 C
- ism330dhcx_xl_data_rate_set(&dev_ctx, ISM330DHCX_XL_ODR_12Hz5);
5 s% d! a: ^$ ?8 f: g2 h9 y - ism330dhcx_gy_data_rate_set(&dev_ctx, ISM330DHCX_GY_ODR_12Hz5);" r# l* ?* h& c V% q- v
- /* Set full scale */
( y( G5 T# r8 c - ism330dhcx_xl_full_scale_set(&dev_ctx, ISM330DHCX_2g);
5 ^5 B! V' X5 |7 l; ?) _ - ism330dhcx_gy_full_scale_set(&dev_ctx, ISM330DHCX_2000dps);
; o: ?" i- S9 K$ E; p - /* Configure filtering chain(No aux interface): h/ R# b0 m" s( j+ Y4 ?
- *
) y& j$ s( M! X; a& \ - * Accelerometer - LPF1 + LPF2 path
# e' w+ k8 ~3 s. w - */6 u( U& G6 x' [; [4 {! O# g
- ism330dhcx_xl_hp_path_on_out_set(&dev_ctx, ISM330DHCX_LP_ODR_DIV_100);
. g4 a U' h+ E' ] - ism330dhcx_xl_filter_lp2_set(&dev_ctx, PROPERTY_ENABLE);
复制代码
: \, ]! W& p+ |/ k3 y9 a在while中添加读取数据的code,如下所示:
4 o7 S! x3 v6 s( u& D5 q( Q; ~- ism330dhcx_xl_flag_data_ready_get(&dev_ctx, &dreg);
1 P" l; L' g) D - if(dreg)
* r+ Y) ]# ~8 `: z2 {! W - {( b5 w/ Z5 k& j9 f4 p# E8 J; e
- /* Read acceleration field data */
% F- u8 h% z0 I8 {6 [7 E0 q - memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));+ V$ i e" L8 w2 b3 e! W6 Y
- ism330dhcx_acceleration_raw_get(&dev_ctx, data_raw_acceleration);) A8 f1 }; f& W" ~# p+ A" a! ^- Z( U
- acceleration_mg[0] =# _+ R W6 a$ S j
- ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[0]);
9 s& [4 C& C) k5 \0 G - acceleration_mg[1] =
1 Q; d. k% a% I8 c3 F - ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[1]);
. {) W8 N/ Z& @' S. z - acceleration_mg[2] = j u. a1 r$ d7 _
- ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[2]);+ N) K$ M+ a4 B" h
- }
" O9 {, X l! @# ?' r$ q - ism330dhcx_gy_flag_data_ready_get(&dev_ctx, &dreg);! ~7 B* m, j, ^
# a& ~7 f/ ~" B- `& i0 D# \- if (dreg) {) }% {; [0 n: r/ d( N
- /* Read angular rate field data */0 Z" o# q# M, f5 U' h+ T
- memset(data_raw_angular_rate, 0x00, 3 * sizeof(int16_t));
; G/ @2 O, V9 k1 ~* G - ism330dhcx_angular_rate_raw_get(&dev_ctx, data_raw_angular_rate);( s5 @/ r5 x# f# _6 B A
- angular_rate_mdps[0] =2 s( W# {2 Q2 P R% R5 N$ x8 j
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[0]);
1 C* q$ }8 _$ m/ X, v - angular_rate_mdps[1] =
, o4 m+ I6 F' x$ g# A& j - ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[1]);
$ q( \6 G- q' j8 n9 s! `, L - angular_rate_mdps[2] =& S, o% p# Q! t" }6 ], L
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[2]);2 S( l4 F& _7 [' i
- 7 B+ z3 s( p j4 Y
- }9 M- B, h& f0 J7 K1 m
& z) z) J4 Y* V; Z$ h- ism330dhcx_temp_flag_data_ready_get(&dev_ctx, &dreg);
" E7 H/ K5 F. E8 @! P - . ]' l( i/ c2 S( Q2 G3 |' R; V4 T+ L
- if (dreg) {
3 V7 z! l$ |/ q! W/ ?8 z - /* Read temperature data */
4 e1 f# _9 v+ }; f { - memset(&data_raw_temperature, 0x00, sizeof(int16_t));
+ @1 C( y3 j" l$ N1 x: b8 N8 Z - ism330dhcx_temperature_raw_get(&dev_ctx, &data_raw_temperature);: H. Z1 M5 k1 n0 ^& l* h5 B
- temperature_degC = ism330dhcx_from_lsb_to_celsius(
`) @1 k% A; I: d5 H0 ^8 I E - data_raw_temperature);) u3 I" _3 |* E, m
+ O# D" i7 i: P2 d3 H2 Z- }
复制代码
* ]) i+ G$ r% ]9 Y/ f0 [
, o5 M% t0 o. A8 N
3 V3 P+ O+ {" t. v, v9 R4 j/ {5 [测试失败,显示hardware_fault,硬件错误。想了想,是晚上有点恍惚,把时钟配置错了,板载的外部时钟是16M,而cubemx中的默认时钟是8M,修改过来,重新生成项目,debug,测试结果如下;
7 g( u& f% ]- V; N6 Q% R# ]
) Q5 v7 d0 _% U* N6 I4 g# U
% E: o: `1 [" K+ q. R/ J$ f图32 C* \3 l# x" \1 i( D$ h
$ b' g! e5 A9 C- X/ c3 L
5 d3 U0 [- u# I. J, u m8 Y这段时间总是感觉知识浮于基础,得往深处继续挖掘学习。下次试一试Nano edge AI。
l' m1 C- ^+ `& m# ~2 x. c
U( ]; D# l; N7 L |
属实可以,等楼主
论坛有分享Nano edge AI 使用教程的可参考,https://shequ.stmicroelectronics.cn/thread-636670-1-1.html
这个帖子之前看过,写的不错
加油
哈哈,稍等片刻。
必须更新!