Visual update and minor fixes

- minor bug fixes
- added LED board picture
This commit is contained in:
EmanuelFeru 2020-02-13 18:19:18 +01:00
parent 4a470e97b6
commit e849a9ded8
19 changed files with 493 additions and 464 deletions

11
.gitignore vendored
View File

@ -2,15 +2,14 @@
.pioenvs/ .pioenvs/
.vscode/ .vscode/
MDK-ARM/DebugConfig/ MDK-ARM/DebugConfig/
MDK-ARM/Listing/
MDK-ARM/Objects/
MDK-ARM/RTE/ MDK-ARM/RTE/
MDK-ARM/sideboard_CobeMX_prj/ MDK-ARM/*.uvguix.*
MDK-ARM/*.uvguix build/
MDK-ARM/.lst
!build/VARIANT_DEBUG/firmware.hex !build/VARIANT_DEBUG/firmware.hex
!build/VARIANT_DEBUG/firmware.bin !build/VARIANT_DEBUG/firmware.bin
!build/VARIANT_DEBUG/firmware.elf !build/VARIANT_DEBUG/firmware.elf
!build/VARIANT_DEBUG/firmware.axf
!build/VARIANT_HOVERBOARD/firmware.hex !build/VARIANT_HOVERBOARD/firmware.hex
!build/VARIANT_HOVERBOARD/firmware.bin !build/VARIANT_HOVERBOARD/firmware.bin
!build/VARIANT_HOVERBOARD/firmware.elf !build/VARIANT_HOVERBOARD/firmware.elf
!build/VARIANT_HOVERBOARD/firmware.axf

View File

@ -28,7 +28,6 @@
#endif #endif
/* ==================================== DO NOT TOUCH SETTINGS ==================================== */ /* ==================================== DO NOT TOUCH SETTINGS ==================================== */
#define PRINTF_FLOAT_SUPPORT // [-] Uncomment this for printf to support float on Serial Debug. It will increase code size!
#define BYPASS_CUBEMX_DEFINES // [-] Use this flag to bypass the Ports definitions generated by CUBE MX in main.h and use the ones in defines.h #define BYPASS_CUBEMX_DEFINES // [-] Use this flag to bypass the Ports definitions generated by CUBE MX in main.h and use the ones in defines.h
#define MPU6050 // [-] Define IMU sensor type #define MPU6050 // [-] Define IMU sensor type
#define MPU_GYRO_FSR 2000 // [deg/s] Set Gyroscope Full Scale Range: 250 deg/s, 500 deg/s, 1000 deg/s, 2000 deg/s. !! DMP sensor fusion works only with 2000 deg/s !! #define MPU_GYRO_FSR 2000 // [deg/s] Set Gyroscope Full Scale Range: 250 deg/s, 500 deg/s, 1000 deg/s, 2000 deg/s. !! DMP sensor fusion works only with 2000 deg/s !!
@ -37,6 +36,7 @@
#define MPU_I2C_SPEED 400000 // [bit/s] Define I2C speed for communicating with the MPU6050 #define MPU_I2C_SPEED 400000 // [bit/s] Define I2C speed for communicating with the MPU6050
#endif #endif
#define DELAY_IN_MAIN_LOOP 1 // [ms] Delay in the main loop #define DELAY_IN_MAIN_LOOP 1 // [ms] Delay in the main loop
// #define PRINTF_FLOAT_SUPPORT // [-] Uncomment this for printf to support float on Serial Debug. It will increase code size! Better to avoid it!
/* =============================================================================================== */ /* =============================================================================================== */

View File

