Skip to content

Commit d91a96f

Browse files
committed
show error if not using ADC pins
1 parent 4ef3738 commit d91a96f

File tree

15 files changed

+188
-76
lines changed

15 files changed

+188
-76
lines changed

src/current_sense/hardware_specific/stm32/stm32f1/stm32f1_hal.cpp

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@ uint32_t _timerToRegularTRGO(TIM_HandleTypeDef* timer){
4141

4242
ADC_HandleTypeDef hadc;
4343

44+
/**
45+
* Function initializing the ADC and the injected channels for the low-side current sensing
46+
*
47+
* @param cs_params - current sense parameters
48+
* @param driver_params - driver parameters
49+
*
50+
* @return int - 0 if success
51+
*/
4452
int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* driver_params)
4553
{
4654
ADC_InjectionConfTypeDef sConfigInjected;
@@ -135,24 +143,38 @@ int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* drive
135143
return 0;
136144
}
137145

138-
void _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC)
146+
/**
147+
* Function to initialize the ADC GPIO pins
148+
*
149+
* @param cs_params current sense parameters
150+
* @param pinA pin number for phase A
151+
* @param pinB pin number for phase B
152+
* @param pinC pin number for phase C
153+
* @return int 0 if success, -1 if error
154+
*/
155+
int _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC)
139156
{
140-
uint8_t cnt = 0;
141-
if(_isset(pinA)){
142-
pinmap_pinout(analogInputToPinName(pinA), PinMap_ADC);
143-
cs_params->pins[cnt++] = pinA;
144-
}
145-
if(_isset(pinB)){
146-
pinmap_pinout(analogInputToPinName(pinB), PinMap_ADC);
147-
cs_params->pins[cnt++] = pinB;
148-
}
149-
if(_isset(pinC)){
150-
pinmap_pinout(analogInputToPinName(pinC), PinMap_ADC);
151-
cs_params->pins[cnt] = pinC;
157+
int pins[3] = {pinA, pinB, pinC};
158+
const char* port_names[3] = {"A", "B", "C"};
159+
for(int i=0; i<3; i++){
160+
if(_isset(pins[i])){
161+
// check if pin is an analog pin
162+
if(pinmap_peripheral(analogInputToPinName(pins[i]), PinMap_ADC) == NP){
163+
#ifdef SIMPLEFOC_STM32_DEBUG
164+
SimpleFOCDebug::print("STM32-CS: ERR: Pin ");
165+
SimpleFOCDebug::print(port_names[i]);
166+
SimpleFOCDebug::println(" does not belong to any ADC!");
167+
#endif
168+
return -1;
169+
}
170+
pinmap_pinout(analogInputToPinName(pins[i]), PinMap_ADC);
171+
cs_params->pins[i] = pins[i];
172+
}
152173
}
153-
174+
return 0;
154175
}
155176

177+
156178
extern "C" {
157179
void ADC1_2_IRQHandler(void)
158180
{

src/current_sense/hardware_specific/stm32/stm32f1/stm32f1_hal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include "../stm32_mcu.h"
99

1010
int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* driver_params);
11-
void _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC);
11+
int _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC);
1212

1313
#endif
1414

src/current_sense/hardware_specific/stm32/stm32f1/stm32f1_mcu.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void* _configureADCLowSide(const void* driver_params, const int pinA, const int
4242
.pins={(int)NOT_SET,(int)NOT_SET,(int)NOT_SET},
4343
.adc_voltage_conv = (_ADC_VOLTAGE_F1) / (_ADC_RESOLUTION_F1)
4444
};
45-
_adc_gpio_init(cs_params, pinA,pinB,pinC);
45+
if(_adc_gpio_init(cs_params, pinA,pinB,pinC) != 0) return SIMPLEFOC_CURRENT_SENSE_INIT_FAILED;
4646
if(_adc_init(cs_params, (STM32DriverParams*)driver_params) != 0) return SIMPLEFOC_CURRENT_SENSE_INIT_FAILED;
4747
return cs_params;
4848
}

src/current_sense/hardware_specific/stm32/stm32f4/stm32f4_hal.cpp

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@
99

1010
ADC_HandleTypeDef hadc;
1111

12+
/**
13+
* Function initializing the ADC and the injected channels for the low-side current sensing
14+
*
15+
* @param cs_params - current sense parameters
16+
* @param driver_params - driver parameters
17+
*
18+
* @return int - 0 if success
19+
*/
1220
int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* driver_params)
1321
{
1422
ADC_InjectionConfTypeDef sConfigInjected;
@@ -145,21 +153,35 @@ int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* drive
145153
return 0;
146154
}
147155

