stmhal: Working STM32F4DISC accelerometer, via Python script.
Thanks to David Siorpaes.
This commit is contained in:
parent
4ef26c14b1
commit
101d87da6a
22
stmhal/boards/STM32F4DISC/staccel.py
Normal file → Executable file
22
stmhal/boards/STM32F4DISC/staccel.py
Normal file → Executable file
@ -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]
|
||||
|
Loading…
Reference in New Issue
Block a user