@ -31,7 +31,7 @@
#define UART_DMA_CHANNEL_RX DMA1_Channel6 #define UART_DMA_CHANNEL_RX DMA1_Channel6
#if defined(PRINTF_FLOAT_SUPPORT) && defined(SERIAL_DEBUG) && defined(__GNUC__) #if defined(PRINTF_FLOAT_SUPPORT) && defined(SERIAL_DEBUG) && defined(__GNUC__)
asm(".global _printf_float"); // this is the magic trick for printf to support float asm(".global _printf_float"); // this is the magic trick for printf to support float. Warning: It will increase code considerably! Better to avoid!
#endif #endif
/* =========================== Defines General =========================== */ /* =========================== Defines General =========================== */
@ -47,53 +47,59 @@
#ifdef BYPASS_CUBEMX_DEFINES #ifdef BYPASS_CUBEMX_DEFINES
/* =========================== Defines LEDs =========================== */ /* =========================== Defines LEDs =========================== */
#define LED1_GPIO_Port GPIOA #define LED1_GPIO_Port GPIOA
#define LED1_Pin GPIO_PIN_0 // RED #define LED1_Pin GPIO_PIN_0 // RED
#define LED2_GPIO_Port GPIOB #define LED2_GPIO_Port GPIOB
#define LED2_Pin GPIO_PIN_9 // GREEN #define LED2_Pin GPIO_PIN_9 // GREEN
#define LED3_GPIO_Port GPIOB #define LED3_GPIO_Port GPIOB
#define LED3_Pin GPIO_PIN_8 // YELLOW #define LED3_Pin GPIO_PIN_8 // YELLOW
#define LED4_GPIO_Port GPIOB #define LED4_GPIO_Port GPIOB
#define LED4_Pin GPIO_PIN_5 // BLUE1 #define LED4_Pin GPIO_PIN_5 // BLUE1
#define LED5_GPIO_Port GPIOB #define LED5_GPIO_Port GPIOB
#define LED5_Pin GPIO_PIN_4 // BLUE2 #define LED5_Pin GPIO_PIN_4 // BLUE2
#define LED1_SET (0x01)
#define LED2_SET (0x02)
#define LED3_SET (0x04)
#define LED4_SET (0x08)
#define LED5_SET (0x10)
/* =========================== Defines SENSORS =========================== */ /* =========================== Defines SENSORS =========================== */
#define SENSOR1_GPIO_Port GPIOA #define SENSOR1_GPIO_Port GPIOA
#define SENSOR1_Pin GPIO_PIN_4 #define SENSOR1_Pin GPIO_PIN_4
#define SENSOR2_GPIO_Port GPIOC #define SENSOR2_GPIO_Port GPIOC
#define SENSOR2_Pin GPIO_PIN_14 #define SENSOR2_Pin GPIO_PIN_14
/* =========================== Defines AUX =========================== */ /* =========================== Defines AUX =========================== */
#define AUX1_PU_GPIO_Port GPIOC #define AUX1_PU_GPIO_Port GPIOC
#define AUX1_PU_Pin GPIO_PIN_15 #define AUX1_PU_Pin GPIO_PIN_15
#define AUX2_GPIO_Port GPIOA #define AUX2_GPIO_Port GPIOA
#define AUX2_Pin GPIO_PIN_1 #define AUX2_Pin GPIO_PIN_1
#define AUX3_PU_GPIO_Port GPIOB #define AUX3_PU_GPIO_Port GPIOB
#define AUX3_PU_Pin GPIO_PIN_11 #define AUX3_PU_Pin GPIO_PIN_11
/* =========================== Defines I2C =========================== */ /* =========================== Defines I2C =========================== */
#define MPU_SCL_GPIO_Port GPIOB #define MPU_SCL_GPIO_Port GPIOB
#define MPU_SCL_Pin GPIO_PIN_6 #define MPU_SCL_Pin GPIO_PIN_6
#define MPU_SDA_GPIO_Port GPIOB #define MPU_SDA_GPIO_Port GPIOB
#define MPU_SDA_Pin GPIO_PIN_7 #define MPU_SDA_Pin GPIO_PIN_7
// #define I2C_OWN_ADDRESS7 0x24 // #define I2C_OWN_ADDRESS7 0x24
#endif #endif
/* =========================== Defines MPU-6050 =========================== */ /* =========================== Defines MPU-6050 =========================== */
#define log_i printf // redirect the log_i debug function to printf #define log_i printf // redirect the log_i debug function to printf
#define RAD2DEG 57.295779513082323 // RAD2DEG = 180/pi. Example: angle[deg] = angle[rad] * RAD2DEG #define RAD2DEG 57.295779513082323 // RAD2DEG = 180/pi. Example: angle[deg] = angle[rad] * RAD2DEG
#define ACCEL_ON (0x01) #define ACCEL_ON (0x01)
#define GYRO_ON (0x02) #define GYRO_ON (0x02)
#define COMPASS_ON (0x04) #define COMPASS_ON (0x04)
#define PRINT_ACCEL (0x01) #define PRINT_ACCEL (0x01)
#define PRINT_GYRO (0x02) #define PRINT_GYRO (0x02)
#define PRINT_QUAT (0x04) #define PRINT_QUAT (0x04)
#define PRINT_EULER (0x08) #define PRINT_EULER (0x08)
#define PRINT_TEMP (0x10) #define PRINT_TEMP (0x10)
#define PRINT_PEDO (0x20) #define PRINT_PEDO (0x20)
typedef struct{ typedef struct{
int16_t x; int16_t x;

View File

@ -27,11 +27,11 @@
/* general functions */ /* general functions */
void consoleLog(char *message); void consoleLog(char *message);
void get_tick_count_ms(unsigned long *count); void get_tick_count_ms(unsigned long *count);
void introDemoLED(uint32_t tDelay); void intro_demo_led(uint32_t tDelay);
/* i2c write/read functions */ /* i2c write/read functions */
int8_t i2c_writeBytes(uint8_t slaveAddr, uint8_t regAddr, uint8_t length, uint8_t *data); int8_t i2c_writeBytes(uint8_t slaveAddr, uint8_t regAddr, uint8_t length, uint8_t *data);
int8_t i2c_writeByte (uint8_t slaveAddr, uint8_t regAddr, uint8_t data); int8_t i2c_writeByte (uint8_t slaveAddr, uint8_t regAddr, uint8_t data);
int8_t i2c_writeBit (uint8_t slaveAddr, uint8_t regAddr, uint8_t bitNum, uint8_t data); int8_t i2c_writeBit (uint8_t slaveAddr, uint8_t regAddr, uint8_t bitNum, uint8_t data);
int8_t i2c_readBytes (uint8_t slaveAddr, uint8_t regAddr, uint8_t length, uint8_t *data); int8_t i2c_readBytes (uint8_t slaveAddr, uint8_t regAddr, uint8_t length, uint8_t *data);
int8_t i2c_readByte (uint8_t slaveAddr, uint8_t regAddr, uint8_t *data); int8_t i2c_readByte (uint8_t slaveAddr, uint8_t regAddr, uint8_t *data);

View File

@ -26,7 +26,7 @@
<ToolsetNumber>0x4</ToolsetNumber> <ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName> <ToolsetName>ARM-ADS</ToolsetName>
<TargetOption> <TargetOption>
<CLKADS>64000000</CLKADS> <CLKADS>8000000</CLKADS>
<OPTTT> <OPTTT>
<gFlags>1</gFlags> <gFlags>1</gFlags>
<BeepAtEnd>0</BeepAtEnd> <BeepAtEnd>0</BeepAtEnd>
@ -45,7 +45,7 @@
<PageWidth>79</PageWidth> <PageWidth>79</PageWidth>
<PageLength>66</PageLength> <PageLength>66</PageLength>
<TabStop>8</TabStop> <TabStop>8</TabStop>
<ListingPath></ListingPath> <ListingPath>.\Listings\</ListingPath>
</OPTLEX> </OPTLEX>
<ListingPage> <ListingPage>
<CreateCListing>1</CreateCListing> <CreateCListing>1</CreateCListing>
@ -93,7 +93,7 @@
<tRbreak>1</tRbreak> <tRbreak>1</tRbreak>
<tRwatch>1</tRwatch> <tRwatch>1</tRwatch>
<tRmem>1</tRmem> <tRmem>1</tRmem>
<tRfunc>1</tRfunc> <tRfunc>0</tRfunc>
<tRbox>1</tRbox> <tRbox>1</tRbox>
<tRtrace>1</tRtrace> <tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw> <sRSysVw>1</sRSysVw>
@ -117,13 +117,18 @@
<TargetDriverDllRegistry> <TargetDriverDllRegistry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>UL2CM3</Key> <Key>ULP2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM))</Name> <Name>-U -O206 -S8 -C0 -P00 -N00("") -D00(00000000) -L00(0) -TO18 -TC10000000 -TP18 -TDX0 -TDD0 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key> <Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U-O142 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL010000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name> <Name>-U-O718 -O718 -S0 -C0 -A0 -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM))</Name>
</SetRegEntry> </SetRegEntry>
</TargetDriverDllRegistry> </TargetDriverDllRegistry>
<Breakpoint/> <Breakpoint/>
@ -207,8 +212,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Src/main.c</PathWithFileName> <PathWithFileName>..\Src\dma.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath> <FilenameWithoutPath>dma.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -219,7 +224,7 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Src/gpio.c</PathWithFileName> <PathWithFileName>..\Src\gpio.c</PathWithFileName>
<FilenameWithoutPath>gpio.c</FilenameWithoutPath> <FilenameWithoutPath>gpio.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
@ -231,8 +236,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Src/dma.c</PathWithFileName> <PathWithFileName>..\Src\i2c.c</PathWithFileName>
<FilenameWithoutPath>dma.c</FilenameWithoutPath> <FilenameWithoutPath>i2c.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -243,8 +248,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Src/i2c.c</PathWithFileName> <PathWithFileName>..\Src\main.c</PathWithFileName>
<FilenameWithoutPath>i2c.c</FilenameWithoutPath> <FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -255,42 +260,6 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Src/usart.c</PathWithFileName>
<FilenameWithoutPath>usart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Src/stm32f1xx_it.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_it.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Src/stm32f1xx_hal_msp.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_msp.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Src\mpu6050.c</PathWithFileName> <PathWithFileName>..\Src\mpu6050.c</PathWithFileName>
<FilenameWithoutPath>mpu6050.c</FilenameWithoutPath> <FilenameWithoutPath>mpu6050.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
@ -298,7 +267,7 @@
</File> </File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber> <FileNumber>7</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -308,6 +277,42 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Src\stm32f1xx_hal_msp.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_msp.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Src\stm32f1xx_it.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_it.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Src\usart.c</PathWithFileName>
<FilenameWithoutPath>usart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber> <FileNumber>11</FileNumber>
@ -347,8 +352,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_gpio_ex.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -359,8 +364,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_i2c.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_i2c.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal_cortex.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -371,8 +376,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_tim.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal_dma.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -383,8 +388,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_tim_ex.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal_flash.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -395,8 +400,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_uart.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal_flash_ex.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -407,8 +412,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal_gpio.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -419,8 +424,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_rcc.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal_gpio_ex.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -431,8 +436,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_i2c.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_rcc_ex.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal_i2c.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -443,8 +448,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_gpio.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal_pwr.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -455,8 +460,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_dma.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal_rcc.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -467,8 +472,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_cortex.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal_rcc_ex.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -479,8 +484,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_pwr.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal_tim.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -491,8 +496,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_flash.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal_tim_ex.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -503,8 +508,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c</PathWithFileName> <PathWithFileName>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c</PathWithFileName>
<FilenameWithoutPath>stm32f1xx_hal_flash_ex.c</FilenameWithoutPath> <FilenameWithoutPath>stm32f1xx_hal_uart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -523,7 +528,7 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>../Src/system_stm32f1xx.c</PathWithFileName> <PathWithFileName>..\Src\system_stm32f1xx.c</PathWithFileName>
<FilenameWithoutPath>system_stm32f1xx.c</FilenameWithoutPath> <FilenameWithoutPath>system_stm32f1xx.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>

View File

