-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathstm32l475e_iot01_gyro.c
154 lines (128 loc) · 3.35 KB
/
stm32l475e_iot01_gyro.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/**
******************************************************************************
* @file stm32l475e_iot01_gyro.c
* @author MCD Application Team
* @brief This file provides a set of functions needed to manage the gyroscope sensor
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32l475e_iot01_gyro.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM32L475E_IOT01
* @{
*/
/** @defgroup STM32L475E_IOT01_GYROSCOPE GYROSCOPE
* @{
*/
/** @defgroup STM32L475E_IOT01_GYROSCOPE_Private_Variables GYROSCOPE Private Variables
* @{
*/
static GYRO_DrvTypeDef *GyroscopeDrv;
/**
* @}
*/
/** @defgroup STM32L475E_IOT01_GYROSCOPE_Private_Functions GYROSCOPE Private Functions
* @{
*/
/**
* @brief Initialize Gyroscope.
* @retval GYRO_OK or GYRO_ERROR
*/
uint8_t BSP_GYRO_Init(void)
{
uint8_t ret = GYRO_ERROR;
uint16_t ctrl = 0x0000;
GYRO_InitTypeDef LSM6DSL_InitStructure;
if(Lsm6dslGyroDrv.ReadID() != LSM6DSL_ACC_GYRO_WHO_AM_I)
{
ret = GYRO_ERROR;
}
else
{
/* Initialize the gyroscope driver structure */
GyroscopeDrv = &Lsm6dslGyroDrv;
/* Configure Mems : data rate, power mode, full scale and axes */
LSM6DSL_InitStructure.Power_Mode = 0;
LSM6DSL_InitStructure.Output_DataRate = LSM6DSL_ODR_52Hz;
LSM6DSL_InitStructure.Axes_Enable = 0;
LSM6DSL_InitStructure.Band_Width = 0;
LSM6DSL_InitStructure.BlockData_Update = LSM6DSL_BDU_BLOCK_UPDATE;
LSM6DSL_InitStructure.Endianness = 0;
LSM6DSL_InitStructure.Full_Scale = LSM6DSL_GYRO_FS_2000;
/* Configure MEMS: data rate, full scale */
ctrl = (LSM6DSL_InitStructure.Full_Scale | LSM6DSL_InitStructure.Output_DataRate);
/* Configure MEMS: BDU and Auto-increment for multi read/write */
ctrl |= ((LSM6DSL_InitStructure.BlockData_Update | LSM6DSL_ACC_GYRO_IF_INC_ENABLED) << 8);
/* Initialize component */
GyroscopeDrv->Init(ctrl);
ret = GYRO_OK;
}
return ret;
}
/**
* @brief DeInitialize Gyroscope.
*/
void BSP_GYRO_DeInit(void)
{
/* DeInitialize the Gyroscope IO interfaces */
if(GyroscopeDrv != NULL)
{
if(GyroscopeDrv->DeInit!= NULL)
{
GyroscopeDrv->DeInit();
}
}
}
/**
* @brief Set/Unset Gyroscope in low power mode.
* @param status 0 means disable Low Power Mode, otherwise Low Power Mode is enabled
*/
void BSP_GYRO_LowPower(uint16_t status)
{
/* Set/Unset component in low-power mode */
if(GyroscopeDrv != NULL)
{
if(GyroscopeDrv->LowPower!= NULL)
{
GyroscopeDrv->LowPower(status);
}
}
}
/**
* @brief Get XYZ angular acceleration from the Gyroscope.
* @param pfData: pointer on floating array
*/
void BSP_GYRO_GetXYZ(float* pfData)
{
if(GyroscopeDrv != NULL)
{
if(GyroscopeDrv->GetXYZ!= NULL)
{
GyroscopeDrv->GetXYZ(pfData);
}
}
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/