From 0c61d9bddf55dd5a70e74b53ef87fa7004b41509 Mon Sep 17 00:00:00 2001 From: Rocco Marco Guglielmi Date: Thu, 8 Mar 2018 15:59:15 +0000 Subject: Updated STM32/STM32F4xx/SPI-L3GD20 git-svn-id: https://svn.code.sf.net/p/chibios/svn2/trunk@11645 110e8d01-0319-4d1e-a829-52ad28d1bb01 --- testex/STM32/STM32F4xx/SPI-L3GD20/main.c | 166 ++++++------------------------- 1 file changed, 29 insertions(+), 137 deletions(-) (limited to 'testex/STM32/STM32F4xx/SPI-L3GD20/main.c') diff --git a/testex/STM32/STM32F4xx/SPI-L3GD20/main.c b/testex/STM32/STM32F4xx/SPI-L3GD20/main.c index 2e41585f6..b95b356dc 100644 --- a/testex/STM32/STM32F4xx/SPI-L3GD20/main.c +++ b/testex/STM32/STM32F4xx/SPI-L3GD20/main.c @@ -18,12 +18,11 @@ #include "hal.h" #include "usbcfg.h" -#include "string.h" -#include "shell.h" #include "chprintf.h" - #include "l3gd20.h" +#define cls(chp) chprintf(chp, "\033[2J\033[1;1H") + /*===========================================================================*/ /* L3GD20 related. */ /*===========================================================================*/ @@ -31,10 +30,10 @@ /* L3GD20 Driver: This object represent an L3GD20 instance.*/ static L3GD20Driver L3GD20D1; -static int32_t rawdata[L3GD20_NUMBER_OF_AXES]; -static float cookeddata[L3GD20_NUMBER_OF_AXES]; +static int32_t gyroraw[L3GD20_GYRO_NUMBER_OF_AXES]; +static float gyrocooked[L3GD20_GYRO_NUMBER_OF_AXES]; -static char axisID[L3GD20_NUMBER_OF_AXES] = {'X', 'Y', 'Z'}; +static char axisID[L3GD20_GYRO_NUMBER_OF_AXES] = {'X', 'Y', 'Z'}; static uint32_t i; static const SPIConfig spicfg = { @@ -63,129 +62,11 @@ static L3GD20Config l3gd20cfg = { #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 - gyroscopeReadRaw(&L3GD20D1, rawdata); - chprintf(chp, "L3GD20 Gyroscope raw data...\r\n"); - for(i = 0; i < L3GD20_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 - gyroscopeReadCooked(&L3GD20D1, cookeddata); - chprintf(chp, "L3GD20 Gyroscope cooked data...\r\n"); - for(i = 0; i < L3GD20_NUMBER_OF_AXES; i++) { - chprintf(chp, "%c-axis: %.4f DPS\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 [250|500|2000]\r\n"); - return; - } -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); -#endif - if(!strcmp (argv[0], "250")) { - gyroscopeSetFullScale(&L3GD20D1, L3GD20_FS_250DPS); - chprintf(chp, "L3GD20 Gyroscope full scale set to 250 dps...\r\n"); - } - else if(!strcmp (argv[0], "500")) { - gyroscopeSetFullScale(&L3GD20D1, L3GD20_FS_500DPS); - chprintf(chp, "L3GD20 Gyroscope full scale set to 500 dps...\r\n"); - } - else if(!strcmp (argv[0], "2000")) { - gyroscopeSetFullScale(&L3GD20D1, L3GD20_FS_2000DPS); - chprintf(chp, "L3GD20 Gyroscope full scale set to 2000 dps...\r\n"); - } - else { - chprintf(chp, "Usage: fullscale [250|500|2000]\r\n"); - return; - } -} - -static void cmd_bias(BaseSequentialStream *chp, int argc, char *argv[]) { - (void)argv; - if (argc != 1) { - chprintf(chp, "Usage: bias [sample|reset]\r\n"); - return; - } - if(!strcmp (argv[0], "sample")) { -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); -#endif - chprintf(chp, "Please don't move the device while Green LED is on!\r\n"); - chprintf(chp, "Press a key to start...\r\n"); - while (chnGetTimeout((BaseChannel *)chp, 500) == Q_TIMEOUT) - ; - palSetLine(LINE_LED4); - - chThdSleepMilliseconds(1000); - gyroscopeSampleBias(&L3GD20D1); - palClearLine(LINE_LED4); - - - chprintf(chp, "Procedure completed!\r\n"); - } - else if(!strcmp (argv[0], "reset")) { -#if CHPRINTF_USE_ANSI_CODE - chprintf(chp, "\033[2J\033[1;1H"); -#endif - gyroscopeResetBias(&L3GD20D1); - chprintf(chp, "Bias correction removed!\r\n"); - } - else { - chprintf(chp, "Usage: bias [sample|reset]\r\n"); - return; - } -} - -static const ShellCommand commands[] = { - {"read", cmd_read}, - {"fullscale", cmd_fullscale}, - {"bias", cmd_bias}, - {NULL, NULL} -}; - -static const ShellConfig shell_cfg1 = { - (BaseSequentialStream *)&SDU1, - commands -}; - /*===========================================================================*/ /* Main code. */ /*===========================================================================*/ +static BaseSequentialStream* chp = (BaseSequentialStream*)&SDU1; /* * LED blinker thread, times are in milliseconds. */ @@ -237,24 +118,35 @@ int main(void) { /* Creates the blinker thread.*/ chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO + 1, Thread1, NULL); - /* L3GD20 Object Initialization.*/ + /* + * L3GD20 Object Initialization + */ l3gd20ObjectInit(&L3GD20D1); - /* Activates the L3GD20 driver.*/ + /* + * Activates the L3GD20 driver. + */ l3gd20Start(&L3GD20D1, &l3gd20cfg); - /* Shell manager initialization.*/ - shellInit(); + /* + * Normal main() thread activity, printing MEMS data on the serial over usb + * driver 1. + */ + while (true) { + l3gd20GyroscopeReadRaw(&L3GD20D1, gyroraw); + chprintf(chp, "L3GD20 Gyroscope raw data...\r\n"); + for(i = 0; i < L3GD20_GYRO_NUMBER_OF_AXES; i++) { + chprintf(chp, "%c-axis: %d\r\n", axisID[i], gyroraw[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. */ + l3gd20GyroscopeReadCooked(&L3GD20D1, gyrocooked); + chprintf(chp, "L3GD20 Gyroscope cooked data...\r\n"); + for(i = 0; i < L3GD20_GYRO_NUMBER_OF_AXES; i++) { + chprintf(chp, "%c-axis: %.3f\r\n", axisID[i], gyrocooked[i]); } - chThdSleepMilliseconds(1000); + + chThdSleepMilliseconds(100); + cls(chp); } l3gd20Stop(&L3GD20D1); - return 0; } -- cgit v1.2.3