@ -17,12 +17,12 @@
<Vendor>STMicroelectronics</Vendor> <Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32F1xx_DFP.2.3.0</PackID> <PackID>Keil.STM32F1xx_DFP.2.3.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL> <PackURL>http://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x800FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3")</Cpu> <Cpu>IRAM(0x20000000,0x00005000) IROM(0x08000000,0x00010000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec> <FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile> <StartupFile></StartupFile>
<FlashDriverDll></FlashDriverDll> <FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM))</FlashDriverDll>
<DeviceId></DeviceId> <DeviceId>4235</DeviceId>
<RegisterFile></RegisterFile> <RegisterFile>$$Device:STM32F103C8$Device\Include\stm32f10x.h</RegisterFile>
<MemoryEnv></MemoryEnv> <MemoryEnv></MemoryEnv>
<Cmp></Cmp> <Cmp></Cmp>
<Asm></Asm> <Asm></Asm>
@ -47,14 +47,14 @@
<NotGenerated>0</NotGenerated> <NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash> <InvalidFlash>1</InvalidFlash>
</TargetStatus> </TargetStatus>
<OutputDirectory>.\sideboard_CubeMX_prj\</OutputDirectory> <OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>firmware</OutputName> <OutputName>firmware</OutputName>
<CreateExecutable>1</CreateExecutable> <CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib> <CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile> <CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation> <DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation> <BrowseInformation>1</BrowseInformation>
<ListingPath></ListingPath> <ListingPath>.\Listings\</ListingPath>
<HexFormatSelection>1</HexFormatSelection> <HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K> <Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile> <CreateBatchFile>0</CreateBatchFile>
@ -79,9 +79,9 @@
<nStopB2X>0</nStopB2X> <nStopB2X>0</nStopB2X>
</BeforeMake> </BeforeMake>
<AfterMake> <AfterMake>
<RunUserProg1>0</RunUserProg1> <RunUserProg1>1</RunUserProg1>
<RunUserProg2>0</RunUserProg2> <RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name> <UserProg1Name>$K\ARM\ARMCC\bin\fromelf.exe --bin --output=.\Objects\@L.bin !L</UserProg1Name>
<UserProg2Name></UserProg2Name> <UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode> <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode> <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
@ -105,7 +105,7 @@
<StopOnExitCode>3</StopOnExitCode> <StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument> <CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules> <IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>0</ComprImg> <ComprImg>1</ComprImg>
</CommonProperty> </CommonProperty>
<DllOption> <DllOption>
<SimDllName>SARMCM3.DLL</SimDllName> <SimDllName>SARMCM3.DLL</SimDllName>
@ -133,10 +133,10 @@
<RunIndependent>0</RunIndependent> <RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging> <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
<Capability>1</Capability> <Capability>1</Capability>
<DriverSelection>4100</DriverSelection> <DriverSelection>4096</DriverSelection>
</Flash1> </Flash1>
<bUseTDR>1</bUseTDR> <bUseTDR>1</bUseTDR>
<Flash2>STLink\ST-LINKIII-KEIL_SWO.dll</Flash2> <Flash2>BIN\UL2CM3.DLL</Flash2>
<Flash3>"" ()</Flash3> <Flash3>"" ()</Flash3>
<Flash4></Flash4> <Flash4></Flash4>
<pFcarmOut></pFcarmOut> <pFcarmOut></pFcarmOut>
@ -335,7 +335,7 @@
<MiscControls></MiscControls> <MiscControls></MiscControls>
<Define>USE_HAL_DRIVER,STM32F103xB</Define> <Define>USE_HAL_DRIVER,STM32F103xB</Define>
<Undefine></Undefine> <Undefine></Undefine>
<IncludePath>../Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include</IncludePath> <IncludePath>..\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include</IncludePath>
</VariousControls> </VariousControls>
</Cads> </Cads>
<Aads> <Aads>
@ -390,39 +390,24 @@
<GroupName>Src</GroupName> <GroupName>Src</GroupName>
<Files> <Files>
<File> <File>
<FileName>main.c</FileName> <FileName>dma.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>../Src/main.c</FilePath> <FilePath>..\Src\dma.c</FilePath>
</File> </File>
<File> <File>
<FileName>gpio.c</FileName> <FileName>gpio.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>../Src/gpio.c</FilePath> <FilePath>..\Src\gpio.c</FilePath>
</File>
<File>
<FileName>dma.c</FileName>
<FileType>1</FileType>
<FilePath>../Src/dma.c</FilePath>
</File> </File>
<File> <File>
<FileName>i2c.c</FileName> <FileName>i2c.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>../Src/i2c.c</FilePath> <FilePath>..\Src\i2c.c</FilePath>
</File> </File>
<File> <File>
<FileName>usart.c</FileName> <FileName>main.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>../Src/usart.c</FilePath> <FilePath>..\Src\main.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_it.c</FileName>
<FileType>1</FileType>
<FilePath>../Src/stm32f1xx_it.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_msp.c</FileName>
<FileType>1</FileType>
<FilePath>../Src/stm32f1xx_hal_msp.c</FilePath>
</File> </File>
<File> <File>
<FileName>mpu6050.c</FileName> <FileName>mpu6050.c</FileName>
@ -434,6 +419,21 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\Src\mpu6050_dmp.c</FilePath> <FilePath>..\Src\mpu6050_dmp.c</FilePath>
</File> </File>
<File>
<FileName>stm32f1xx_hal_msp.c</FileName>
<FileType>1</FileType>
<FilePath>..\Src\stm32f1xx_hal_msp.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_it.c</FileName>
<FileType>1</FileType>
<FilePath>..\Src\stm32f1xx_it.c</FilePath>
</File>
<File>
<FileName>usart.c</FileName>
<FileType>1</FileType>
<FilePath>..\Src\usart.c</FilePath>
</File>
<File> <File>
<FileName>util.c</FileName> <FileName>util.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
@ -449,75 +449,75 @@
<Group> <Group>
<GroupName>HAL_Driver</GroupName> <GroupName>HAL_Driver</GroupName>
<Files> <Files>
<File>
<FileName>stm32f1xx_hal_gpio_ex.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_i2c.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_i2c.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_tim.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_tim_ex.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_uart.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c</FilePath>
</File>
<File> <File>
<FileName>stm32f1xx_hal.c</FileName> <FileName>stm32f1xx_hal.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c</FilePath> <FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_rcc.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_rcc_ex.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_gpio.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_dma.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c</FilePath>
</File> </File>
<File> <File>
<FileName>stm32f1xx_hal_cortex.c</FileName> <FileName>stm32f1xx_hal_cortex.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c</FilePath> <FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c</FilePath>
</File> </File>
<File> <File>
<FileName>stm32f1xx_hal_pwr.c</FileName> <FileName>stm32f1xx_hal_dma.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c</FilePath> <FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c</FilePath>
</File> </File>
<File> <File>
<FileName>stm32f1xx_hal_flash.c</FileName> <FileName>stm32f1xx_hal_flash.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c</FilePath> <FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c</FilePath>
</File> </File>
<File> <File>
<FileName>stm32f1xx_hal_flash_ex.c</FileName> <FileName>stm32f1xx_hal_flash_ex.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c</FilePath> <FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_gpio.c</FileName>
<FileType>1</FileType>
<FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_gpio_ex.c</FileName>
<FileType>1</FileType>
<FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_i2c.c</FileName>
<FileType>1</FileType>
<FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_i2c.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_pwr.c</FileName>
<FileType>1</FileType>
<FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_rcc.c</FileName>
<FileType>1</FileType>
<FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_rcc_ex.c</FileName>
<FileType>1</FileType>
<FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_tim.c</FileName>
<FileType>1</FileType>
<FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_tim_ex.c</FileName>
<FileType>1</FileType>
<FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c</FilePath>
</File>
<File>
<FileName>stm32f1xx_hal_uart.c</FileName>
<FileType>1</FileType>
<FilePath>..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c</FilePath>
</File> </File>
</Files> </Files>
</Group> </Group>
@ -527,7 +527,7 @@
<File> <File>
<FileName>system_stm32f1xx.c</FileName> <FileName>system_stm32f1xx.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>../Src/system_stm32f1xx.c</FilePath> <FilePath>..\Src\system_stm32f1xx.c</FilePath>
</File> </File>
</Files> </Files>
</Group> </Group>
@ -541,8 +541,8 @@
<RTE> <RTE>
<apis/> <apis/>
<components> <components>
<component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="4.3.0" condition="CMSIS Core"> <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.3.0" condition="ARMv6_7_8-M Device">
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="4.5.0"/> <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.6.0"/>
<targetInfos> <targetInfos>
<targetInfo name="sideboard-hack"/> <targetInfo name="sideboard-hack"/>
</targetInfos> </targetInfos>

View File

