1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
25
26
29
30
33
34
35
38
41
42
45
48
49
52
55
56
59
60
63
64
67
70
71
74
75
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
131
141
142
145
152
153
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
181
188
189
196
203
204
208
215
216
219
220
223
224
227
228
/* ... */
#include "stm32f401_discovery_gyroscope.h"
/* ... */
/* ... */
/* ... */
/* ... */
/* ... */
/* ... */
/* ... */
/* ... */
/* ... */
/* ... */
static GYRO_DrvTypeDef *GyroscopeDrv;
/* ... */
/* ... */
/* ... */
/* ... */
/* ... */
uint8_t BSP_GYRO_Init(void)
{
uint8_t ret = GYRO_ERROR;
uint16_t ctrl = 0x0000;
GYRO_InitTypeDef L3GD20_InitStructure;
GYRO_FilterConfigTypeDef L3GD20_FilterStructure = {0,0};
if((L3gd20Drv.ReadID() == I_AM_L3GD20) || (L3gd20Drv.ReadID() == I_AM_L3GD20_TR))
{
GyroscopeDrv = &L3gd20Drv;
L3GD20_InitStructure.Power_Mode = L3GD20_MODE_ACTIVE;
L3GD20_InitStructure.Output_DataRate = L3GD20_OUTPUT_DATARATE_1;
L3GD20_InitStructure.Axes_Enable = L3GD20_AXES_ENABLE;
L3GD20_InitStructure.Band_Width = L3GD20_BANDWIDTH_4;
L3GD20_InitStructure.BlockData_Update = L3GD20_BlockDataUpdate_Continous;
L3GD20_InitStructure.Endianness = L3GD20_BLE_LSB;
L3GD20_InitStructure.Full_Scale = L3GD20_FULLSCALE_500;
ctrl = (uint16_t) (L3GD20_InitStructure.Power_Mode | L3GD20_InitStructure.Output_DataRate | \
L3GD20_InitStructure.Axes_Enable | L3GD20_InitStructure.Band_Width);
ctrl |= (uint16_t) ((L3GD20_InitStructure.BlockData_Update | L3GD20_InitStructure.Endianness | \
L3GD20_InitStructure.Full_Scale) << 8);
GyroscopeDrv->Init(ctrl);
L3GD20_FilterStructure.HighPassFilter_Mode_Selection =L3GD20_HPM_NORMAL_MODE_RES;
L3GD20_FilterStructure.HighPassFilter_CutOff_Frequency = L3GD20_HPFCF_0;
ctrl = (uint8_t) ((L3GD20_FilterStructure.HighPassFilter_Mode_Selection |\
L3GD20_FilterStructure.HighPassFilter_CutOff_Frequency));
GyroscopeDrv->FilterConfig(ctrl) ;
GyroscopeDrv->FilterCmd(L3GD20_HIGHPASSFILTER_ENABLE);
ret = GYRO_OK;
}if ((L3gd20Drv.ReadID() == I_AM_L3GD20) || (L3gd20Drv.ReadID() == I_AM_L3GD20_TR)) { ... }
return ret;
}{ ... }
/* ... */
uint8_t BSP_GYRO_ReadID(void)
{
uint8_t id = 0x00;
if(GyroscopeDrv->ReadID != NULL)
{
id = GyroscopeDrv->ReadID();
}if (GyroscopeDrv->ReadID != NULL) { ... }
return id;
}{ ... }
/* ... */
void BSP_GYRO_Reset(void)
{
if(GyroscopeDrv->Reset != NULL)
{
GyroscopeDrv->Reset();
}if (GyroscopeDrv->Reset != NULL) { ... }
}{ ... }
/* ... */
void BSP_GYRO_ITConfig(GYRO_InterruptConfigTypeDef *pIntConfig)
{
uint16_t interruptconfig = 0x0000;
if(GyroscopeDrv->ConfigIT != NULL)
{
interruptconfig |= ((uint8_t)(pIntConfig->Latch_Request| \
pIntConfig->Interrupt_Axes) << 8);
interruptconfig |= (uint8_t)(pIntConfig->Interrupt_ActiveEdge);
GyroscopeDrv->ConfigIT(interruptconfig);
}if (GyroscopeDrv->ConfigIT != NULL) { ... }
}{ ... }
/* ... */
void BSP_GYRO_EnableIT(uint8_t IntPin)
{
if(GyroscopeDrv->EnableIT != NULL)
{
GyroscopeDrv->EnableIT(IntPin);
}if (GyroscopeDrv->EnableIT != NULL) { ... }
}{ ... }
/* ... */
void BSP_GYRO_DisableIT(uint8_t IntPin)
{
if(GyroscopeDrv->DisableIT != NULL)
{
GyroscopeDrv->DisableIT(IntPin);
}if (GyroscopeDrv->DisableIT != NULL) { ... }
}{ ... }
/* ... */
void BSP_GYRO_GetXYZ(float *pfData)
{
if(GyroscopeDrv->GetXYZ!= NULL)
{
GyroscopeDrv->GetXYZ(pfData);
}if (GyroscopeDrv->GetXYZ!= NULL) { ... }
}{ ... }
/* ... */
/* ... */
/* ... */
/* ... */