From 101d87da6ac24439cc0238775aba062edb7d649c Mon Sep 17 00:00:00 2001 From: Damien George Date: Sun, 10 Aug 2014 22:26:20 +0100 Subject: [PATCH] stmhal: Working STM32F4DISC accelerometer, via Python script. Thanks to David Siorpaes. --- stmhal/boards/STM32F4DISC/staccel.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) mode change 100644 => 100755 stmhal/boards/STM32F4DISC/staccel.py diff --git a/stmhal/boards/STM32F4DISC/staccel.py b/stmhal/boards/STM32F4DISC/staccel.py old mode 100644 new mode 100755 index af842ebcf6..8395df803d --- a/stmhal/boards/STM32F4DISC/staccel.py +++ b/stmhal/boards/STM32F4DISC/staccel.py @@ -2,8 +2,8 @@ Driver for accelerometer on STM32F4 Discover board. Assumes it's a LIS302DL MEMS device. - -Not currently working. +Sets accelerometer range at +-2g. +Returns list containing X,Y,Z axis acceleration values in 'g' units (9.8m/s^2). See: STM32Cube_FW_F4_V1.1.0/Drivers/BSP/Components/lis302dl/lis302dl.h @@ -22,12 +22,22 @@ READWRITE_CMD = const(0x80) MULTIPLEBYTE_CMD = const(0x40) LIS302DL_WHO_AM_I_ADDR = const(0x0f) LIS302DL_CTRL_REG1_ADDR = const(0x20) +LIS302DL_OUT_X = const(0x29) +# Configuration for 100Hz sampling rate, +-2g range +LIS302DL_CONF = 0b01000111 + +def signed8(x): + if x & 0x80: + return x - 256 + else: + return x class STAccel: def __init__(self): self.cs_pin = Pin('PE3', Pin.OUT_PP, Pin.PULL_NONE) self.cs_pin.high() self.spi = SPI(1, SPI.MASTER, baudrate=328125, polarity=0, phase=1, bits=8) + self.wr(LIS302DL_CTRL_REG1_ADDR, bytearray([LIS302DL_CONF])) def rd(self, addr, nbytes): if nbytes > 1: @@ -52,5 +62,9 @@ class STAccel: def read_id(self): return self.rd(LIS302DL_WHO_AM_I_ADDR, 1) - def init(self, init_param): - self.wr(LIS302DL_CTRL_REG1_ADDR, bytearray([init_param])) + def get_xyz(self): + val = self.rd(LIS302DL_OUT_X, 5) + x = signed8(val[0]) * 18.0 / 1000 + y = signed8(val[2]) * 18.0 / 1000 + z = signed8(val[4]) * 18.0 / 1000 + return [x, y, z]