pins: add inlineable pin changing methods
This commit is contained in:
parent
a84b8f4bb9
commit
3c00150306
|
@ -40,10 +40,10 @@ void USBDeviceClass::reenumerate() {
|
|||
volatile unsigned int i;
|
||||
|
||||
#ifdef USB_DISC_PIN
|
||||
pinMode(USB_DISC_PIN, OUTPUT);
|
||||
digitalWrite(USB_DISC_PIN, HIGH);
|
||||
pinModeConst(USB_DISC_PIN, OUTPUT);
|
||||
digitalWriteConst(USB_DISC_PIN, HIGH);
|
||||
for(i=0;i<512;i++);
|
||||
digitalWrite(USB_DISC_PIN, LOW);
|
||||
digitalWriteConst(USB_DISC_PIN, LOW);
|
||||
#else
|
||||
//pinMode(USBDP_PIN, OUTPUT);
|
||||
//digitalWrite(USBDP_PIN, LOW);
|
||||
|
@ -51,11 +51,11 @@ void USBDeviceClass::reenumerate() {
|
|||
//digitalWrite(USBDP_PIN, HIGH);
|
||||
|
||||
|
||||
pinMode(PA12, OUTPUT);
|
||||
digitalWrite(PA12, LOW);
|
||||
pinModeConst(PA12, OUTPUT);
|
||||
digitalWriteConst(PA12, LOW);
|
||||
//HAL_Delay(1000);
|
||||
for(i=0;i<1512;i++){};
|
||||
pinMode(PA12, INPUT);
|
||||
pinModeConst(PA12, INPUT);
|
||||
//digitalWrite(PA12, HIGH);
|
||||
//HAL_Delay(1000);
|
||||
for(i=0;i<512;i++){};
|
||||
|
|
|
@ -91,6 +91,65 @@ inline int digitalRead(uint8_t pin) {
|
|||
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////
|
||||
// The following functions are meant to be used with compile time constant parameters
|
||||
|
||||
#define PIN(a, b) { GPIO##a , GPIO_PIN_##b }
|
||||
|
||||
static const stm32_port_pin_type variant_pin_list_static[] = {
|
||||
VARIANT_PIN_LIST
|
||||
};
|
||||
#undef PIN
|
||||
|
||||
inline void digitalWriteConst(uint8_t pin, uint8_t value) {
|
||||
HAL_GPIO_WritePin(variant_pin_list_static[pin].port, variant_pin_list_static[pin].pin_mask, value ? GPIO_PIN_SET : GPIO_PIN_RESET);
|
||||
}
|
||||
|
||||
inline int digitalReadConst(uint8_t pin) {
|
||||
return HAL_GPIO_ReadPin(variant_pin_list_static[pin].port, variant_pin_list_static[pin].pin_mask);
|
||||
}
|
||||
inline void pinModeConst(uint8_t pin, uint8_t mode) {
|
||||
stm32_port_pin_type port_pin = variant_pin_list_static[pin];
|
||||
|
||||
stm32GpioClockEnable(port_pin.port);
|
||||
|
||||
GPIO_InitTypeDef init;
|
||||
|
||||
init.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
init.Pin = port_pin.pin_mask;
|
||||
|
||||
switch ( mode ) {
|
||||
case INPUT:
|
||||
init.Mode = GPIO_MODE_INPUT;
|
||||
init.Pull = GPIO_NOPULL;
|
||||
break;
|
||||
|
||||
case INPUT_PULLUP:
|
||||
init.Mode = GPIO_MODE_INPUT;
|
||||
init.Pull = GPIO_PULLUP;
|
||||
break;
|
||||
|
||||
case INPUT_PULLDOWN:
|
||||
init.Mode = GPIO_MODE_INPUT;
|
||||
init.Pull = GPIO_PULLDOWN;
|
||||
break;
|
||||
|
||||
case OUTPUT:
|
||||
init.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
init.Pull = GPIO_NOPULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
HAL_GPIO_Init(port_pin.port, &init);
|
||||
|
||||
}
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue