过节吃完饭,回来继续测试板载传感器。本次测试ISM330DHCX,3轴加速度+3轴陀螺仪传感器,读Datasheet发现,是带嵌入式机器学习内核的,这部分还没有测试,趁这会先把基本功能测试一下。读完datasheet,了解个大概,看原理图,如图1所示:
6 z- |/ K6 U0 f5 c# O) e6 Y
, |5 V* ?$ d4 C% k
- F0 u& C8 y; {7 k* s0 L
图1
: ~3 g- j5 J6 z* k依然使用的SPI接口,根据前面的IC测试,思路搬过来使用。依然使用CubeMx现把框架搭一下,引脚定义如图2所示:
5 a1 }+ ]5 i% @9 _$ Q% u
, ~2 \& ?; }3 N. I8 ]
" `5 }2 O; h/ m, \7 \8 Z" Z图2
/ X; j, c& Z! u! Q* q下面就是添加所需要的初始化代码,IC初始化如下:
) y9 o g: | {1 Z0 p) ^- /* Start device configuration. */" {1 J! t& }7 p
- ism330dhcx_device_conf_set(&dev_ctx, PROPERTY_ENABLE);7 t. F, B2 B. u( ^) T& @9 M$ p
- /* Enable Block Data Update */
1 x/ X1 d2 A7 z - ism330dhcx_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);% w8 m! A9 Z3 f! j x! w) G4 f
- /* Set Output Data Rate */, V4 K5 o. G f
- ism330dhcx_xl_data_rate_set(&dev_ctx, ISM330DHCX_XL_ODR_12Hz5);
* O3 ~2 W9 H K/ i% d% V - ism330dhcx_gy_data_rate_set(&dev_ctx, ISM330DHCX_GY_ODR_12Hz5);% [. j/ Z9 \0 ?4 @% F' ~# ^& m. g
- /* Set full scale */
- V D# M; D" w/ m9 E# z1 [$ O. n - ism330dhcx_xl_full_scale_set(&dev_ctx, ISM330DHCX_2g);/ q+ g5 D& O, F: [8 z6 J
- ism330dhcx_gy_full_scale_set(&dev_ctx, ISM330DHCX_2000dps);
5 P5 y. L, o% o; O0 z4 S$ o2 { - /* Configure filtering chain(No aux interface)
h/ v M; s& n, E8 U# J, { - *
2 N! ~' q6 Q2 l - * Accelerometer - LPF1 + LPF2 path
( P+ j2 X9 ?' `# d0 G9 c) G" d1 ] - */
* W& |" g* s9 W( K8 Z- L1 p - ism330dhcx_xl_hp_path_on_out_set(&dev_ctx, ISM330DHCX_LP_ODR_DIV_100);
& a0 Q1 z+ ~3 l - ism330dhcx_xl_filter_lp2_set(&dev_ctx, PROPERTY_ENABLE);
复制代码
5 c0 @) a9 |& d; P* d- t在while中添加读取数据的code,如下所示:% R9 t0 ?1 I* q* h$ H- Q1 w9 m
- ism330dhcx_xl_flag_data_ready_get(&dev_ctx, &dreg);9 Q9 }4 f- c3 V( j
- if(dreg)
! B: z) F- p8 x3 Z' {+ ]* e% y - {
3 Y+ ]& ~" o4 ^- y - /* Read acceleration field data */2 q% `" f# \6 e
- memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
: D, ^. d/ U* c; P& E% M9 Y - ism330dhcx_acceleration_raw_get(&dev_ctx, data_raw_acceleration);: t S1 G1 m6 w0 |4 |, u% D H* w
- acceleration_mg[0] =
- X& y8 m8 I7 [1 y5 y m! e - ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[0]);, H: z7 Q0 r `! l K8 Z
- acceleration_mg[1] =
6 \2 T) m9 K0 \% ^8 w0 A - ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[1]);/ T3 m: G5 G+ P! J: G( A+ k" b
- acceleration_mg[2] =, u7 d+ r m" u6 ^* A. r$ o+ \3 G
- ism330dhcx_from_fs2g_to_mg(data_raw_acceleration[2]);1 T% i: `, x* w/ m2 w- d
- }
2 H! g" Y- }5 E0 ?( C; s7 V0 L2 M - ism330dhcx_gy_flag_data_ready_get(&dev_ctx, &dreg);
) t6 o7 q( k- T - 1 t3 [8 x2 S! c1 Q* Z+ j7 C
- if (dreg) {
8 |+ U1 D$ D* p4 G+ q( k - /* Read angular rate field data */
* P+ o: r' r4 T1 f4 z - memset(data_raw_angular_rate, 0x00, 3 * sizeof(int16_t));8 p6 ~7 w8 u6 F0 ~% y6 t6 _
- ism330dhcx_angular_rate_raw_get(&dev_ctx, data_raw_angular_rate);# A m4 u3 S0 ~
- angular_rate_mdps[0] =+ U, u5 `1 t- I) Z
- ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[0]);0 j/ X6 b; h1 Z- X
- angular_rate_mdps[1] =
# ^* t; E/ y% v5 {$ f$ u9 O+ h - ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[1]);7 _8 g* u. b; v
- angular_rate_mdps[2] =
, ^0 I' a8 T! E$ Z: N: ^ - ism330dhcx_from_fs2000dps_to_mdps(data_raw_angular_rate[2]);' U/ U. |# i. \. b l( Z( Y% `
- % G; J8 d/ O" i* ^+ m+ F6 Z
- }2 T+ `8 _9 U6 |3 D4 W' S4 q! X1 U
) H9 P) H" I$ ^( _- ism330dhcx_temp_flag_data_ready_get(&dev_ctx, &dreg);
* M* u9 L8 d0 m& A# W
1 z, a0 a7 ^0 @# e" u1 G: |- if (dreg) {5 Q6 v$ \4 D9 N6 V0 f
- /* Read temperature data */
5 m% q: v: Y, @! d R4 S0 Q - memset(&data_raw_temperature, 0x00, sizeof(int16_t));
; }) _1 h9 W4 U4 \/ ^: y - ism330dhcx_temperature_raw_get(&dev_ctx, &data_raw_temperature);
: b/ Q9 k! Q! }/ i - temperature_degC = ism330dhcx_from_lsb_to_celsius(1 x5 i( v1 p6 H- Y
- data_raw_temperature);6 N { d" s# [) t0 ~
- 4 X3 w" d p! K
- }
复制代码 ( O& }4 ~! f7 H2 o: Z4 {
" G+ c' H! p% H: |# e
6 {& q& ~- @1 [0 ^7 E' e测试失败,显示hardware_fault,硬件错误。想了想,是晚上有点恍惚,把时钟配置错了,板载的外部时钟是16M,而cubemx中的默认时钟是8M,修改过来,重新生成项目,debug,测试结果如下;4 i8 J, m' [1 f \% @/ h/ Q' W
3 I1 _0 Y1 K9 F+ S
: T- ]0 P( e7 e3 P图3
. C6 L$ L t+ D$ o0 |2 t! e2 @5 _/ I; M+ z: j
6 N* N. B0 }# X# S, ~这段时间总是感觉知识浮于基础,得往深处继续挖掘学习。下次试一试Nano edge AI。4 ?7 w) l! c- s, O! G) U
0 Y" p& i8 Z4 Z1 W% g. q# l
|
属实可以,等楼主4 j' o- F6 j, M# l8 f# D
论坛有分享Nano edge AI 使用教程的可参考,https://shequ.stmicroelectronics.cn/thread-636670-1-1.html% z R4 ~! H v O: `
这个帖子之前看过,写的不错
加油
哈哈,稍等片刻。
必须更新!