148-
void _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC)
156+
/**
157+
* Function to initialize the ADC GPIO pins
158+
*
159+
* @param cs_params current sense parameters
160+
* @param pinA pin number for phase A
161+
* @param pinB pin number for phase B
162+
* @param pinC pin number for phase C
163+
* @return int 0 if success, -1 if error
164+
*/
165+
int _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC)
149166
{
150-
uint8_t cnt = 0;
151-
if(_isset(pinA)){
152-
pinmap_pinout(analogInputToPinName(pinA), PinMap_ADC);
153-
cs_params->pins[cnt++] = pinA;
154-
}
155-
if(_isset(pinB)){
156-
pinmap_pinout(analogInputToPinName(pinB), PinMap_ADC);
157-
cs_params->pins[cnt++] = pinB;
158-
}
159-
if(_isset(pinC)){
160-
pinmap_pinout(analogInputToPinName(pinC), PinMap_ADC);
161-
cs_params->pins[cnt] = pinC;
167+
int pins[3] = {pinA, pinB, pinC};
168+
const char* port_names[3] = {"A", "B", "C"};
169+
for(int i=0; i<3; i++){
170+
if(_isset(pins[i])){
171+
// check if pin is an analog pin
172+
if(pinmap_peripheral(analogInputToPinName(pins[i]), PinMap_ADC) == NP){
173+
#ifdef SIMPLEFOC_STM32_DEBUG
174+
SimpleFOCDebug::print("STM32-CS: ERR: Pin ");
175+
SimpleFOCDebug::print(port_names[i]);
176+
SimpleFOCDebug::println(" does not belong to any ADC!");
177+
#endif
178+
return -1;
179+
}
180+
pinmap_pinout(analogInputToPinName(pins[i]), PinMap_ADC);
181+
cs_params->pins[i] = pins[i];
182+
}
162183
}
184+
return 0;
163185
}
164186

165187
extern "C" {

src/current_sense/hardware_specific/stm32/stm32f4/stm32f4_hal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include "stm32f4_utils.h"
1010

1111
int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* driver_params);
12-
void _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC);
12+
int _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC);
1313

1414
#endif
1515

src/current_sense/hardware_specific/stm32/stm32f4/stm32f4_mcu.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ void* _configureADCLowSide(const void* driver_params, const int pinA, const int
3434
.pins={(int)NOT_SET,(int)NOT_SET,(int)NOT_SET},
3535
.adc_voltage_conv = (_ADC_VOLTAGE_F4) / (_ADC_RESOLUTION_F4)
3636
};
37-
_adc_gpio_init(cs_params, pinA,pinB,pinC);
37+
if(_adc_gpio_init(cs_params, pinA,pinB,pinC) != 0) return SIMPLEFOC_CURRENT_SENSE_INIT_FAILED;
3838
if(_adc_init(cs_params, (STM32DriverParams*)driver_params) != 0) return SIMPLEFOC_CURRENT_SENSE_INIT_FAILED;
3939
return cs_params;
4040
}

src/current_sense/hardware_specific/stm32/stm32f7/stm32f7_hal.cpp

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@
99

1010
ADC_HandleTypeDef hadc;
1111

12+
/**
13+
* Function initializing the ADC and the injected channels for the low-side current sensing
14+
*
15+
* @param cs_params - current sense parameters
16+
* @param driver_params - driver parameters
17+
*
18+
* @return int - 0 if success
19+
*/
1220
int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* driver_params)
1321
{
1422
ADC_InjectionConfTypeDef sConfigInjected;
@@ -159,21 +167,36 @@ int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* drive
159167
return 0;
160168
}
161169

162-
void _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC)
170+
171+
/**
172+
* Function to initialize the ADC GPIO pins
173+
*
174+
* @param cs_params current sense parameters
175+
* @param pinA pin number for phase A
176+
* @param pinB pin number for phase B
177+
* @param pinC pin number for phase C
178+
* @return int 0 if success, -1 if error
179+
*/
180+
int _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC)
163181
{
164-
uint8_t cnt = 0;
165-
if(_isset(pinA)){
166-
pinmap_pinout(analogInputToPinName(pinA), PinMap_ADC);
167-
cs_params->pins[cnt++] = pinA;
168-
}
169-
if(_isset(pinB)){
170-
pinmap_pinout(analogInputToPinName(pinB), PinMap_ADC);
171-
cs_params->pins[cnt++] = pinB;
172-
}
173-
if(_isset(pinC)){
174-
pinmap_pinout(analogInputToPinName(pinC), PinMap_ADC);
175-
cs_params->pins[cnt] = pinC;
182+
int pins[3] = {pinA, pinB, pinC};
183+
const char* port_names[3] = {"A", "B", "C"};
184+
for(int i=0; i<3; i++){
185+
if(_isset(pins[i])){
186+
// check if pin is an analog pin
187+
if(pinmap_peripheral(analogInputToPinName(pins[i]), PinMap_ADC) == NP){
188+
#ifdef SIMPLEFOC_STM32_DEBUG
189+
SimpleFOCDebug::print("STM32-CS: ERR: Pin ");
190+
SimpleFOCDebug::print(port_names[i]);
191+
SimpleFOCDebug::println(" does not belong to any ADC!");
192+
#endif
193+
return -1;
194+
}
195+
pinmap_pinout(analogInputToPinName(pins[i]), PinMap_ADC);
196+
cs_params->pins[i] = pins[i];
197+
}
176198
}
199+
return 0;
177200
}
178201

179202
#ifdef SIMPLEFOC_STM32_ADC_INTERRUPT

src/current_sense/hardware_specific/stm32/stm32f7/stm32f7_hal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88
#include "stm32f7_utils.h"
99

1010
int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* driver_params);
11-
void _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC);
11+
int _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC);
1212

