From 6fe823352bef37a3dedd6b080de2cbab13d4d33a Mon Sep 17 00:00:00 2001 From: Rocco Marco Guglielmi Date: Sun, 11 Mar 2018 14:47:29 +0000 Subject: Updated LIS302DL driver git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11702 110e8d01-0319-4d1e-a829-52ad28d1bb01 --- testex/STM32/STM32F4xx/SPI-LIS302DL/Makefile | 26 +++-- testex/STM32/STM32F4xx/SPI-LIS302DL/main.c | 135 ++++++------------------- testex/STM32/STM32F4xx/SPI-LIS302DL/readme.txt | 10 +- 3 files changed, 52 insertions(+), 119 deletions(-) (limited to 'testex/STM32/STM32F4xx') diff --git a/testex/STM32/STM32F4xx/SPI-LIS302DL/Makefile b/testex/STM32/STM32F4xx/SPI-LIS302DL/Makefile index 6a70d7b0e..b7f62bcc9 100644 --- a/testex/STM32/STM32F4xx/SPI-LIS302DL/Makefile +++ b/testex/STM32/STM32F4xx/SPI-LIS302DL/Makefile @@ -71,7 +71,7 @@ endif # Enables the use of FPU (no, softfp, hard). ifeq ($(USE_FPU),) - USE_FPU = hard + USE_FPU = no endif # @@ -87,6 +87,9 @@ PROJECT = ch # Imported source files and paths CHIBIOS = ../../../.. + +# Licensing files. +include $(CHIBIOS)/os/license/license.mk # Startup files. include $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_stm32f4xx.mk # HAL-OSAL files (optional). @@ -97,10 +100,10 @@ include $(CHIBIOS)/os/hal/osal/rt/osal.mk # RTOS files (optional). include $(CHIBIOS)/os/rt/rt.mk include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v7m.mk -# Other files (optional). +# EX files (optional).. include $(CHIBIOS)/os/ex/ST/lis302dl.mk +# Other files (optional). include $(CHIBIOS)/os/hal/lib/streams/streams.mk -include $(CHIBIOS)/os/various/shell/shell.mk # Define linker script file here LDSCRIPT= $(STARTUPLD)/STM32F407xG.ld @@ -114,14 +117,20 @@ CSRC = $(STARTUPSRC) \ $(HALSRC) \ $(PLATFORMSRC) \ $(BOARDSRC) \ - $(LIS302DLSRC) \ + $(LIS3DSHSRC) \ $(STREAMSSRC) \ $(SHELLSRC) \ usbcfg.c main.c +# C sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CSRC = $(ALLCSRC) \ + $(TESTSRC) \ + usbcfg.c main.c + # C++ sources that can be compiled in ARM or THUMB mode depending on the global # setting. -CPPSRC = +CPPSRC = $(ALLCPPSRC) # C sources to be compiled in ARM mode regardless of the global setting. # NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler @@ -147,10 +156,7 @@ TCPPSRC = ASMSRC = ASMXSRC = $(STARTUPASM) $(PORTASM) $(OSALASM) -INCDIR = $(CHIBIOS)/os/license \ - $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) $(LIS302DLINC) \ - $(STREAMSINC) $(SHELLINC) +INCDIR = $(ALLINC) $(TESTINC) # # Project, sources and paths @@ -200,7 +206,7 @@ CPPWARN = -Wall -Wextra -Wundef # # List all user C define here, like -D_DEBUG=1 -UDEFS = -DCHPRINTF_USE_FLOAT=1 -DSHELL_CMD_TEST_ENABLED=0 \ +UDEFS = -DCHPRINTF_USE_FLOAT=1 \ -DLIS302DL_USE_ADVANCED=0 -DLIS302DL_SHARED_SPI=0 # Define ASM defines here diff --git a/testex/STM32/STM32F4xx/SPI-LIS302DL/main.c b/testex/STM32/STM32F4xx/SPI-LIS302DL/main.c index aea1105f7..8b8cb1636 100644 --- a/testex/STM32/STM32F4xx/SPI-LIS302DL/main.c +++ b/testex/STM32/STM32F4xx/SPI-LIS302DL/main.c @@ -18,23 +18,23 @@ #include "hal.h" #include "usbcfg.h" -#include "string.h" -#include "shell.h" #include "chprintf.h" - #include "lis302dl.h" +#define cls(chp) chprintf(chp, "\033[2J\033[1;1H") + /*===========================================================================*/ -/* LIS302DL related. */ +/* LIS302DL related. */ /*===========================================================================*/ /* LIS302DL Driver: This object represent an LIS302DL instance */ static LIS302DLDriver LIS302DLD1; -static int32_t rawdata[LIS302DL_NUMBER_OF_AXES]; -static float cookeddata[LIS302DL_NUMBER_OF_AXES]; +static int32_t accraw[LIS302DL_ACC_NUMBER_OF_AXES]; -static char axisID[LIS302DL_NUMBER_OF_AXES] = {'X', 'Y', 'Z'}; +static float acccooked[LIS302DL_ACC_NUMBER_OF_AXES]; + +static char axisID[LIS302DL_ACC_NUMBER_OF_AXES] = {'X', 'Y', 'Z'}; static uint32_t i; static const SPIConfig spicfg = { @@ -46,100 +46,23 @@ static const SPIConfig spicfg = { 0 }; -static LIS302DLConfig l3gd20cfg = { +static LIS302DLConfig lis302dlcfg = { &SPID1, &spicfg, NULL, NULL, - LIS302DL_FS_2G, - LIS302DL_ODR_100HZ, -#if LIS302DL_USE_ADVANCED || defined(__DOXYGEN__) - LIS302DL_HP_DISABLED, -#endif -}; - -/*===========================================================================*/ -/* Command line related. */ -/*===========================================================================*/ - -/* Enable use of special ANSI escape sequences.*/ -#define CHPRINTF_USE_ANSI_CODE TRUE -#define SHELL_WA_SIZE THD_WORKING_AREA_SIZE(2048) - -static void cmd_read(BaseSequentialStream *chp, int argc, char *argv[]) { - (void)argv; - if (argc != 1) { - chprintf(chp, "Usage: read [raw|cooked]\r\n"); - return; - } - - while (chnGetTimeout((BaseChannel *)chp, 150) == Q_TIMEOUT) { - if (!strcmp (argv[0], "raw")) { -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); -#endif - accelerometerReadRaw(&LIS302DLD1, rawdata); - chprintf(chp, "LIS302DL Accelerometer raw data...\r\n"); - for(i = 0; i < LIS302DL_NUMBER_OF_AXES; i++) { - chprintf(chp, "%c-axis: %d\r\n", axisID[i], rawdata[i]); - } - } - else if (!strcmp (argv[0], "cooked")) { -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); -#endif - accelerometerReadCooked(&LIS302DLD1, cookeddata); - chprintf(chp, "LIS302DL Accelerometer cooked data...\r\n"); - for(i = 0; i < LIS302DL_NUMBER_OF_AXES; i++) { - chprintf(chp, "%c-axis: %.4f mg\r\n", axisID[i], cookeddata[i]); - } - } - else { - chprintf(chp, "Usage: read [raw|cooked]\r\n"); - return; - } - } - chprintf(chp, "Stopped\r\n"); -} - -static void cmd_fullscale(BaseSequentialStream *chp, int argc, char *argv[]) { - (void)argv; - if (argc != 1) { - chprintf(chp, "Usage: fullscale [2G|8G]\r\n"); - return; - } -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); + LIS302DL_ACC_FS_2G, + LIS302DL_ACC_ODR_100HZ, +#if LIS302DL_USE_ADVANCED + LIS302DL_ACC_HP_1, #endif - if(!strcmp (argv[0], "2G")) { - accelerometerSetFullScale(&LIS302DLD1, LIS302DL_FS_2G); - chprintf(chp, "LIS302DL Accelerometer full scale set to 2G...\r\n"); - } - else if(!strcmp (argv[0], "8G")) { - accelerometerSetFullScale(&LIS302DLD1, LIS302DL_FS_8G); - chprintf(chp, "LIS302DL Accelerometer full scale set to 8G...\r\n"); - } - else { - chprintf(chp, "Usage: fullscale [2G|8G]\r\n"); - return; - } -} - -static const ShellCommand commands[] = { - {"read", cmd_read}, - {"fullscale", cmd_fullscale}, - {NULL, NULL} -}; - -static const ShellConfig shell_cfg1 = { - (BaseSequentialStream *)&SDU1, - commands }; /*===========================================================================*/ -/* Main code. */ +/* Generic code. */ /*===========================================================================*/ +static BaseSequentialStream* chp = (BaseSequentialStream*)&SDU1; /* * LED blinker thread, times are in milliseconds. */ @@ -152,9 +75,7 @@ static THD_FUNCTION(Thread1, arg) { systime_t time; time = serusbcfg.usbp->state == USB_ACTIVE ? 250 : 500; - palClearLine(LINE_LED6); - chThdSleepMilliseconds(time); - palSetLine(LINE_LED6); + palToggleLine(LINE_LED6); chThdSleepMilliseconds(time); } } @@ -195,21 +116,23 @@ int main(void) { lis302dlObjectInit(&LIS302DLD1); /* Activates the LIS302DL driver.*/ - lis302dlStart(&LIS302DLD1, &l3gd20cfg); + lis302dlStart(&LIS302DLD1, &lis302dlcfg); - /* Shell manager initialization.*/ - shellInit(); + /* Normal main() thread activity, printing MEMS data on the SDU1.*/ + while (true) { + lis302dlAccelerometerReadRaw(&LIS302DLD1, accraw); + chprintf(chp, "LIS302DL Accelerometer raw data...\r\n"); + for(i = 0; i < LIS302DL_ACC_NUMBER_OF_AXES; i++) { + chprintf(chp, "%c-axis: %d\r\n", axisID[i], accraw[i]); + } - while(TRUE) { - if (SDU1.config->usbp->state == USB_ACTIVE) { - thread_t *shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE, - "shell", NORMALPRIO + 1, - shellThread, (void *)&shell_cfg1); - chThdWait(shelltp); /* Waiting termination. */ + lis302dlAccelerometerReadCooked(&LIS302DLD1, acccooked); + chprintf(chp, "LIS302DL Accelerometer cooked data...\r\n"); + for(i = 0; i < LIS302DL_ACC_NUMBER_OF_AXES; i++) { + chprintf(chp, "%c-axis: %.3f\r\n", axisID[i], acccooked[i]); } - chThdSleepMilliseconds(1000); + chThdSleepMilliseconds(100); + cls(chp); } lis302dlStop(&LIS302DLD1); - return 0; } - diff --git a/testex/STM32/STM32F4xx/SPI-LIS302DL/readme.txt b/testex/STM32/STM32F4xx/SPI-LIS302DL/readme.txt index 11e515e07..3a02b8d69 100644 --- a/testex/STM32/STM32F4xx/SPI-LIS302DL/readme.txt +++ b/testex/STM32/STM32F4xx/SPI-LIS302DL/readme.txt @@ -4,12 +4,16 @@ ** TARGET ** -The demo runs on an STM32F407 Discovery board rev MB997B. +The demo runs on an STM32F407 Discovery board REV B or previous. ** The Demo ** -The demo flashes the board LED using a thread, read data from LIS302DL printing -it on a BaseSequentialStream (SDU1, mapped on USB virtual COM port). +The application demonstrates the use of the STM32F4xx SPI driver in order +to acquire data from LIS302L using ChibiOS/EX. + +** Board Setup ** + +None required. ** Build Procedure ** -- cgit v1.2.3