26
26
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
27
*/
28
28
#include "analogin_api.h"
29
- #include "wait_api.h"
30
29
31
30
#if DEVICE_ANALOGIN
32
31
33
32
#include "cmsis.h"
34
33
#include "pinmap.h"
35
34
#include "error.h"
35
+ #include "wait_api.h"
36
36
37
37
static const PinMap PinMap_ADC [] = {
38
38
{PA_0 , ADC_1 , STM_PIN_DATA (GPIO_Mode_AIN , 0 )}, // ADC12_IN0
@@ -57,15 +57,14 @@ static const PinMap PinMap_ADC[] = {
57
57
int adc_inited = 0 ;
58
58
59
59
void analogin_init (analogin_t * obj , PinName pin ) {
60
-
61
- ADC_TypeDef * adc ;
60
+ ADC_TypeDef * adc ;
62
61
ADC_InitTypeDef ADC_InitStructure ;
63
-
62
+
64
63
// Get the peripheral name from the pin and assign it to the object
65
64
obj -> adc = (ADCName )pinmap_peripheral (pin , PinMap_ADC );
66
-
65
+
67
66
if (obj -> adc == (ADCName )NC ) {
68
- error ("ADC pin mapping failed" );
67
+ error ("ADC pin mapping failed" );
69
68
}
70
69
71
70
// Configure GPIO
@@ -80,12 +79,12 @@ void analogin_init(analogin_t *obj, PinName pin) {
80
79
81
80
// Get ADC registers structure address
82
81
adc = (ADC_TypeDef * )(obj -> adc );
83
-
82
+
84
83
// Enable ADC clock (14 MHz maximum)
85
84
// PCLK2 = 64 MHz --> ADC clock = 64/6 = 10.666 MHz
86
85
RCC_ADCCLKConfig (RCC_PCLK2_Div6 );
87
86
RCC_APB2PeriphClockCmd (RCC_APB2Periph_ADC1 , ENABLE );
88
-
87
+
89
88
// Configure ADC
90
89
ADC_InitStructure .ADC_Mode = ADC_Mode_Independent ;
91
90
ADC_InitStructure .ADC_ScanConvMode = DISABLE ;
@@ -100,87 +99,87 @@ void analogin_init(analogin_t *obj, PinName pin) {
100
99
101
100
// Calibrate ADC
102
101
ADC_ResetCalibration (adc );
103
- while (ADC_GetResetCalibrationStatus (adc ));
102
+ while (ADC_GetResetCalibrationStatus (adc ));
104
103
ADC_StartCalibration (adc );
105
- while (ADC_GetCalibrationStatus (adc ));
104
+ while (ADC_GetCalibrationStatus (adc ));
106
105
}
107
106
}
108
107
109
108
static inline uint16_t adc_read (analogin_t * obj ) {
110
- // Get ADC registers structure address
111
- ADC_TypeDef * adc = (ADC_TypeDef * )(obj -> adc );
112
- int channel = 0 ;
113
-
114
- // Configure ADC channel
115
- switch (obj -> pin ) {
116
- case PA_0 :
117
- channel = 0 ;
118
- break ;
119
- case PA_1 :
120
- channel = 1 ;
121
- break ;
122
- case PA_2 :
123
- channel = 2 ;
124
- break ;
125
- case PA_3 :
126
- channel = 3 ;
127
- break ;
128
- case PA_4 :
129
- channel = 4 ;
130
- break ;
131
- case PA_5 :
132
- channel = 5 ;
133
- break ;
134
- case PA_6 :
135
- channel = 6 ;
136
- break ;
137
- case PA_7 :
138
- channel = 7 ;
139
- break ;
140
- case PB_0 :
141
- channel = 8 ;
142
- break ;
143
- case PB_1 :
144
- channel = 9 ;
145
- break ;
146
- case PC_0 :
147
- channel = 10 ;
148
- break ;
149
- case PC_1 :
150
- channel = 11 ;
151
- break ;
152
- case PC_2 :
153
- channel = 12 ;
154
- break ;
155
- case PC_3 :
156
- channel = 13 ;
157
- break ;
158
- case PC_4 :
159
- channel = 14 ;
160
- break ;
161
- case PC_5 :
162
- channel = 15 ;
163
- break ;
164
- default :
165
- return 0 ;
166
- }
167
-
168
- ADC_RegularChannelConfig (adc , channel , 1 , ADC_SampleTime_7Cycles5 );
169
-
170
- ADC_SoftwareStartConvCmd (adc , ENABLE ); // Start conversion
171
-
172
- while (ADC_GetFlagStatus (adc , ADC_FLAG_EOC ) == RESET ); // Wait end of conversion
173
-
174
- return (ADC_GetConversionValue (adc )); // Get conversion value
109
+ // Get ADC registers structure address
110
+ ADC_TypeDef * adc = (ADC_TypeDef * )(obj -> adc );
111
+ int channel = 0 ;
112
+
113
+ // Configure ADC channel
114
+ switch (obj -> pin ) {
115
+ case PA_0 :
116
+ channel = 0 ;
117
+ break ;
118
+ case PA_1 :
119
+ channel = 1 ;
120
+ break ;
121
+ case PA_2 :
122
+ channel = 2 ;
123
+ break ;
124
+ case PA_3 :
125
+ channel = 3 ;
126
+ break ;
127
+ case PA_4 :
128
+ channel = 4 ;
129
+ break ;
130
+ case PA_5 :
131
+ channel = 5 ;
132
+ break ;
133
+ case PA_6 :
134
+ channel = 6 ;
135
+ break ;
136
+ case PA_7 :
137
+ channel = 7 ;
138
+ break ;
139
+ case PB_0 :
140
+ channel = 8 ;
141
+ break ;
142
+ case PB_1 :
143
+ channel = 9 ;
144
+ break ;
145
+ case PC_0 :
146
+ channel = 10 ;
147
+ break ;
148
+ case PC_1 :
149
+ channel = 11 ;
150
+ break ;
151
+ case PC_2 :
152
+ channel = 12 ;
153
+ break ;
154
+ case PC_3 :
155
+ channel = 13 ;
156
+ break ;
157
+ case PC_4 :
158
+ channel = 14 ;
159
+ break ;
160
+ case PC_5 :
161
+ channel = 15 ;
162
+ break ;
163
+ default :
164
+ return 0 ;
165
+ }
166
+
167
+ ADC_RegularChannelConfig (adc , channel , 1 , ADC_SampleTime_7Cycles5 );
168
+
169
+ ADC_SoftwareStartConvCmd (adc , ENABLE ); // Start conversion
170
+
171
+ while (ADC_GetFlagStatus (adc , ADC_FLAG_EOC ) == RESET ); // Wait end of conversion
172
+
173
+ return (ADC_GetConversionValue (adc )); // Get conversion value
175
174
}
176
175
177
176
uint16_t analogin_read_u16 (analogin_t * obj ) {
178
- return (adc_read (obj ));
177
+ return (adc_read (obj ));
179
178
}
180
179
181
180
float analogin_read (analogin_t * obj ) {
182
- uint16_t value = adc_read (obj );
183
- return (float )value * (1.0f / (float )0xFFF ); // 12 bits range
181
+ uint16_t value = adc_read (obj );
182
+ return (float )value * (1.0f / (float )0xFFF ); // 12 bits range
184
183
}
185
184
186
185
#endif
0 commit comments