1313
#endif

src/current_sense/hardware_specific/stm32/stm32f7/stm32f7_mcu.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ void* _configureADCLowSide(const void* driver_params, const int pinA, const int
2828
.pins={(int)NOT_SET,(int)NOT_SET,(int)NOT_SET},
2929
.adc_voltage_conv = (_ADC_VOLTAGE) / (_ADC_RESOLUTION)
3030
};
31-
_adc_gpio_init(cs_params, pinA,pinB,pinC);
31+
if(_adc_gpio_init(cs_params, pinA,pinB,pinC) != 0) return SIMPLEFOC_CURRENT_SENSE_INIT_FAILED;
3232
if(_adc_init(cs_params, (STM32DriverParams*)driver_params) != 0) return SIMPLEFOC_CURRENT_SENSE_INIT_FAILED;
3333
return cs_params;
3434
}

src/current_sense/hardware_specific/stm32/stm32g4/stm32g4_hal.cpp

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@
88

99
ADC_HandleTypeDef hadc;
1010

11+
/**
12+
* Function initializing the ADC and the injected channels for the low-side current sensing
13+
*
14+
* @param cs_params - current sense parameters
15+
* @param driver_params - driver parameters
16+
*
17+
* @return int - 0 if success
18+
*/
1119
int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* driver_params)
1220
{
1321
ADC_InjectionConfTypeDef sConfigInjected;
@@ -195,23 +203,38 @@ int _adc_init(Stm32CurrentSenseParams* cs_params, const STM32DriverParams* drive
195203
return 0;
196204
}
197205

198-
void _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC)
206+
/**
207+
* Function to initialize the ADC GPIO pins
208+
*
209+
* @param cs_params current sense parameters
210+
* @param pinA pin number for phase A
211+
* @param pinB pin number for phase B
212+
* @param pinC pin number for phase C
213+
* @return int 0 if success, -1 if error
214+
*/
215+
int _adc_gpio_init(Stm32CurrentSenseParams* cs_params, const int pinA, const int pinB, const int pinC)
199216
{
200-
uint8_t cnt = 0;
201-
if(_isset(pinA)){
202-
pinmap_pinout(analogInputToPinName(pinA), PinMap_ADC);
203-
cs_params->pins[cnt++] = pinA;
204-
}
205-
if(_isset(pinB)){
206-
pinmap_pinout(analogInputToPinName(pinB), PinMap_ADC);
207-
cs_params->pins[cnt++] = pinB;
208-
}
209-
if(_isset(pinC)){
210-
pinmap_pinout(analogInputToPinName(pinC), PinMap_ADC);
211-
cs_params->pins[cnt] = pinC;
217+
int pins[3] = {pinA, pinB, pinC};
218+
const char* port_names[3] = {"A", "B", "C"};
219+
for(int i=0; i<3; i++){
220+
if(_isset(pins[i])){
221+
// check if pin is an analog pin
222+
if(pinmap_peripheral(analogInputToPinName(pins[i]), PinMap_ADC) == NP){
223+
#ifdef SIMPLEFOC_STM32_DEBUG
224+
SimpleFOCDebug::print("STM32-CS: ERR: Pin ");
225+
SimpleFOCDebug::print(port_names[i]);
226+
SimpleFOCDebug::println(" does not belong to any ADC!");
227+
#endif
228+
return -1;
229+
}
230+
pinmap_pinout(analogInputToPinName(pins[i]), PinMap_ADC);
231+
cs_params->pins[i] = pins[i];
232+
}
212233
}
234+
return 0;
213235
}
214236

237+
215238
extern "C" {
216239
void ADC1_2_IRQHandler(void)
217240
{

0 commit comments

Comments
 (0)