@ -14,6 +14,9 @@ This repository implements the firmware for the hoveboard sideboards. The hovebo
The original sideboard hardware supports one 4-pin cable that originally was connected to the hoveboard mainboard. It breaks out GND, 12/15V and USART. Additionally, two ports are used to connect to the LED boards. On the back of the board, two Photo Interrupter Optical Switches can be found, originally used to detect if a human is standing on the hoverboard. The original sideboard hardware supports one 4-pin cable that originally was connected to the hoveboard mainboard. It breaks out GND, 12/15V and USART. Additionally, two ports are used to connect to the LED boards. On the back of the board, two Photo Interrupter Optical Switches can be found, originally used to detect if a human is standing on the hoverboard.
![sideboard](/docs/pictures/sideboard_pinout.png) ![sideboard](/docs/pictures/sideboard_pinout.png)
The LED boards consist of colored LEDs (blue, red, green, orange) used for design and to inform the user about the current hoverboard state.
![ledboard](/docs/pictures/ledboard_pinout.png)
The heart of the sideboard is a [STM32F103C8T6](/docs/stm32f103c8-Datasheet.pdf) with the pinout shown in the follwing figure: The heart of the sideboard is a [STM32F103C8T6](/docs/stm32f103c8-Datasheet.pdf) with the pinout shown in the follwing figure:
![MCU_pinout](/docs/pictures/MCU_pinout.png) ![MCU_pinout](/docs/pictures/MCU_pinout.png)
@ -40,14 +43,15 @@ If you have never flashed your sideboard before, the MCU is probably locked. To
To build and flash choose one of the following methods: To build and flash choose one of the following methods:
### Method 1: Using Platformio (recommended) ### Method 1: Using Platformio
- open the folder in the IDE of choice (vscode or Atom) - open the folder in the IDE of choice (vscode or Atom)
- press the 'PlatformIO:Build' or the 'PlatformIO:Upload' button (bottom left in vscode). - press the 'PlatformIO:Build' or the 'PlatformIO:Upload' button (bottom left in vscode).
### Method 2: Using Keil uVision ### Method 2: Using Keil uVision
- in [Keil uVision](https://www.keil.com/download/product/), open the [sideboard-hack.uvproj](/MDK-ARM/) - in [Keil uVision](https://www.keil.com/download/product/), open the [sideboard-hack.uvproj](/MDK-ARM/)
- if you are asked to install missing package, click `Yes`
- click Build Target (or press F7) to build the firmware - click Build Target (or press F7) to build the firmware
- click Load Code (or press F8) to flash the firmware. - click Load Code (or press F8) to flash the firmware.

View File

@ -59,10 +59,10 @@ void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{ {
__HAL_UART_FLUSH_DRREGISTER(&huart2); // Clear the buffer to prevent overrun __HAL_UART_FLUSH_DRREGISTER(&huart2); // Clear the buffer to prevent overrun
#ifdef SERIAL_DEBUG #ifdef SERIAL_DEBUG
if (rxBuffer != '\n' && rxBuffer != '\r') { // Do not accept 'new line' (ascii 10) and 'carriage return' (ascii 13) commands if (rxBuffer != '\n' && rxBuffer != '\r') { // Do not accept 'new line' (ascii 10) and 'carriage return' (ascii 13) commands
userCommand = rxBuffer; userCommand = rxBuffer;
} }
#endif #endif
@ -88,8 +88,8 @@ typedef struct{
uint16_t start; uint16_t start;
int16_t roll; int16_t roll;
int16_t pitch; int16_t pitch;
int16_t yaw; int16_t yaw;
uint16_t sensors; uint16_t sensors;
uint16_t checksum; uint16_t checksum;
} SerialSideboard; } SerialSideboard;
SerialSideboard Sideboard; SerialSideboard Sideboard;
@ -97,16 +97,17 @@ SerialSideboard Sideboard;
#ifdef SERIAL_FEEDBACK #ifdef SERIAL_FEEDBACK
typedef struct{ typedef struct{
uint16_t start; uint16_t start;
int16_t cmd1; int16_t cmd1;
int16_t cmd2; int16_t cmd2;
int16_t speedR; int16_t speedR;
int16_t speedL; int16_t speedL;
int16_t speedR_meas; int16_t speedR_meas;
int16_t speedL_meas; int16_t speedL_meas;
int16_t batVoltage; int16_t batVoltage;
int16_t boardTemp; int16_t boardTemp;
int16_t checksum; uint16_t cmdLed;
uint16_t checksum;
} SerialFeedback; } SerialFeedback;
SerialFeedback Feedback; SerialFeedback Feedback;
SerialFeedback NewFeedback; SerialFeedback NewFeedback;
@ -118,8 +119,8 @@ static uint8_t timeoutFlagSerial = 0; // Timeout Flag for Rx Serial comman
extern MPU_Data mpu; // holds the MPU-6050 data extern MPU_Data mpu; // holds the MPU-6050 data
ErrorStatus mpuStatus = SUCCESS; // holds the MPU-6050 status: SUCCESS or ERROR ErrorStatus mpuStatus = SUCCESS; // holds the MPU-6050 status: SUCCESS or ERROR
FlagStatus sensor1, sensor2; // holds the sensor1 and sensor 2 values
uint8_t sensor1, sensor2; // holds the sensor1 and sensor 2 values FlagStatus sensor1_read, sensor2_read; // holds the instantaneous Read for sensor1 and sensor 2
static uint32_t main_loop_counter; // main loop counter to perform task squeduling inside main() static uint32_t main_loop_counter; // main loop counter to perform task squeduling inside main()
/* USER CODE END 0 */ /* USER CODE END 0 */
@ -170,11 +171,15 @@ int main(void)
HAL_UART_Receive_DMA (&huart2, (uint8_t *)&NewFeedback, sizeof(NewFeedback)); HAL_UART_Receive_DMA (&huart2, (uint8_t *)&NewFeedback, sizeof(NewFeedback));
#endif #endif
introDemoLED(100); // Short LEDs intro demo with 100 ms delay. This also gives some time for the MPU-6050 to initialize. intro_demo_led(100); // Short LEDs intro demo with 100 ms delay. This also gives some time for the MPU-6050 to power-up.
if(mpu_config()) { // IMU MPU-6050 config if(mpu_config()) { // IMU MPU-6050 config
mpuStatus = ERROR; mpuStatus = ERROR;
} HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET); // Turn on RED LED
mpu_handle_input('h'); // Print the User Help commands to serial }
else {
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET); // Turn on GREEN LED
}
mpu_handle_input('h'); // Print the User Help commands to serial
/* USER CODE END 2 */ /* USER CODE END 2 */
@ -186,11 +191,15 @@ int main(void)
// ==================================== LEDs Handling ==================================== // ==================================== LEDs Handling ====================================
// HAL_GPIO_TogglePin(LED4_GPIO_Port, LED4_Pin); // Toggle BLUE1 LED // HAL_GPIO_TogglePin(LED4_GPIO_Port, LED4_Pin); // Toggle BLUE1 LED
if (SUCCESS == mpuStatus) { #ifdef SERIAL_FEEDBACK
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET); // Turn on GREEN LED if (!timeoutFlagSerial) {
} else { if (Feedback.cmdLed & LED1_SET) { HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); }
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET); // Turn on RED LED if (Feedback.cmdLed & LED2_SET) { HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); }
} if (Feedback.cmdLed & LED3_SET) { HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); }
if (Feedback.cmdLed & LED4_SET) { HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_RESET); }
if (Feedback.cmdLed & LED5_SET) { HAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_RESET); }
}
#endif
// ==================================== USER Handling ==================================== // ==================================== USER Handling ====================================
#ifdef SERIAL_DEBUG #ifdef SERIAL_DEBUG
@ -209,35 +218,43 @@ int main(void)
mpu_get_data(); mpu_get_data();
} }
// Print MPU data to Console // Print MPU data to Console
if (main_loop_counter % 50 == 0 && SUCCESS == mpuStatus) { if (main_loop_counter % 50 == 0) {
mpu_print_to_console(); mpu_print_to_console();
} }
// ==================================== SENSORS Handling ==================================== // ==================================== SENSORS Handling ====================================
sensor1_read = HAL_GPIO_ReadPin(SENSOR1_GPIO_Port, SENSOR1_Pin);
sensor2_read = HAL_GPIO_ReadPin(SENSOR2_GPIO_Port, SENSOR2_Pin);
// SENSOR1 // SENSOR1
if (HAL_GPIO_ReadPin(SENSOR1_GPIO_Port, SENSOR1_Pin)) { if (sensor1 == RESET && sensor1_read == SET) {
sensor1 = 1; sensor1 = SET;
// Sensor ACTIVE: Do something here // Sensor ACTIVE: Do something here (one time task on activation)
HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_SET);
consoleLog("-- SENSOR 1 Active --\n"); consoleLog("-- SENSOR 1 Active --\n");
HAL_Delay(50); } else if(sensor1 == SET && sensor1_read == RESET) {
} else { sensor1 = RESET;
sensor1 = 0;
HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_RESET);
} }
// SENSOR2 // SENSOR2
if (HAL_GPIO_ReadPin(SENSOR2_GPIO_Port, SENSOR2_Pin)) { if (sensor2 == RESET && sensor2_read == SET) {
sensor2 = 1; sensor2 = SET;
// Sensor ACTIVE: Do something here // Sensor ACTIVE: Do something here (one time task on activation)
HAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_SET);
consoleLog("-- SENSOR 2 Active --\n"); consoleLog("-- SENSOR 2 Active --\n");
HAL_Delay(50); } else if (sensor2 == SET && sensor2_read == RESET) {
} else { sensor2 = RESET;
sensor2 = 0;
HAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_RESET);
} }
if (sensor1 == SET) {
// Sensor ACTIVE: Do something here (continuous task)
}
if (sensor2 == SET) {
// Sensor ACTIVE: Do something here (continuous task)
}
// ==================================== SERIAL Tx/Rx Handling ==================================== // ==================================== SERIAL Tx/Rx Handling ====================================
@ -257,7 +274,7 @@ int main(void)
#ifdef SERIAL_FEEDBACK #ifdef SERIAL_FEEDBACK
uint16_t checksum; uint16_t checksum;
checksum = (uint16_t)(NewFeedback.start ^ NewFeedback.cmd1 ^ NewFeedback.cmd2 ^ NewFeedback.speedR ^ NewFeedback.speedL checksum = (uint16_t)(NewFeedback.start ^ NewFeedback.cmd1 ^ NewFeedback.cmd2 ^ NewFeedback.speedR ^ NewFeedback.speedL
^ NewFeedback.speedR_meas ^ NewFeedback.speedL_meas ^ NewFeedback.batVoltage ^ NewFeedback.boardTemp); ^ NewFeedback.speedR_meas ^ NewFeedback.speedL_meas ^ NewFeedback.batVoltage ^ NewFeedback.boardTemp ^ NewFeedback.cmdLed);
if (NewFeedback.start == SERIAL_START_FRAME && NewFeedback.checksum == checksum) { if (NewFeedback.start == SERIAL_START_FRAME && NewFeedback.checksum == checksum) {
if (timeoutFlagSerial) { // Check for previous timeout flag if (timeoutFlagSerial) { // Check for previous timeout flag
if (timeoutCntSerial-- <= 0) // Timeout de-qualification if (timeoutCntSerial-- <= 0) // Timeout de-qualification

View File

@ -521,13 +521,13 @@ const struct hw_s hw = {
const struct test_s test = { const struct test_s test = {
.gyro_sens = 32768/250, .gyro_sens = 32768/250,
.accel_sens = 32768/2, // FSR = +-2G = 16384 LSB/G .accel_sens = 32768/2, // FSR = +-2G = 16384 LSB/G
.reg_rate_div = 0, // 1kHz. .reg_rate_div = 0, // 1kHz.
.reg_lpf = 2, // 92Hz low pass filter .reg_lpf = 2, // 92Hz low pass filter
.reg_gyro_fsr = 0, // 250dps. .reg_gyro_fsr = 0, // 250dps.
.reg_accel_fsr = 0x0, // Accel FSR setting = 2g. .reg_accel_fsr = 0x0, // Accel FSR setting = 2g.
.wait_ms = 200, // 200ms stabilization time .wait_ms = 200, // 200ms stabilization time
.packet_thresh = 200, // 200 samples .packet_thresh = 200, // 200 samples
.min_dps = 20.f, // 20 dps for Gyro Criteria C .min_dps = 20.f, // 20 dps for Gyro Criteria C
.max_dps = 60.f, // Must exceed 60 dps threshold for Gyro Criteria B .max_dps = 60.f, // Must exceed 60 dps threshold for Gyro Criteria B
.max_gyro_var = .5f, // Must exceed +50% variation for Gyro Criteria A .max_gyro_var = .5f, // Must exceed +50% variation for Gyro Criteria A
@ -2182,17 +2182,17 @@ static int accel_6500_self_test(long *bias_regular, long *bias_st, int debug)
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
st_shift_cust[i] = bias_st[i] - bias_regular[i]; st_shift_cust[i] = bias_st[i] - bias_regular[i];
if(debug) { if(debug) {
log_i("Bias_Shift=%7.4f, Bias_Reg=%7.4f, Bias_HWST=%7.4f\r\n", log_i("Bias_Shift=%ld, Bias_Reg=%ld, Bias_HWST=%ld\r\n",
st_shift_cust[i]/1.f, bias_regular[i]/1.f, (long)st_shift_cust[i], bias_regular[i],
bias_st[i]/1.f); bias_st[i]);
log_i("OTP value: %7.4f\r\n", ct_shift_prod[i]/1.f); log_i("OTP value: %ld\r\n", (long)ct_shift_prod[i]);
} }
st_shift_ratio[i] = st_shift_cust[i] / ct_shift_prod[i] - 1.f; st_shift_ratio[i] = st_shift_cust[i] / ct_shift_prod[i] - 1.f;
if(debug) if(debug)
log_i("ratio=%7.4f, threshold=%7.4f\r\n", st_shift_ratio[i]/1.f, log_i("ratio=%ld, threshold=%ld\r\n", (long)st_shift_ratio[i],
test.max_accel_var/1.f); (long)test.max_accel_var);
if (fabs(st_shift_ratio[i]) > test.max_accel_var) { if (fabs(st_shift_ratio[i]) > test.max_accel_var) {
if(debug) if(debug)
@ -2208,15 +2208,15 @@ static int accel_6500_self_test(long *bias_regular, long *bias_st, int debug)
if(debug) { if(debug) {
log_i("ACCEL:CRITERIA B\r\n"); log_i("ACCEL:CRITERIA B\r\n");
log_i("Min MG: %7.4f\r\n", accel_st_al_min/1.f); log_i("Min MG: %ld\r\n", (long)accel_st_al_min);
log_i("Max MG: %7.4f\r\n", accel_st_al_max/1.f); log_i("Max MG: %ld\r\n", (long)accel_st_al_max);
} }
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
st_shift_cust[i] = bias_st[i] - bias_regular[i]; st_shift_cust[i] = bias_st[i] - bias_regular[i];
if(debug) if(debug)
log_i("Bias_shift=%7.4f, st=%7.4f, reg=%7.4f\n", st_shift_cust[i]/1.f, bias_st[i]/1.f, bias_regular[i]/1.f); log_i("Bias_shift=%ld, st=%ld, reg=%ld\n", (long)st_shift_cust[i], bias_st[i], bias_regular[i]);
if(st_shift_cust[i] < accel_st_al_min || st_shift_cust[i] > accel_st_al_max) { if(st_shift_cust[i] < accel_st_al_min || st_shift_cust[i] > accel_st_al_max) {
if(debug) if(debug)
log_i("Accel FAIL axis:%d <= 225mg or >= 675mg\n", i); log_i("Accel FAIL axis:%d <= 225mg or >= 675mg\n", i);
@ -2229,7 +2229,7 @@ static int accel_6500_self_test(long *bias_regular, long *bias_st, int debug)
/* Self Test Pass/Fail Criteria C */ /* Self Test Pass/Fail Criteria C */
accel_offset_max = test.max_g_offset * 65536.f; accel_offset_max = test.max_g_offset * 65536.f;
if(debug) if(debug)
log_i("Accel:CRITERIA C: bias less than %7.4f\n", accel_offset_max/1.f); log_i("Accel:CRITERIA C: bias less than %ld\n", (long)accel_offset_max);
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
if(fabs(bias_regular[i]) > accel_offset_max) { if(fabs(bias_regular[i]) > accel_offset_max) {
if(debug) if(debug)
@ -2278,17 +2278,17 @@ static int gyro_6500_self_test(long *bias_regular, long *bias_st, int debug)
st_shift_cust[i] = bias_st[i] - bias_regular[i]; st_shift_cust[i] = bias_st[i] - bias_regular[i];
if(debug) { if(debug) {
log_i("Bias_Shift=%7.4f, Bias_Reg=%7.4f, Bias_HWST=%7.4f\r\n", log_i("Bias_Shift=%ld, Bias_Reg=%ld, Bias_HWST=%ld\r\n",
st_shift_cust[i]/1.f, bias_regular[i]/1.f, (long)st_shift_cust[i], bias_regular[i],
bias_st[i]/1.f); bias_st[i]);
log_i("OTP value: %7.4f\r\n", ct_shift_prod[i]/1.f); log_i("OTP value: %ld\r\n", (long)ct_shift_prod[i]);
} }
st_shift_ratio[i] = st_shift_cust[i] / ct_shift_prod[i]; st_shift_ratio[i] = st_shift_cust[i] / ct_shift_prod[i];
if(debug) if(debug)
log_i("ratio=%7.4f, threshold=%7.4f\r\n", st_shift_ratio[i]/1.f, log_i("ratio=%ld, threshold=%ld\r\n", (long)st_shift_ratio[i],
test.max_gyro_var/1.f); (long)test.max_gyro_var);
if (fabs(st_shift_ratio[i]) < test.max_gyro_var) { if (fabs(st_shift_ratio[i]) < test.max_gyro_var) {
if(debug) if(debug)
@ -2303,14 +2303,14 @@ static int gyro_6500_self_test(long *bias_regular, long *bias_st, int debug)
if(debug) { if(debug) {
log_i("GYRO:CRITERIA B\r\n"); log_i("GYRO:CRITERIA B\r\n");
log_i("Max DPS: %7.4f\r\n", gyro_st_al_max/1.f); log_i("Max DPS: %ld\r\n", (long)gyro_st_al_max);
} }
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
st_shift_cust[i] = bias_st[i] - bias_regular[i]; st_shift_cust[i] = bias_st[i] - bias_regular[i];
if(debug) if(debug)
log_i("Bias_shift=%7.4f, st=%7.4f, reg=%7.4f\n", st_shift_cust[i]/1.f, bias_st[i]/1.f, bias_regular[i]/1.f); log_i("Bias_shift=%ld, st=%ld, reg=%ld\n", (long)st_shift_cust[i], bias_st[i], bias_regular[i]);
if(st_shift_cust[i] < gyro_st_al_max) { if(st_shift_cust[i] < gyro_st_al_max) {
if(debug) if(debug)
log_i("GYRO FAIL axis:%d greater than 60dps\n", i); log_i("GYRO FAIL axis:%d greater than 60dps\n", i);
@ -2323,7 +2323,7 @@ static int gyro_6500_self_test(long *bias_regular, long *bias_st, int debug)
/* Self Test Pass/Fail Criteria C */ /* Self Test Pass/Fail Criteria C */
gyro_offset_max = test.min_dps * 65536.f; gyro_offset_max = test.min_dps * 65536.f;
if(debug) if(debug)
log_i("Gyro:CRITERIA C: bias less than %7.4f\n", gyro_offset_max/1.f); log_i("Gyro:CRITERIA C: bias less than %ld\n", (long)gyro_offset_max);
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
if(fabs(bias_regular[i]) > gyro_offset_max) { if(fabs(bias_regular[i]) > gyro_offset_max) {
if(debug) if(debug)
@ -2455,8 +2455,8 @@ static int get_st_6500_biases(long *gyro, long *accel, unsigned char hw_test, in
if(debug) { if(debug) {
log_i("Accel offset data HWST bit=%d: %7.4f %7.4f %7.4f\r\n", hw_test, accel[0]/65536.f, accel[1]/65536.f, accel[2]/65536.f); log_i("Accel offset data HWST bit=%d: %ld %ld %ld\r\n", hw_test, accel[0], accel[1], accel[2]);
log_i("Gyro offset data HWST bit=%d: %7.4f %7.4f %7.4f\r\n", hw_test, gyro[0]/65536.f, gyro[1]/65536.f, gyro[2]/65536.f); log_i("Gyro offset data HWST bit=%d: %ld %ld %ld\r\n", hw_test, gyro[0], gyro[1], gyro[2]);
} }
return 0; return 0;
@ -2871,9 +2871,9 @@ static int setup_compass(void)
if (akm_addr > 0x0F) { if (akm_addr > 0x0F) {
/* TODO: Handle this case in all compass-related functions. */ /* TODO: Handle this case in all compass-related functions. */
#ifdef SERIAL_DEBUG #ifdef SERIAL_DEBUG
log_i("Compass not found.\n"); log_i("Compass not found.\n");
#endif #endif
return -1; return -1;
} }
@ -3228,14 +3228,14 @@ void mpu_start_self_test(void)
if (result == 0x7) { if (result == 0x7) {
#ifdef SERIAL_DEBUG #ifdef SERIAL_DEBUG
consoleLog("Passed!\n"); consoleLog("Passed!\n");
log_i("accel: %7.4f %7.4f %7.4f\n", log_i("accel: %ld %ld %ld\n",
accel[0]/65536.f, accel[0],
accel[1]/65536.f, accel[1],
accel[2]/65536.f); accel[2]);
log_i("gyro: %7.4f %7.4f %7.4f\n", log_i("gyro: %ld %ld %ld\n",
gyro[0]/65536.f, gyro[0],
gyro[1]/65536.f, gyro[1],
gyro[2]/65536.f); gyro[2]);
/* Test passed. We can trust the gyro data here, so now we need to update calibrated data*/ /* Test passed. We can trust the gyro data here, so now we need to update calibrated data*/
#endif #endif
@ -3301,17 +3301,17 @@ void mpu_setup_gyro(void)
unsigned char mask = 0, lp_accel_was_on = 0; unsigned char mask = 0, lp_accel_was_on = 0;
if (hal.sensors & ACCEL_ON) { if (hal.sensors & ACCEL_ON) {
mask |= INV_XYZ_ACCEL; mask |= INV_XYZ_ACCEL;
consoleLog("Accel sensor On.\n"); consoleLog("Accel sensor On.\n");
} else { } else {
consoleLog("Accel sensor Off.\n"); consoleLog("Accel sensor Off.\n");
} }
if (hal.sensors & GYRO_ON) { if (hal.sensors & GYRO_ON) {
mask |= INV_XYZ_GYRO; mask |= INV_XYZ_GYRO;
lp_accel_was_on |= hal.lp_accel_mode; lp_accel_was_on |= hal.lp_accel_mode;
consoleLog("Gyro sensor On.\n"); consoleLog("Gyro sensor On.\n");
} else { } else {
consoleLog("Gyro sensor Off.\n"); consoleLog("Gyro sensor Off.\n");
} }
#ifdef COMPASS_ENABLED #ifdef COMPASS_ENABLED
if (hal.sensors & COMPASS_ON) { if (hal.sensors & COMPASS_ON) {
mask |= INV_XYZ_COMPASS; mask |= INV_XYZ_COMPASS;
@ -3337,22 +3337,22 @@ void mpu_setup_gyro(void)
/* =========================== MPU-6050 Configuration =========================== */ /* =========================== MPU-6050 Configuration =========================== */
int mpu_config(void) int mpu_config(void)
{ {
consoleLog("-- Configuring MPU6050... "); consoleLog("-- Configuring MPU6050... ");
if(mpu_init()) { if(mpu_init()) {
consoleLog("FAIL (MPU).\n"); consoleLog("FAIL (MPU).\n");
return -1; return -1;
} }
/* Get/set hardware configuration. Start gyro. */ /* Get/set hardware configuration. Start gyro. */
/* Wake up all sensors. */ /* Wake up all sensors. */
mpu_set_sensors(INV_XYZ_GYRO | INV_XYZ_ACCEL); mpu_set_sensors(INV_XYZ_GYRO | INV_XYZ_ACCEL);
/* Push both gyro and accel data into the FIFO. */ /* Push both gyro and accel data into the FIFO. */
mpu_configure_fifo(INV_XYZ_GYRO | INV_XYZ_ACCEL); mpu_configure_fifo(INV_XYZ_GYRO | INV_XYZ_ACCEL);
mpu_set_sample_rate(MPU_DEFAULT_HZ); mpu_set_sample_rate(MPU_DEFAULT_HZ);
/* Read back configuration in case it was set improperly. */ /* Read back configuration in case it was set improperly. */
// mpu_get_sample_rate(&gyro_rate); // mpu_get_sample_rate(&gyro_rate);
// mpu_get_gyro_fsr(&gyro_fsr); // mpu_get_gyro_fsr(&gyro_fsr);
// mpu_get_accel_fsr(&accel_fsr); // mpu_get_accel_fsr(&accel_fsr);
@ -3365,7 +3365,7 @@ int mpu_config(void)
hal.next_temp_ms = 0; hal.next_temp_ms = 0;
#ifdef MPU_DMP_ENABLE #ifdef MPU_DMP_ENABLE
/* To initialize the DMP: /* To initialize the DMP:
* 1. Call dmp_load_motion_driver_firmware(). This pushes the DMP image in * 1. Call dmp_load_motion_driver_firmware(). This pushes the DMP image in
* inv_mpu_dmp_motion_driver.h into the MPU memory. * inv_mpu_dmp_motion_driver.h into the MPU memory.
* 2. Push the gyro and accel orientation matrix to the DMP. * 2. Push the gyro and accel orientation matrix to the DMP.
@ -3395,11 +3395,11 @@ int mpu_config(void)
* DMP_FEATURE_SEND_CAL_GYRO: Add calibrated gyro data to the FIFO. Cannot * DMP_FEATURE_SEND_CAL_GYRO: Add calibrated gyro data to the FIFO. Cannot
* be used in combination with DMP_FEATURE_SEND_RAW_GYRO. * be used in combination with DMP_FEATURE_SEND_RAW_GYRO.
*/ */
consoleLog(" writing DMP... "); consoleLog(" writing DMP... ");
if (dmp_load_motion_driver_firmware()) { if (dmp_load_motion_driver_firmware()) {
consoleLog(" FAIL (DMP) --\r\n"); consoleLog(" FAIL (DMP) --\r\n");
return -1; return -1;
} }
// dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_pdata.orientation)); // dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_pdata.orientation));
dmp_register_tap_cb(mpu_tap_func); dmp_register_tap_cb(mpu_tap_func);
dmp_register_android_orient_cb(mpu_android_orient_func); dmp_register_android_orient_cb(mpu_android_orient_func);
@ -3424,8 +3424,8 @@ int mpu_config(void)
hal.dmp_on = 1; hal.dmp_on = 1;
#endif #endif
consoleLog(" OK --\r\n"); consoleLog(" OK --\r\n");
return 0; return 0;
} }
@ -3452,93 +3452,93 @@ void mpu_get_data(void)
* Let's make them timer-based. * Let's make them timer-based.
*/ */
if (timestamp > hal.next_temp_ms) { if (timestamp > hal.next_temp_ms) {
hal.next_temp_ms = timestamp + TEMP_READ_MS; hal.next_temp_ms = timestamp + TEMP_READ_MS;
new_temp = 1; new_temp = 1;
} }
if (hal.new_gyro && hal.dmp_on) { if (hal.new_gyro && hal.dmp_on) {
short gyro[3], accel[3], sensors; short gyro[3], accel[3], sensors;
static long quat[4], temperature; static long quat[4], temperature;
unsigned char more; unsigned char more;
/* This function gets new data from the FIFO when the DMP is in /* This function gets new data from the FIFO when the DMP is in
* use. The FIFO can contain any combination of gyro, accel, * use. The FIFO can contain any combination of gyro, accel,
* quaternion, and gesture data. The sensors parameter tells the * quaternion, and gesture data. The sensors parameter tells the
* caller which data fields were actually populated with new data. * caller which data fields were actually populated with new data.
* For example, if sensors == (INV_XYZ_GYRO | INV_WXYZ_QUAT), then * For example, if sensors == (INV_XYZ_GYRO | INV_WXYZ_QUAT), then
* the FIFO isn't being filled with accel data. * the FIFO isn't being filled with accel data.
* The driver parses the gesture data to determine if a gesture * The driver parses the gesture data to determine if a gesture
* event has occurred; on an event, the application will be notified * event has occurred; on an event, the application will be notified
* via a callback (assuming that a callback function was properly * via a callback (assuming that a callback function was properly
* registered). The more parameter is non-zero if there are * registered). The more parameter is non-zero if there are
* leftover packets in the FIFO. * leftover packets in the FIFO.
*/ */
dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors, &more); dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors, &more);
if (!more) if (!more)
hal.new_gyro = 0; hal.new_gyro = 0;
if (sensors & INV_XYZ_GYRO) { if (sensors & INV_XYZ_GYRO) {
mpu.gyro.x = gyro[0]; mpu.gyro.x = gyro[0];
mpu.gyro.y = gyro[1]; mpu.gyro.y = gyro[1];
mpu.gyro.z = gyro[2]; mpu.gyro.z = gyro[2];
new_data = 1; new_data = 1;
if (new_temp) { if (new_temp) {
new_temp = 0; new_temp = 0;
mpu_get_temperature(&temperature, &sensor_timestamp); mpu_get_temperature(&temperature, &sensor_timestamp);
mpu.temp = (int16_t)((temperature*100) >> 16); // Convert temperature[q16] to temperature*100[degC] mpu.temp = (int16_t)((temperature*100) >> 16); // Convert temperature[q16] to temperature*100[degC]
} }
} }
if (sensors & INV_XYZ_ACCEL) { if (sensors & INV_XYZ_ACCEL) {
mpu.accel.x = accel[0]; mpu.accel.x = accel[0];
mpu.accel.y = accel[1]; mpu.accel.y = accel[1];
mpu.accel.z = accel[2]; mpu.accel.z = accel[2];
new_data = 1; new_data = 1;
} }
if (sensors & INV_WXYZ_QUAT) { if (sensors & INV_WXYZ_QUAT) {
mpu.quat.w = quat[0]; mpu.quat.w = quat[0];
mpu.quat.x = quat[1]; mpu.quat.x = quat[1];
mpu.quat.y = quat[2]; mpu.quat.y = quat[2];
mpu.quat.z = quat[3]; mpu.quat.z = quat[3];
mpu_calc_euler_angles(); // Calculate Euler angles mpu_calc_euler_angles(); // Calculate Euler angles
new_data = 1; new_data = 1;
} }
} else if (hal.new_gyro) { } else if (hal.new_gyro) {
short gyro[3], accel[3]; short gyro[3], accel[3];
long temperature; long temperature;
unsigned char sensors, more; unsigned char sensors, more;
/* This function gets new data from the FIFO. The FIFO can contain /* This function gets new data from the FIFO. The FIFO can contain
* gyro, accel, both, or neither. The sensors parameter tells the * gyro, accel, both, or neither. The sensors parameter tells the
* caller which data fields were actually populated with new data. * caller which data fields were actually populated with new data.
* For example, if sensors == INV_XYZ_GYRO, then the FIFO isn't * For example, if sensors == INV_XYZ_GYRO, then the FIFO isn't
* being filled with accel data. The more parameter is non-zero if * being filled with accel data. The more parameter is non-zero if
* there are leftover packets in the FIFO. The HAL can use this * there are leftover packets in the FIFO. The HAL can use this
* information to increase the frequency at which this function is * information to increase the frequency at which this function is
* called. * called.
*/ */
hal.new_gyro = 0; hal.new_gyro = 0;
mpu_read_fifo(gyro, accel, &sensor_timestamp, &sensors, &more); mpu_read_fifo(gyro, accel, &sensor_timestamp, &sensors, &more);
if (more) if (more)
hal.new_gyro = 1; hal.new_gyro = 1;
if (sensors & INV_XYZ_GYRO) { if (sensors & INV_XYZ_GYRO) {
mpu.gyro.x = gyro[0]; mpu.gyro.x = gyro[0];
mpu.gyro.y = gyro[1]; mpu.gyro.y = gyro[1];
mpu.gyro.z = gyro[2]; mpu.gyro.z = gyro[2];
new_data = 1; new_data = 1;
if (new_temp) { if (new_temp) {
new_temp = 0; new_temp = 0;
mpu_get_temperature(&temperature, &sensor_timestamp); mpu_get_temperature(&temperature, &sensor_timestamp);
mpu.temp = (int16_t)((temperature*100) >> 16); // Convert temperature[q16] to temperature*100[degC] mpu.temp = (int16_t)((temperature*100) >> 16); // Convert temperature[q16] to temperature*100[degC]
} }
} }
if (sensors & INV_XYZ_ACCEL) { if (sensors & INV_XYZ_ACCEL) {
mpu.accel.x = accel[0]; mpu.accel.x = accel[0];
mpu.accel.y = accel[1]; mpu.accel.y = accel[1];
mpu.accel.z = accel[2]; mpu.accel.z = accel[2];
new_data = 1; new_data = 1;
} }
} }
if (new_data) { if (new_data) {
// do something if needed // do something if needed
} }
} }
@ -3608,7 +3608,7 @@ void mpu_calc_euler_angles(void) {
// Calculate Euler angles: source <https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles> // Calculate Euler angles: source <https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles>
roll = atan2(2*(w*x + y*z), 1 - 2*(x*x + y*y)); // roll (x-axis rotation) roll = atan2(2*(w*x + y*z), 1 - 2*(x*x + y*y)); // roll (x-axis rotation)
pitch = asin(2*(w*y - z*x)); // pitch (y-axis rotation) pitch = asin(2*(w*y - z*x)); // pitch (y-axis rotation)
yaw = atan2(2*(w*z + x*y), 1 - 2*(y*y + z*z)); // yaw (z-axis rotation) yaw = atan2(2*(w*z + x*y), 1 - 2*(y*y + z*z)); // yaw (z-axis rotation)
// Convert [rad] to [deg*100] // Convert [rad] to [deg*100]
@ -3677,30 +3677,30 @@ void mpu_handle_input(char c)
switch (c) { switch (c) {
/* This command prints the Help text. */ /* This command prints the Help text. */
case 'h': case 'h':
consoleLog("=================== HELP COMMANDS ===================\n"); consoleLog("=================== HELP COMMANDS ===================\n");
consoleLog("h: Print Help commands\n"); consoleLog("h: Print Help commands\n");
consoleLog("8: Set Accelerometer sensor on/off\n"); consoleLog("8: Set Accelerometer sensor on/off\n");
consoleLog("9: Set Gyroscope sensor on/off\n"); consoleLog("9: Set Gyroscope sensor on/off\n");
consoleLog("r: Print Registers value\n"); consoleLog("r: Print Registers value\n");
consoleLog("a: Print Accelerometer data\n"); consoleLog("a: Print Accelerometer data\n");
consoleLog("g: Print Gyroscope data\n"); consoleLog("g: Print Gyroscope data\n");
consoleLog("q: Print Quaternion data\n"); consoleLog("q: Print Quaternion data\n");
consoleLog("e: Print Euler angles in degree * 100\n"); consoleLog("e: Print Euler angles in degree * 100\n");
consoleLog("t: Print Temperature in degC * 100\n"); consoleLog("t: Print Temperature in degC * 100\n");
consoleLog("p: Print Pedometer data\n"); consoleLog("p: Print Pedometer data\n");
consoleLog("0: Reset Pedometer\n"); consoleLog("0: Reset Pedometer\n");
consoleLog("1: Set DMP/MPU frequency 10 Hz\n"); consoleLog("1: Set DMP/MPU frequency 10 Hz\n");
consoleLog("2: Set DMP/MPU frequency 20 Hz\n"); consoleLog("2: Set DMP/MPU frequency 20 Hz\n");
consoleLog("3: Set DMP/MPU frequency 40 Hz\n"); consoleLog("3: Set DMP/MPU frequency 40 Hz\n");
consoleLog("4: Set DMP/MPU frequency 50 Hz\n"); consoleLog("4: Set DMP/MPU frequency 50 Hz\n");
consoleLog("5: Set DMP/MPU frequency 100 Hz\n"); consoleLog("5: Set DMP/MPU frequency 100 Hz\n");
consoleLog(",: Set DMP interrupt to gesture event only\n"); consoleLog(",: Set DMP interrupt to gesture event only\n");
consoleLog(".: Set DMP interrupt to continuous\n"); consoleLog(".: Set DMP interrupt to continuous\n");
consoleLog("f: Set DMP on/off\n"); consoleLog("f: Set DMP on/off\n");
consoleLog("v: Set Quaternion on/off\n"); consoleLog("v: Set Quaternion on/off\n");
consoleLog("w: Test out low-power accel mode\n"); consoleLog("w: Test out low-power accel mode\n");
consoleLog("s: Run self-test (device must be facing up or down)\n"); consoleLog("s: Run self-test (device must be facing up or down)\n");
consoleLog("=====================================================\n"); consoleLog("=====================================================\n");
break; break;
/* These commands turn off individual sensors. */ /* These commands turn off individual sensors. */
@ -3713,14 +3713,14 @@ void mpu_handle_input(char c)
mpu_setup_gyro(); mpu_setup_gyro();
break; break;
/* This command prints out the value of each gyro register for debugging. /* This command prints out the value of each gyro register for debugging.
* If logging is disabled, this function has no effect. * If logging is disabled, this function has no effect.
*/ */
case 'r': case 'r':
mpu_reg_dump(); mpu_reg_dump();
break; break;
/* These commands print individual sensor data. */ /* These commands print individual sensor data. */
case 'a': case 'a':
hal.report ^= PRINT_ACCEL; hal.report ^= PRINT_ACCEL;
break; break;
@ -3849,9 +3849,9 @@ void mpu_handle_input(char c)
/* Test out low-power accel mode. */ /* Test out low-power accel mode. */
case 'w': case 'w':
if (hal.dmp_on) { if (hal.dmp_on) {
consoleLog("Warning: For low-power mode, DMP needs to be disabled.\n"); consoleLog("Warning: For low-power mode, DMP needs to be disabled.\n");
break; /* LP accel is not compatible with the DMP. */ break; /* LP accel is not compatible with the DMP. */
} }
mpu_lp_accel_mode(20); mpu_lp_accel_mode(20);
/* When LP accel mode is enabled, the driver automatically configures /* When LP accel mode is enabled, the driver automatically configures
* the hardware for latched interrupts. However, the MCU sometimes * the hardware for latched interrupts. However, the MCU sometimes
@ -3868,8 +3868,8 @@ void mpu_handle_input(char c)
break; break;
/* The hardware self test is completely localized in the gyro driver. /* The hardware self test is completely localized in the gyro driver.
* Logging is assumed to be enabled; otherwise, a couple LEDs could * Logging is assumed to be enabled; otherwise, a couple LEDs could
* probably be used here to display the test results. * probably be used here to display the test results.
*/ */
case 's': case 's':
mpu_start_self_test(); mpu_start_self_test();

View File

@ -35,7 +35,7 @@ extern I2C_HandleTypeDef hi2c1;
void consoleLog(char *message) void consoleLog(char *message)
{ {
#ifdef SERIAL_DEBUG #ifdef SERIAL_DEBUG
log_i("%s", message); log_i("%s", message);
#endif #endif
} }
@ -51,51 +51,49 @@ void get_tick_count_ms(unsigned long *count)
#else #else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif #endif
PUTCHAR_PROTOTYPE PUTCHAR_PROTOTYPE {
{
HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 1000); HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 1000);
return ch; return ch;
} }
#ifdef __GNUC__ #ifdef __GNUC__
int _write(int file, char *ptr, int len) int _write(int file, char *data, int len) {
{ int i;
int DataIdx; for (i = 0; i < len; i++) { __io_putchar( *data++ );}
for (DataIdx = 0; DataIdx < len; DataIdx++) { __io_putchar( *ptr++ );} return len;
return len; }
}
#endif #endif
#endif #endif
void introDemoLED(uint32_t tDelay) void intro_demo_led(uint32_t tDelay)
{ {
int i; int i;
for (i = 0; i < 6; i++) {
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET);
HAL_Delay(tDelay);
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
HAL_Delay(tDelay);
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
HAL_Delay(tDelay);
}
for (i = 0; i < 6; i++) { for (i = 0; i < 2; i++) {
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);
HAL_Delay(tDelay); HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_SET);
HAL_Delay(tDelay); HAL_Delay(tDelay);
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
HAL_Delay(tDelay); HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET);
} HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_RESET);
for (i = 0; i < 2; i++) { }
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_SET);
HAL_Delay(tDelay);
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_RESET);
}
} }
@ -106,12 +104,12 @@ void introDemoLED(uint32_t tDelay)
*/ */
int8_t i2c_writeBytes(uint8_t slaveAddr, uint8_t regAddr, uint8_t length, uint8_t *data) int8_t i2c_writeBytes(uint8_t slaveAddr, uint8_t regAddr, uint8_t length, uint8_t *data)
{ {
// !! Using the I2C Interrupt will fail writing the DMP.. could be that DMP memory writing requires more time !! So use the I2C without interrupt. // !! Using the I2C Interrupt will fail writing the DMP.. could be that DMP memory writing requires more time !! So use the I2C without interrupt.
// HAL_I2C_Mem_Write_IT(&hi2c1, slaveAddr << 1, regAddr, 1, data, length); // HAL_I2C_Mem_Write_IT(&hi2c1, slaveAddr << 1, regAddr, 1, data, length);
// while(HAL_I2C_STATE_READY != HAL_I2C_GetState(&hi2c1)); // Wait until all data bytes are sent/received // while(HAL_I2C_STATE_READY != HAL_I2C_GetState(&hi2c1)); // Wait until all data bytes are sent/received
// return 0; // return 0;
return HAL_I2C_Mem_Write(&hi2c1, slaveAddr << 1, regAddr, 1, data, length, 100); // Address is shifted one position to the left. LSB is reserved for the Read/Write bit. return HAL_I2C_Mem_Write(&hi2c1, slaveAddr << 1, regAddr, 1, data, length, 100); // Address is shifted one position to the left. LSB is reserved for the Read/Write bit.
} }
@ -140,8 +138,8 @@ int8_t i2c_writeBit(uint8_t slaveAddr, uint8_t regAddr, uint8_t bitNum, uint8_t
*/ */
int8_t i2c_readBytes(uint8_t slaveAddr, uint8_t regAddr, uint8_t length, uint8_t *data) int8_t i2c_readBytes(uint8_t slaveAddr, uint8_t regAddr, uint8_t length, uint8_t *data)
{ {
// !! Using the I2C Interrupt will fail writing the DMP.. could be that DMP memory writing requires more time !! So use the I2C without interrupt. // !! Using the I2C Interrupt will fail writing the DMP.. could be that DMP memory writing requires more time !! So use the I2C without interrupt.
// HAL_I2C_Mem_Read(&hi2c1, slaveAddr << 1, regAddr, 1, data, length); // HAL_I2C_Mem_Read(&hi2c1, slaveAddr << 1, regAddr, 1, data, length);
// while(HAL_I2C_STATE_READY != HAL_I2C_GetState(&hi2c1)); // Wait until all data bytes are sent/received // while(HAL_I2C_STATE_READY != HAL_I2C_GetState(&hi2c1)); // Wait until all data bytes are sent/received
// return 0; // return 0;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

View File

@ -6,7 +6,7 @@ include_dir = Inc
src_dir = Src src_dir = Src
;=================== VARIANT SELECTION ========================== ;=================== VARIANT SELECTION ==========================
;default_envs = VARIANT_DEBUG ; DEFAULT Variant ;default_envs = VARIANT_DEBUG ; DEBUG Variant
;default_envs = VARIANT_HOVERBOARD ; HOVERBOARD Variant ;default_envs = VARIANT_HOVERBOARD ; HOVERBOARD Variant
;================================================================ ;================================================================