cleaning up the files and making a board file for the stm32F407VE

This commit is contained in:
hoogendijkta 2019-02-22 16:39:07 +01:00
parent 3f074551c7
commit cc6d3e4147
5 changed files with 1565 additions and 385 deletions

View File

@ -1,6 +1,7 @@
#ifndef STM32_H
#define STM32_H
#if defined(CORE_STM32)
#if defined(CORE_STM32) && !defined(ARDUINO_BLACK_F407VE)
#if defined(STM32F4)
//These should really be in the stm32GENERIC libs, but for somereason they only have timers 1-4
// #include <stm32_TIM_variant_11.h>

View File

@ -1,4 +1,4 @@
#if defined(CORE_STM32)
#if defined(CORE_STM32) && !defined(ARDUINO_BLACK_F407VE)
#include "board_stm32.h"
#include "globals.h"
#include "auxiliaries.h"
@ -22,10 +22,9 @@
#else
#include "HardwareTimer.h"
#endif
int EmptyIRQCallbackCnt;
extern void oneMSIntervalIRQ(stimer_t *Timer){oneMSInterval();}
extern void EmptyIRQCallback(stimer_t *Timer, uint32_t channel){EmptyIRQCallbackCnt++;}
extern void EmptyIRQCallback(stimer_t *Timer, uint32_t channel){}
@ -62,6 +61,7 @@ void initBoard()
//This must happen at the end of the idle init
TimerPulseInit(&HardwareTimers_1, 0xFFFF, 0, EmptyIRQCallback);
setTimerPrescalerRegister(&HardwareTimers_1, (uint32_t)(getTimerClkFreq(HardwareTimers_1.timer) / (500000)) - 1);
if(idle_pwm_max_count > 0) { attachIntHandleOC(&HardwareTimers_1, idleInterrupt, 4, 0);} //on first flash the configPage4.iacAlgorithm is invalid
//Timer1.setMode(4, TIMER_OUTPUT_COMPARE);
//timer_set_mode(TIMER1, 4, TIMER_OUTPUT_COMPARE;
@ -100,54 +100,29 @@ void initBoard()
if(idle_pwm_max_count > 0) { attachIntHandleOC(&HardwareTimers_1, boostInterrupt, 2, 0);}
if(vvt_pwm_max_count > 0) { attachIntHandleOC(&HardwareTimers_1, vvtInterrupt, 3, 0);}
// Timer1.resume();
/*
***********************************************************************************************************
* Schedules
*/
#if defined(ARDUINO_ARCH_STM32) // STM32GENERIC core
//see https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/754bc2969921f1ef262bd69e7faca80b19db7524/STM32F1/system/libmaple/include/libmaple/timer.h#L444
// Timer1.setPrescaleFactor((HAL_RCC_GetHCLKFreq() * 2U)-1); //2us resolution
// Timer2.setPrescaleFactor((HAL_RCC_GetHCLKFreq() * 2U)-1); //2us resolution
// Timer3.setPrescaleFactor((HAL_RCC_GetHCLKFreq() * 2U)-1); //2us resolution
#else //libmaple core aka STM32DUINO
//see https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/754bc2969921f1ef262bd69e7faca80b19db7524/STM32F1/system/libmaple/include/libmaple/timer.h#L444
#if defined (STM32F1) || defined(__STM32F1__)
//(CYCLES_PER_MICROSECOND == 72, APB2 at 72MHz, APB1 at 36MHz).
//Timer2 to 4 is on APB1, Timer1 on APB2. http://www.st.com/resource/en/datasheet/stm32f103cb.pdf sheet 12
Timer1.setPrescaleFactor((72 * 2U)-1); //2us resolution
Timer2.setPrescaleFactor((36 * 2U)-1); //2us resolution
Timer3.setPrescaleFactor((36 * 2U)-1); //2us resolution
#elif defined(STM32F4)
//(CYCLES_PER_MICROSECOND == 168, APB2 at 84MHz, APB1 at 42MHz).
//Timer2 to 14 is on APB1, Timers 1, 8, 9 and 10 on APB2. http://www.st.com/resource/en/datasheet/stm32f407vg.pdf sheet 120
Timer1.setPrescaleFactor((84 * 2U)-1); //2us resolution
Timer2.setPrescaleFactor((42 * 2U)-1); //2us resolution
Timer3.setPrescaleFactor((42 * 2U)-1); //2us resolution
#endif
#endif
TimerPulseInit(&HardwareTimers_3, 0xFFFF, 0, EmptyIRQCallback);
setTimerPrescalerRegister(&HardwareTimers_3, (uint32_t)(getTimerClkFreq(HardwareTimers_3.timer) / (1000000)) - 1);
attachIntHandleOC(&HardwareTimers_3, fuelSchedule1Interrupt, 1, 0);
attachIntHandleOC(&HardwareTimers_3, fuelSchedule2Interrupt, 2, 0);
attachIntHandleOC(&HardwareTimers_3, fuelSchedule3Interrupt, 3, 0);
attachIntHandleOC(&HardwareTimers_3, fuelSchedule4Interrupt, 4, 0);
TimerPulseInit(&HardwareTimers_2, 0xFFFF, 0, EmptyIRQCallback);
setTimerPrescalerRegister(&HardwareTimers_2, (uint32_t)(getTimerClkFreq(HardwareTimers_2.timer) / (1000000)) - 1);
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule1Interrupt, 1, 0);
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule2Interrupt, 2, 0);
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule3Interrupt, 3, 0);
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule4Interrupt, 4, 0);
// Timer1.setMode(1, TIMER_OUTPUT_COMPARE);
//Attach interupt functions
//Injection
TimerPulseInit(&HardwareTimers_5, 0xFFFF, 0, EmptyIRQCallback);
setTimerPrescalerRegister(&HardwareTimers_5, (uint32_t)(getTimerClkFreq(HardwareTimers_5.timer) / (1000000)) - 1);
#if (INJ_CHANNELS >= 5)
attachIntHandleOC(&HardwareTimers_5, fuelSchedule5Interrupt, 1, 0);
//Timer5.attachInterrupt(1, fuelSchedule5Interrupt);
//Timer5.attachInterrupt(1, fuelSchedule5Interrupt);
#endif
#if (INJ_CHANNELS >= 6)
attachIntHandleOC(&HardwareTimers_5, fuelSchedule6Interrupt, 2, 0);
@ -163,6 +138,7 @@ void initBoard()
#endif
TimerPulseInit(&HardwareTimers_4, 0xFFFF, 0, EmptyIRQCallback);
setTimerPrescalerRegister(&HardwareTimers_4, (uint32_t)(getTimerClkFreq(HardwareTimers_4.timer) / (1000000)) - 1);
#if (IGN_CHANNELS >= 5)
attachIntHandleOC(&HardwareTimers_4, ignitionSchedule5Interrupt, 1, 0);
//Timer4.attachInterrupt(1, ignitionSchedule5Interrupt);
@ -187,117 +163,16 @@ uint16_t freeRam()
char top = 't';
return &top - reinterpret_cast<char*>(sbrk(0));
}
//pinmapping the STM32F407 for different boards, at this moment no board is desgined.
//All boards are set to the default just to be sure.
void setPinMapping(byte boardID)
{
switch (boardID)
{
case 0:
#ifndef SMALL_FLASH_MODE //No support for bluepill here anyway
//Pin mappings as per the v0.1 shield
pinInjector1 = 8; //Output pin injector 1 is on
pinInjector2 = 9; //Output pin injector 2 is on
pinInjector3 = 11; //Output pin injector 3 is on
pinInjector4 = 10; //Output pin injector 4 is on
pinInjector5 = 12; //Output pin injector 5 is on
pinCoil1 = 6; //Pin for coil 1
pinCoil2 = 7; //Pin for coil 2
pinCoil3 = 12; //Pin for coil 3
pinCoil4 = 13; //Pin for coil 4
pinCoil5 = 14; //Pin for coil 5
pinTrigger = 2; //The CAS pin
pinTrigger2 = 3; //The CAS pin
pinTPS = A0; //TPS input pin
pinMAP = A1; //MAP sensor pin
pinIAT = A2; //IAT sensor pin
pinCLT = A3; //CLS sensor pin
pinO2 = A4; //O2 Sensor pin
pinIdle1 = 46; //Single wire idle control
pinIdle2 = 47; //2 wire idle control
pinStepperDir = 16; //Direction pin for DRV8825 driver
pinStepperStep = 17; //Step pin for DRV8825 driver
pinFan = 47; //Pin for the fan output
pinFuelPump = 4; //Fuel pump output
pinTachOut = 49; //Tacho output pin
pinFlex = 19; // Flex sensor (Must be external interrupt enabled)
pinResetControl = 43; //Reset control output
#endif
break;
case 1:
#ifndef SMALL_FLASH_MODE //No support for bluepill here anyway
//Pin mappings as per the v0.2 shield
pinInjector1 = 8; //Output pin injector 1 is on
pinInjector2 = 9; //Output pin injector 2 is on
pinInjector3 = 10; //Output pin injector 3 is on
pinInjector4 = 11; //Output pin injector 4 is on
pinInjector5 = 12; //Output pin injector 5 is on
pinCoil1 = 28; //Pin for coil 1
pinCoil2 = 24; //Pin for coil 2
pinCoil3 = 40; //Pin for coil 3
pinCoil4 = 36; //Pin for coil 4
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
pinTrigger = 20; //The CAS pin
pinTrigger2 = 21; //The Cam Sensor pin
pinTPS = A2; //TPS input pin
pinMAP = A3; //MAP sensor pin
pinIAT = A0; //IAT sensor pin
pinCLT = A1; //CLS sensor pin
pinO2 = A8; //O2 Sensor pin
pinBat = A4; //Battery reference voltage pin
pinDisplayReset = 48; // OLED reset pin
pinTachOut = 49; //Tacho output pin
pinIdle1 = 30; //Single wire idle control
pinIdle2 = 31; //2 wire idle control
pinStepperDir = 16; //Direction pin for DRV8825 driver
pinStepperStep = 17; //Step pin for DRV8825 driver
pinFan = 47; //Pin for the fan output
pinFuelPump = 4; //Fuel pump output
pinFlex = 2; // Flex sensor (Must be external interrupt enabled)
pinResetControl = 43; //Reset control output
break;
#endif
case 2:
#ifndef SMALL_FLASH_MODE //No support for bluepill here anyway
//Pin mappings as per the v0.3 shield
pinInjector1 = 8; //Output pin injector 1 is on
pinInjector2 = 9; //Output pin injector 2 is on
pinInjector3 = 10; //Output pin injector 3 is on
pinInjector4 = 11; //Output pin injector 4 is on
pinInjector5 = 12; //Output pin injector 5 is on
pinCoil1 = 28; //Pin for coil 1
pinCoil2 = 24; //Pin for coil 2
pinCoil3 = 40; //Pin for coil 3
pinCoil4 = 36; //Pin for coil 4
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
pinTrigger = 19; //The CAS pin
pinTrigger2 = 18; //The Cam Sensor pin
pinTPS = A2;//TPS input pin
pinMAP = A3; //MAP sensor pin
pinIAT = A0; //IAT sensor pin
pinCLT = A1; //CLS sensor pin
pinO2 = A8; //O2 Sensor pin
pinBat = A4; //Battery reference voltage pin
pinDisplayReset = 48; // OLED reset pin
pinTachOut = 49; //Tacho output pin
pinIdle1 = 5; //Single wire idle control
pinIdle2 = 53; //2 wire idle control
pinBoost = 7; //Boost control
pinVVT_1 = 6; //Default VVT output
pinFuelPump = 4; //Fuel pump output
pinStepperDir = 16; //Direction pin for DRV8825 driver
pinStepperStep = 17; //Step pin for DRV8825 driver
pinStepperEnable = 26; //Enable pin for DRV8825
pinFan = A13; //Pin for the fan output
pinLaunch = 51; //Can be overwritten below
pinFlex = 2; // Flex sensor (Must be external interrupt enabled)
pinResetControl = 50; //Reset control output
#endif
break;
case 3:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
@ -310,6 +185,172 @@ void setPinMapping(byte boardID)
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
case 1:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
case 2:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
case 3:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
@ -388,238 +429,338 @@ void setPinMapping(byte boardID)
break;
case 10:
#ifndef SMALL_FLASH_MODE //No support for bluepill here anyway
//Pin mappings for user turtanas PCB
pinInjector1 = 4; //Output pin injector 1 is on
pinInjector2 = 5; //Output pin injector 2 is on
pinInjector3 = 6; //Output pin injector 3 is on
pinInjector4 = 7; //Output pin injector 4 is on
pinInjector5 = 8; //Placeholder only - NOT USED
pinInjector6 = 9; //Placeholder only - NOT USED
pinInjector7 = 10; //Placeholder only - NOT USED
pinInjector8 = 11; //Placeholder only - NOT USED
pinCoil1 = 24; //Pin for coil 1
pinCoil2 = 28; //Pin for coil 2
pinCoil3 = 36; //Pin for coil 3
pinCoil4 = 40; //Pin for coil 4
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
pinTrigger = 18; //The CAS pin
pinTrigger2 = 19; //The Cam Sensor pin
pinTPS = A2;//TPS input pin
pinMAP = A3; //MAP sensor pin
pinMAP2 = A8; //MAP2 sensor pin
pinIAT = A0; //IAT sensor pin
pinCLT = A1; //CLS sensor pin
pinO2 = A4; //O2 Sensor pin
pinBat = A7; //Battery reference voltage pin
pinDisplayReset = 48; // OLED reset pin
pinSpareTemp1 = A6;
pinSpareTemp2 = A5;
pinTachOut = 41; //Tacho output pin transistori puuttuu 2n2222 tähän ja 1k 12v
pinFuelPump = 42; //Fuel pump output 2n2222
pinFan = 47; //Pin for the fan output
pinTachOut = 49; //Tacho output pin
pinFlex = 2; // Flex sensor (Must be external interrupt enabled)
pinResetControl = 26; //Reset control output
//Pin mappings as per the v0.4 shield
#endif
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
case 20:
// #ifndef SMALL_FLASH_MODE //No support for bluepill here anyway
// //Pin mappings as per the Plazomat In/Out shields Rev 0.1
// pinInjector1 = 8; //Output pin injector 1 is on
// pinInjector2 = 9; //Output pin injector 2 is on
// pinInjector3 = 10; //Output pin injector 3 is on
// pinInjector4 = 11; //Output pin injector 4 is on
// pinInjector5 = 12; //Output pin injector 5 is on
// pinCoil1 = 28; //Pin for coil 1
// pinCoil2 = 24; //Pin for coil 2
// pinCoil3 = 40; //Pin for coil 3
// pinCoil4 = 36; //Pin for coil 4
// pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
// pinSpareOut1 = 4; //Spare LSD Output 1(PWM)
// pinSpareOut2 = 5; //Spare LSD Output 2(PWM)
// pinSpareOut3 = 6; //Spare LSD Output 3(PWM)
// pinSpareOut4 = 7; //Spare LSD Output 4(PWM)
// pinSpareOut5 = 50; //Spare LSD Output 5(digital)
// pinSpareOut6 = 52; //Spare LSD Output 6(digital)
// pinTrigger = 20; //The CAS pin
// pinTrigger2 = 21; //The Cam Sensor pin
// pinSpareTemp2 = A15; //spare Analog input 2
// pinSpareTemp1 = A14; //spare Analog input 1
// pinO2 = A8; //O2 Sensor pin
// pinBat = A4; //Battery reference voltage pin
// pinMAP = A3; //MAP sensor pin
// pinTPS = A2;//TPS input pin
// pinCLT = A1; //CLS sensor pin
// pinIAT = A0; //IAT sensor pin
// pinFan = 47; //Pin for the fan output
// pinFuelPump = 4; //Fuel pump output
// pinTachOut = 49; //Tacho output pin
// pinResetControl = 26; //Reset control output
// #endif
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
case 30:
#ifndef SMALL_FLASH_MODE //No support for bluepill here anyway
//Pin mappings as per the dazv6 shield
pinInjector1 = 8; //Output pin injector 1 is on
pinInjector2 = 9; //Output pin injector 2 is on
pinInjector3 = 10; //Output pin injector 3 is on
pinInjector4 = 11; //Output pin injector 4 is on
pinInjector5 = 12; //Output pin injector 5 is on
pinCoil1 = 40; //Pin for coil 1
pinCoil2 = 38; //Pin for coil 2
pinCoil3 = 50; //Pin for coil 3
pinCoil4 = 52; //Pin for coil 4
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
pinTrigger = 19; //The CAS pin
pinTrigger2 = 18; //The Cam Sensor pin
pinTrigger3 = 17; // cam sensor 2 pin
pinTPS = A2;//TPS input pin
pinMAP = A3; //MAP sensor pin
pinIAT = A0; //IAT sensor pin
pinCLT = A1; //CLS sensor pin
pinO2 = A8; //O2 Sensor pin
pinO2_2 = A9; //O2 sensor pin (second sensor)
pinBat = A4; //Battery reference voltage pin
pinDisplayReset = 48; // OLED reset pin
pinTachOut = 49; //Tacho output pin
pinIdle1 = 5; //Single wire idle control
pinFuelPump = 45; //Fuel pump output
pinStepperDir = 20; //Direction pin for DRV8825 driver
pinStepperStep = 21; //Step pin for DRV8825 driver
pinSpareHOut1 = 4; // high current output spare1
pinSpareHOut2 = 6; // high current output spare2
pinBoost = 7;
pinSpareLOut1 = 43; //low current output spare1
pinSpareLOut2 = 47;
pinSpareLOut3 = 49;
pinSpareLOut4 = 51;
pinSpareLOut5 = 53;
pinFan = 47; //Pin for the fan output
#endif
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
case 40:
//Pin mappings as per the NO2C shield
pinInjector1 = 8; //Output pin injector 1 is on
pinInjector2 = 9; //Output pin injector 2 is on
pinInjector3 = 11; //Output pin injector 3 is on - NOT USED
pinInjector4 = 12; //Output pin injector 4 is on - NOT USED
pinInjector5 = 13; //Placeholder only - NOT USED
pinCoil1 = 23; //Pin for coil 1
pinCoil2 = 22; //Pin for coil 2
pinCoil3 = 2; //Pin for coil 3 - ONLY WITH DB2
pinCoil4 = 3; //Pin for coil 4 - ONLY WITH DB2
pinCoil5 = 46; //Placeholder only - NOT USED
pinTrigger = 19; //The CAS pin
pinTrigger2 = 18; //The Cam Sensor pin
pinTPS = A3; //TPS input pin
pinMAP = A0; //MAP sensor pin
pinIAT = A5; //IAT sensor pin
pinCLT = A4; //CLT sensor pin
pinO2 = A2; //O2 sensor pin
pinBat = A1; //Battery reference voltage pin
pinBaro = A6; //Baro sensor pin - ONLY WITH DB
pinSpareTemp1 = A7; //spare Analog input 1 - ONLY WITH DB
pinDisplayReset = 48; // OLED reset pin - NOT USED
pinTachOut = 38; //Tacho output pin
pinIdle1 = 5; //Single wire idle control
pinIdle2 = 47; //2 wire idle control - NOT USED
pinBoost = 7; //Boost control
pinVVT_1 = 6; //Default VVT output
pinFuelPump = 4; //Fuel pump output
pinStepperDir = 25; //Direction pin for DRV8825 driver
pinStepperStep = 24; //Step pin for DRV8825 driver
pinStepperEnable = 27; //Enable pin for DRV8825 driver
pinLaunch = 10; //Can be overwritten below
pinFlex = 20; // Flex sensor (Must be external interrupt enabled) - ONLY WITH DB
pinFan = 30; //Pin for the fan output - ONLY WITH DB
pinSpareLOut1 = 32; //low current output spare1 - ONLY WITH DB
pinSpareLOut2 = 34; //low current output spare2 - ONLY WITH DB
pinSpareLOut3 = 36; //low current output spare3 - ONLY WITH DB
pinResetControl = 26; //Reset control output
break;
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
case 41:
#ifndef SMALL_FLASH_MODE //No support for bluepill here anyway
//Pin mappings as per the UA4C shield
pinInjector1 = 8; //Output pin injector 1 is on
pinInjector2 = 7; //Output pin injector 2 is on
pinInjector3 = 6; //Output pin injector 3 is on
pinInjector4 = 5; //Output pin injector 4 is on
pinInjector5 = 45; //Output pin injector 5 is on PLACEHOLDER value for now
pinCoil1 = 35; //Pin for coil 1
pinCoil2 = 36; //Pin for coil 2
pinCoil3 = 33; //Pin for coil 3
pinCoil4 = 34; //Pin for coil 4
pinCoil5 = 44; //Pin for coil 5 PLACEHOLDER value for now
pinTrigger = 19; //The CAS pin
pinTrigger2 = 18; //The Cam Sensor pin
pinFlex = 20; // Flex sensor
pinTPS = A3; //TPS input pin
pinMAP = A0; //MAP sensor pin
pinBaro = A7; //Baro sensor pin
pinIAT = A5; //IAT sensor pin
pinCLT = A4; //CLS sensor pin
pinO2 = A1; //O2 Sensor pin
pinO2_2 = A9; //O2 sensor pin (second sensor)
pinBat = A2; //Battery reference voltage pin
pinSpareTemp1 = A8; //spare Analog input 1
pinLaunch = 37; //Can be overwritten below
pinDisplayReset = 48; // OLED reset pin PLACEHOLDER value for now
pinTachOut = 22; //Tacho output pin
pinIdle1 = 9; //Single wire idle control
pinIdle2 = 10; //2 wire idle control
pinFuelPump = 23; //Fuel pump output
pinVVT_1 = 11; //Default VVT output
pinStepperDir = 32; //Direction pin for DRV8825 driver
pinStepperStep = 31; //Step pin for DRV8825 driver
pinStepperEnable = 30; //Enable pin for DRV8825 driver
pinBoost = 12; //Boost control
pinSpareLOut1 = 26; //low current output spare1
pinSpareLOut2 = 27; //low current output spare2
pinSpareLOut3 = 28; //low current output spare3
pinSpareLOut4 = 29; //low current output spare4
pinFan = 24; //Pin for the fan output
pinResetControl = 46; //Reset control output PLACEHOLDER value for now
#endif
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
default:
#ifndef SMALL_FLASH_MODE //No support for bluepill here anyway
//Pin mappings as per the v0.2 shield
pinInjector1 = 8; //Output pin injector 1 is on
pinInjector2 = 9; //Output pin injector 2 is on
pinInjector3 = 10; //Output pin injector 3 is on
pinInjector4 = 11; //Output pin injector 4 is on
pinInjector5 = 12; //Output pin injector 5 is on
pinCoil1 = 28; //Pin for coil 1
pinCoil2 = 24; //Pin for coil 2
pinCoil3 = 40; //Pin for coil 3
pinCoil4 = 36; //Pin for coil 4
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
pinTrigger = 20; //The CAS pin
pinTrigger2 = 21; //The Cam Sensor pin
pinTPS = A2; //TPS input pin
pinMAP = A3; //MAP sensor pin
pinIAT = A0; //IAT sensor pin
pinCLT = A1; //CLS sensor pin
pinO2 = A8; //O2 Sensor pin
pinBat = A4; //Battery reference voltage pin
pinStepperDir = 16; //Direction pin for DRV8825 driver
pinStepperStep = 17; //Step pin for DRV8825 driver
pinDisplayReset = 48; // OLED reset pin
pinFan = 47; //Pin for the fan output
pinFuelPump = 4; //Fuel pump output
pinTachOut = 49; //Tacho output pin
pinFlex = 3; // Flex sensor (Must be external interrupt enabled)
pinBoost = 5;
pinIdle1 = 6;
pinResetControl = 43; //Reset control output
#endif
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
}
@ -712,27 +853,15 @@ void setPinMapping(byte boardID)
pump_pin_mask = digitalPinToBitMask(pinFuelPump);
//And for inputs
// #if defined(CORE_STM32)
// #ifndef ARDUINO_ARCH_STM32 //libmaple core aka STM32DUINO
// pinMode(pinMAP, INPUT_ANALOG);
// pinMode(pinO2, INPUT_ANALOG);
// pinMode(pinO2_2, INPUT_ANALOG);
// pinMode(pinTPS, INPUT_ANALOG);
// pinMode(pinIAT, INPUT_ANALOG);
// pinMode(pinCLT, INPUT_ANALOG);
// pinMode(pinBat, INPUT_ANALOG);
// pinMode(pinBaro, INPUT_ANALOG);
// #else
// pinMode(pinMAP, INPUT);
// pinMode(pinO2, INPUT);
// pinMode(pinO2_2, INPUT);
// pinMode(pinTPS, INPUT);
// pinMode(pinIAT, INPUT);
// pinMode(pinCLT, INPUT);
// pinMode(pinBat, INPUT);
// pinMode(pinBaro, INPUT);
// #endif
// #endif
pinMode(pinMAP, INPUT);
pinMode(pinO2, INPUT);
pinMode(pinO2_2, INPUT);
pinMode(pinTPS, INPUT);
pinMode(pinIAT, INPUT);
pinMode(pinCLT, INPUT);
pinMode(pinBat, INPUT);
pinMode(pinBaro, INPUT);
pinMode(pinTrigger, INPUT);
pinMode(pinTrigger2, INPUT);
pinMode(pinTrigger3, INPUT);
@ -760,12 +889,10 @@ void setPinMapping(byte boardID)
triggerSec_pin_port = portInputRegister(digitalPinToPort(pinTrigger2));
triggerSec_pin_mask = digitalPinToBitMask(pinTrigger2);
#if defined(CORE_STM32)
#else
//Set default values
digitalWrite(pinMAP, HIGH);
//digitalWrite(pinO2, LOW);
digitalWrite(pinTPS, LOW);
#endif
//Set default values
digitalWrite(pinMAP, HIGH);
//digitalWrite(pinO2, LOW);
digitalWrite(pinTPS, LOW);
}
#endif

View File

@ -0,0 +1,153 @@
#ifndef STM32F407VE_H
#define STM32F407VE_H
#if defined(ARDUINO_BLACK_F407VE)
/*
***********************************************************************************************************
* General
*/
#define PORT_TYPE uint8_t
#define micros_safe() micros() //timer5 method is not used on anything but AVR, the micros_safe() macro is simply an alias for the normal micros()
#define USE_SERIAL3
void initBoard();
uint16_t freeRam();
// extern void oneMSIntervalIRQ(stimer_t *Timer);
extern void EmptyIRQCallback(stimer_t *Timer, uint32_t channel);
#if defined(USE_STM32GENERIC)
#define Serial Serial1
#endif
/*
***********************************************************************************************************
* Schedules
*/
#define MAX_TIMER_PERIOD 65535 //The longest period of time (in uS) that the timer can permit (IN this case it is 65535 * 2, as each timer tick is 2uS)
#define MAX_TIMER_PERIOD_SLOW 65535 //The longest period of time (in uS) that the timer can permit (IN this case it is 65535 * 2, as each timer tick is 2uS)
#define uS_TO_TIMER_COMPARE(uS) (uS ) //Converts a given number of uS into the required number of timer ticks until that time has passed.
#define uS_TO_TIMER_COMPARE_SLOW(uS) (uS ) //Converts a given number of uS into the required number of timer ticks until that time has passed.
#define FUEL1_COUNTER (TIM3)->CNT
#define FUEL2_COUNTER (TIM3)->CNT
#define FUEL3_COUNTER (TIM3)->CNT
#define FUEL4_COUNTER (TIM3)->CNT
#define FUEL1_COMPARE (TIM3)->CCR1
#define FUEL2_COMPARE (TIM3)->CCR2
#define FUEL3_COMPARE (TIM3)->CCR3
#define FUEL4_COMPARE (TIM3)->CCR4
#define IGN1_COUNTER (TIM2)->CNT
#define IGN2_COUNTER (TIM2)->CNT
#define IGN3_COUNTER (TIM2)->CNT
#define IGN4_COUNTER (TIM2)->CNT
#define IGN1_COMPARE (TIM2)->CCR1
#define IGN2_COMPARE (TIM2)->CCR2
#define IGN3_COMPARE (TIM2)->CCR3
#define IGN4_COMPARE (TIM2)->CCR4
#define FUEL5_COUNTER (TIM5)->CNT
#define FUEL6_COUNTER (TIM5)->CNT
#define FUEL7_COUNTER (TIM5)->CNT
#define FUEL8_COUNTER (TIM5)->CNT
#define FUEL5_COMPARE (TIM5)->CCR1
#define FUEL6_COMPARE (TIM5)->CCR2
#define FUEL7_COMPARE (TIM5)->CCR3
#define FUEL8_COMPARE (TIM5)->CCR4
#define IGN5_COUNTER (TIM4)->CNT
#define IGN6_COUNTER (TIM4)->CNT
#define IGN7_COUNTER (TIM4)->CNT
#define IGN8_COUNTER (TIM4)->CNT
#define IGN5_COMPARE (TIM4)->CCR1
#define IGN6_COMPARE (TIM4)->CCR2
#define IGN7_COMPARE (TIM4)->CCR3
#define IGN8_COMPARE (TIM4)->CCR4
//https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/754bc2969921f1ef262bd69e7faca80b19db7524/STM32F1/system/libmaple/include/libmaple/timer.h#L444
#define FUEL1_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC1E
#define FUEL2_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC2E
#define FUEL3_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC3E
#define FUEL4_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC4E
#define FUEL1_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC1E
#define FUEL2_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC2E
#define FUEL3_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC3E
#define FUEL4_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC4E
#define IGN1_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC1E
#define IGN2_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC2E
#define IGN3_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC3E
#define IGN4_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC4E
#define IGN1_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC1E
#define IGN2_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC2E
#define IGN3_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC3E
#define IGN4_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC4E
#define FUEL5_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC1E
#define FUEL6_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC2E
#define FUEL7_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC3E
#define FUEL8_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC4E
#define FUEL5_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC1E
#define FUEL6_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC2E
#define FUEL7_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC3E
#define FUEL8_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC4E
#define IGN5_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC1E
#define IGN6_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC2E
#define IGN7_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC3E
#define IGN8_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC4E
#define IGN5_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC1E
#define IGN6_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC2E
#define IGN7_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC3E
#define IGN8_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC4E
/*
***********************************************************************************************************
* Auxilliaries
*/
#define ENABLE_BOOST_TIMER() (TIM1)->CCER |= TIM_CCER_CC2E
#define DISABLE_BOOST_TIMER() (TIM1)->CCER &= ~TIM_CCER_CC2E
#define ENABLE_VVT_TIMER() (TIM1)->CCER |= TIM_CCER_CC3E
#define DISABLE_VVT_TIMER() (TIM1)->CCER &= ~TIM_CCER_CC3E
#define BOOST_TIMER_COMPARE (TIM1)->CCR2
#define BOOST_TIMER_COUNTER (TIM1)->CNT
#define VVT_TIMER_COMPARE (TIM1)->CCR3
#define VVT_TIMER_COUNTER (TIM1)->CNT
/*
***********************************************************************************************************
* Idle
*/
#define IDLE_COUNTER (TIM1)->CNT
#define IDLE_COMPARE (TIM1)->CCR4
#define IDLE_TIMER_ENABLE() (TIM1)->CCER |= TIM_CCER_CC4E
#define IDLE_TIMER_DISABLE() (TIM1)->CCER &= ~TIM_CCER_CC4E
/*
***********************************************************************************************************
* Timers
*/
/*
***********************************************************************************************************
* CAN / Second serial
*/
#endif //CORE_STM32
#endif //STM32_H

View File

@ -0,0 +1,898 @@
#if defined(ARDUINO_BLACK_F407VE)
#include "board_stm32F407VE.h"
#include "globals.h"
#include "auxiliaries.h"
#include "idle.h"
#include "scheduler.h"
#if defined(STM32F4)
#define NR_OFF_TIMERS 9
//stimer_t HardwareTimers[NR_OFF_TIMERS + 1];
stimer_t HardwareTimers_1;
stimer_t HardwareTimers_2;
stimer_t HardwareTimers_3;
stimer_t HardwareTimers_4;
stimer_t HardwareTimers_5;
stimer_t HardwareTimers_8;
#define LED_BUILTIN PA7
//These should really be in the stm32GENERIC libs, but for somereason they only have timers 1-4
// #include <stm32_TIM_variant_11.h>
// #include "src/HardwareTimers/HardwareTimer.h"
// HardwareTimer Timer5(TIM5, chip_tim5, sizeof(chip_tim5) / sizeof(chip_tim5[0]));
// HardwareTimer Timer8(TIM8, chip_tim8, sizeof(chip_tim8) / sizeof(chip_tim8[0]));
#else
#include "HardwareTimer.h"
#endif
extern void oneMSIntervalIRQ(stimer_t *Timer){oneMSInterval();}
extern void EmptyIRQCallback(stimer_t *Timer, uint32_t channel){}
void initBoard()
{
/*
* Initialize timers
*/
HardwareTimers_1.timer = TIM1;
HardwareTimers_2.timer = TIM2;
HardwareTimers_3.timer = TIM3;
HardwareTimers_4.timer = TIM4;
HardwareTimers_5.timer = TIM5;
HardwareTimers_8.timer = TIM8;
/*
***********************************************************************************************************
* General
*/
#define FLASH_LENGTH 8192
/*
***********************************************************************************************************
* Idle
*/
if( (configPage6.iacAlgorithm == IAC_ALGORITHM_PWM_OL) || (configPage6.iacAlgorithm == IAC_ALGORITHM_PWM_CL) )
{
idle_pwm_max_count = 1000000L / (configPage6.idleFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle. Note that the frequency is divided by 2 coming from TS to allow for up to 5KHz
}
//This must happen at the end of the idle init
TimerPulseInit(&HardwareTimers_1, 0xFFFF, 0, EmptyIRQCallback);
setTimerPrescalerRegister(&HardwareTimers_1, (uint32_t)(getTimerClkFreq(HardwareTimers_1.timer) / (500000)) - 1);
if(idle_pwm_max_count > 0) { attachIntHandleOC(&HardwareTimers_1, idleInterrupt, 4, 0);} //on first flash the configPage4.iacAlgorithm is invalid
//Timer1.setMode(4, TIMER_OUTPUT_COMPARE);
//timer_set_mode(TIMER1, 4, TIMER_OUTPUT_COMPARE;
//if(idle_pwm_max_count > 0) { Timer1.attachInterrupt(4, idleInterrupt);} //on first flash the configPage4.iacAlgorithm is invalid
//Timer1.resume();
/*
***********************************************************************************************************
* Timers
*/
#if defined(ARDUINO_BLACK_F407VE) || defined(STM32F4) || defined(_STM32F4_)
TimerHandleInit(&HardwareTimers_8, 1000, 168);
attachIntHandle(&HardwareTimers_8, oneMSIntervalIRQ);
#else
Timer4.setPeriod(1000); // Set up period
Timer4.setMode(1, TIMER_OUTPUT_COMPARE);
Timer4.attachInterrupt(1, oneMSInterval);
Timer4.resume(); //Start Timer
#endif
pinMode(LED_BUILTIN, OUTPUT); //Visual WDT
/*
***********************************************************************************************************
* Auxilliaries
*/
//2uS resolution Min 8Hz, Max 5KHz
boost_pwm_max_count = 1000000L / (2 * configPage6.boostFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle. The x2 is there because the frequency is stored at half value (in a byte) to allow freqneucies up to 511Hz
vvt_pwm_max_count = 1000000L / (2 * configPage6.vvtFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle
//Need to be initialised last due to instant interrupt
// Timer1.setMode(2, TIMER_OUTPUT_COMPARE);
// Timer1.setMode(3, TIMER_OUTPUT_COMPARE);
// if(boost_pwm_max_count > 0) { Timer1.attachInterrupt(2, boostInterrupt);}
// if(vvt_pwm_max_count > 0) { Timer1.attachInterrupt(3, vvtInterrupt);}
if(idle_pwm_max_count > 0) { attachIntHandleOC(&HardwareTimers_1, boostInterrupt, 2, 0);}
if(vvt_pwm_max_count > 0) { attachIntHandleOC(&HardwareTimers_1, vvtInterrupt, 3, 0);}
// Timer1.resume();
TimerPulseInit(&HardwareTimers_3, 0xFFFF, 0, EmptyIRQCallback);
setTimerPrescalerRegister(&HardwareTimers_3, (uint32_t)(getTimerClkFreq(HardwareTimers_3.timer) / (1000000)) - 1);
attachIntHandleOC(&HardwareTimers_3, fuelSchedule1Interrupt, 1, 0);
attachIntHandleOC(&HardwareTimers_3, fuelSchedule2Interrupt, 2, 0);
attachIntHandleOC(&HardwareTimers_3, fuelSchedule3Interrupt, 3, 0);
attachIntHandleOC(&HardwareTimers_3, fuelSchedule4Interrupt, 4, 0);
TimerPulseInit(&HardwareTimers_2, 0xFFFF, 0, EmptyIRQCallback);
setTimerPrescalerRegister(&HardwareTimers_2, (uint32_t)(getTimerClkFreq(HardwareTimers_2.timer) / (1000000)) - 1);
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule1Interrupt, 1, 0);
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule2Interrupt, 2, 0);
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule3Interrupt, 3, 0);
attachIntHandleOC(&HardwareTimers_2, ignitionSchedule4Interrupt, 4, 0);
//Attach interupt functions
//Injection
TimerPulseInit(&HardwareTimers_5, 0xFFFF, 0, EmptyIRQCallback);
setTimerPrescalerRegister(&HardwareTimers_5, (uint32_t)(getTimerClkFreq(HardwareTimers_5.timer) / (1000000)) - 1);
#if (INJ_CHANNELS >= 5)
attachIntHandleOC(&HardwareTimers_5, fuelSchedule5Interrupt, 1, 0);
//Timer5.attachInterrupt(1, fuelSchedule5Interrupt);
#endif
#if (INJ_CHANNELS >= 6)
attachIntHandleOC(&HardwareTimers_5, fuelSchedule6Interrupt, 2, 0);
//Timer5.attachInterrupt(2, fuelSchedule6Interrupt);
#endif
#if (INJ_CHANNELS >= 7)
attachIntHandleOC(&HardwareTimers_5, fuelSchedule7Interrupt, 3, 0);
//Timer5.attachInterrupt(3, fuelSchedule7Interrupt);
#endif
#if (INJ_CHANNELS >= 8)
attachIntHandleOC(&HardwareTimers_5, fuelSchedule8Interrupt, 4, 0);
//Timer5.attachInterrupt(4, fuelSchedule8Interrupt);
#endif
TimerPulseInit(&HardwareTimers_4, 0xFFFF, 0, EmptyIRQCallback);
setTimerPrescalerRegister(&HardwareTimers_4, (uint32_t)(getTimerClkFreq(HardwareTimers_4.timer) / (1000000)) - 1);
#if (IGN_CHANNELS >= 5)
attachIntHandleOC(&HardwareTimers_4, ignitionSchedule5Interrupt, 1, 0);
//Timer4.attachInterrupt(1, ignitionSchedule5Interrupt);
#endif
#if (IGN_CHANNELS >= 6)
attachIntHandleOC(&HardwareTimers_4, ignitionSchedule6Interrupt, 2, 0);
//Timer4.attachInterrupt(2, ignitionSchedule6Interrupt);
#endif
#if (IGN_CHANNELS >= 7)
attachIntHandleOC(&HardwareTimers_4, ignitionSchedule7Interrupt, 3, 0);
//Timer4.attachInterrupt(3, ignitionSchedule7Interrupt);
#endif
#if (IGN_CHANNELS >= 8)
attachIntHandleOC(&HardwareTimers_4, ignitionSchedule8Interrupt, 4, 0);
//Timer4.attachInterrupt(4, ignitionSchedule8Interrupt);
#endif
}
uint16_t freeRam()
{
char top = 't';
return &top - reinterpret_cast<char*>(sbrk(0));
}
//pinmapping the STM32F407 for different boards, at this moment no board is desgined.
//All boards are set to the default just to be sure.
void setPinMapping(byte boardID)
{
switch (boardID)
{
case 0:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
case 1:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
case 2:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
case 3:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
case 9:
//Pin mappings as per the MX5 PNP shield
pinInjector1 = 11; //Output pin injector 1 is on
pinInjector2 = 10; //Output pin injector 2 is on
pinInjector3 = 9; //Output pin injector 3 is on
pinInjector4 = 8; //Output pin injector 4 is on
pinInjector5 = 14; //Output pin injector 5 is on
pinCoil1 = 39; //Pin for coil 1
pinCoil2 = 41; //Pin for coil 2
pinCoil3 = 32; //Pin for coil 3
pinCoil4 = 33; //Pin for coil 4
pinCoil5 = 34; //Pin for coil 5 PLACEHOLDER value for now
pinTrigger = 19; //The CAS pin
pinTrigger2 = 18; //The Cam Sensor pin
pinTPS = A2;//TPS input pin
pinMAP = A5; //MAP sensor pin
pinIAT = A0; //IAT sensor pin
pinCLT = A1; //CLS sensor pin
pinO2 = A3; //O2 Sensor pin
pinBat = A4; //Battery reference voltage pin
pinDisplayReset = 48; // OLED reset pin
pinTachOut = 49; //Tacho output pin (Goes to ULN2803)
pinIdle1 = 2; //Single wire idle control
pinBoost = 4;
pinIdle2 = 4; //2 wire idle control (Note this is shared with boost!!!)
pinFuelPump = 37; //Fuel pump output
pinStepperDir = 16; //Direction pin for DRV8825 driver
pinStepperStep = 17; //Step pin for DRV8825 driver
pinFan = 35; //Pin for the fan output
pinLaunch = 12; //Can be overwritten below
pinFlex = 3; // Flex sensor (Must be external interrupt enabled)
pinResetControl = 44; //Reset control output
break;
case 10:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
case 20:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
case 30:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
case 40:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
case 41:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
default:
//Pin mappings as per the v0.4 shield
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
//PC8~PC12 SDio
//PA9..PA10 Serial1
//PA11..PA12 USB
//PA13..PA15 & PB4 SWD(debug) pins
//PB0 EEPROM CS pin
//PB1 LCD
//PB2 BOOT1
//PB3..PB5 SPI interface
//PB6..PB8 NRF interface
//PD5 & PD6 Serial2
pinInjector1 = PA1; //Output pin injector 1 is on
pinInjector2 = PA2; //Output pin injector 2 is on
pinInjector3 = PA3; //Output pin injector 3 is on
pinInjector4 = PA4; //Output pin injector 4 is on
pinInjector5 = PA5; //Output pin injector 5 is on
pinInjector6 = PD4; //Output pin injector 6 is on
pinCoil1 = PD7; //Pin for coil 1
pinCoil2 = PB9; //Pin for coil 2
pinCoil3 = PA8; //Pin for coil 3
pinCoil4 = PB10; //Pin for coil 4
pinCoil5 = PB11; //Pin for coil 5
pinMAP = PC0; //MAP sensor pin
pinTPS = PC1;//TPS input pin
pinIAT = PC2; //IAT sensor pin
pinCLT = PC3; //CLS sensor pin
pinO2 = PC5; //O2 Sensor pin
pinBat = PB1; //Battery reference voltage pin
pinBaro = PC4;
pinIdle1 = PB12; //Single wire idle control
pinIdle2 = PB11; //2 wire idle control
pinBoost = PC7; //Boost control
pinVVT_1 = PD3; //Default VVT output
pinStepperDir = PE0; //Direction pin for DRV8825 driver
pinStepperStep = PE1; //Step pin for DRV8825 driver
pinStepperEnable = PE2; //Enable pin for DRV8825
pinDisplayReset = PE5; // OLED reset pin
pinFan = PE6; //Pin for the fan output
pinFuelPump = PA6; //Fuel pump output
pinTachOut = PD15; //Tacho output pin
// pinLaunch = 51; //Can be overwritten below
// pinResetControl = 43; //Reset control output
//external interrupt enabled pins
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
pinFlex = PD4; // Flex sensor (Must be external interrupt enabled)
pinTrigger = PD13; //The CAS pin
pinTrigger2 = PD14; //The Cam Sensor pin
break;
}
//Setup any devices that are using selectable pins
if ( (configPage6.launchPin != 0) && (configPage6.launchPin < BOARD_NR_GPIO_PINS) ) { pinLaunch = pinTranslate(configPage6.launchPin); }
if ( (configPage4.ignBypassPin != 0) && (configPage4.ignBypassPin < BOARD_NR_GPIO_PINS) ) { pinIgnBypass = pinTranslate(configPage4.ignBypassPin); }
if ( (configPage2.tachoPin != 0) && (configPage2.tachoPin < BOARD_NR_GPIO_PINS) ) { pinTachOut = pinTranslate(configPage2.tachoPin); }
if ( (configPage4.fuelPumpPin != 0) && (configPage4.fuelPumpPin < BOARD_NR_GPIO_PINS) ) { pinFuelPump = pinTranslate(configPage4.fuelPumpPin); }
if ( (configPage6.fanPin != 0) && (configPage6.fanPin < BOARD_NR_GPIO_PINS) ) { pinFan = pinTranslate(configPage6.fanPin); }
if ( (configPage6.boostPin != 0) && (configPage6.boostPin < BOARD_NR_GPIO_PINS) ) { pinBoost = pinTranslate(configPage6.boostPin); }
if ( (configPage6.vvtPin != 0) && (configPage6.vvtPin < BOARD_NR_GPIO_PINS) ) { pinVVT_1 = pinTranslate(configPage6.vvtPin); }
if ( (configPage6.useExtBaro != 0) && (configPage6.baroPin < BOARD_NR_GPIO_PINS) ) { pinBaro = configPage6.baroPin + A0; }
if ( (configPage6.useEMAP != 0) && (configPage10.EMAPPin < BOARD_NR_GPIO_PINS) ) { pinEMAP = configPage10.EMAPPin + A0; }
//Currently there's no default pin for Idle Up
pinIdleUp = pinTranslate(configPage2.idleUpPin);
/* Reset control is a special case. If reset control is enabled, it needs its initial state set BEFORE its pinMode.
If that doesn't happen and reset control is in "Serial Command" mode, the Arduino will end up in a reset loop
because the control pin will go low as soon as the pinMode is set to OUTPUT. */
if ( (configPage4.resetControl != 0) && (configPage4.resetControlPin < BOARD_NR_GPIO_PINS) )
{
resetControl = configPage4.resetControl;
pinResetControl = pinTranslate(configPage4.resetControlPin);
setResetControlPinState();
pinMode(pinResetControl, OUTPUT);
}
//Finally, set the relevant pin modes for outputs
pinMode(pinCoil1, OUTPUT);
pinMode(pinCoil2, OUTPUT);
pinMode(pinCoil3, OUTPUT);
pinMode(pinCoil4, OUTPUT);
pinMode(pinCoil5, OUTPUT);
pinMode(pinInjector1, OUTPUT);
pinMode(pinInjector2, OUTPUT);
pinMode(pinInjector3, OUTPUT);
pinMode(pinInjector4, OUTPUT);
pinMode(pinInjector5, OUTPUT);
pinMode(pinTachOut, OUTPUT);
pinMode(pinIdle1, OUTPUT);
pinMode(pinIdle2, OUTPUT);
pinMode(pinFuelPump, OUTPUT);
pinMode(pinIgnBypass, OUTPUT);
pinMode(pinFan, OUTPUT);
pinMode(pinStepperDir, OUTPUT);
pinMode(pinStepperStep, OUTPUT);
pinMode(pinStepperEnable, OUTPUT);
pinMode(pinBoost, OUTPUT);
pinMode(pinVVT_1, OUTPUT);
inj1_pin_port = portOutputRegister(digitalPinToPort(pinInjector1));
inj1_pin_mask = digitalPinToBitMask(pinInjector1);
inj2_pin_port = portOutputRegister(digitalPinToPort(pinInjector2));
inj2_pin_mask = digitalPinToBitMask(pinInjector2);
inj3_pin_port = portOutputRegister(digitalPinToPort(pinInjector3));
inj3_pin_mask = digitalPinToBitMask(pinInjector3);
inj4_pin_port = portOutputRegister(digitalPinToPort(pinInjector4));
inj4_pin_mask = digitalPinToBitMask(pinInjector4);
inj5_pin_port = portOutputRegister(digitalPinToPort(pinInjector5));
inj5_pin_mask = digitalPinToBitMask(pinInjector5);
inj6_pin_port = portOutputRegister(digitalPinToPort(pinInjector6));
inj6_pin_mask = digitalPinToBitMask(pinInjector6);
inj7_pin_port = portOutputRegister(digitalPinToPort(pinInjector7));
inj7_pin_mask = digitalPinToBitMask(pinInjector7);
inj8_pin_port = portOutputRegister(digitalPinToPort(pinInjector8));
inj8_pin_mask = digitalPinToBitMask(pinInjector8);
ign1_pin_port = portOutputRegister(digitalPinToPort(pinCoil1));
ign1_pin_mask = digitalPinToBitMask(pinCoil1);
ign2_pin_port = portOutputRegister(digitalPinToPort(pinCoil2));
ign2_pin_mask = digitalPinToBitMask(pinCoil2);
ign3_pin_port = portOutputRegister(digitalPinToPort(pinCoil3));
ign3_pin_mask = digitalPinToBitMask(pinCoil3);
ign4_pin_port = portOutputRegister(digitalPinToPort(pinCoil4));
ign4_pin_mask = digitalPinToBitMask(pinCoil4);
ign5_pin_port = portOutputRegister(digitalPinToPort(pinCoil5));
ign5_pin_mask = digitalPinToBitMask(pinCoil5);
ign6_pin_port = portOutputRegister(digitalPinToPort(pinCoil6));
ign6_pin_mask = digitalPinToBitMask(pinCoil6);
ign7_pin_port = portOutputRegister(digitalPinToPort(pinCoil7));
ign7_pin_mask = digitalPinToBitMask(pinCoil7);
ign8_pin_port = portOutputRegister(digitalPinToPort(pinCoil8));
ign8_pin_mask = digitalPinToBitMask(pinCoil8);
tach_pin_port = portOutputRegister(digitalPinToPort(pinTachOut));
tach_pin_mask = digitalPinToBitMask(pinTachOut);
pump_pin_port = portOutputRegister(digitalPinToPort(pinFuelPump));
pump_pin_mask = digitalPinToBitMask(pinFuelPump);
//And for inputs
pinMode(pinMAP, INPUT);
pinMode(pinO2, INPUT);
pinMode(pinO2_2, INPUT);
pinMode(pinTPS, INPUT);
pinMode(pinIAT, INPUT);
pinMode(pinCLT, INPUT);
pinMode(pinBat, INPUT);
pinMode(pinBaro, INPUT);
pinMode(pinTrigger, INPUT);
pinMode(pinTrigger2, INPUT);
pinMode(pinTrigger3, INPUT);
//Each of the below are only set when their relevant function is enabled. This can help prevent pin conflicts that users aren't aware of with unused functions
if(configPage2.flexEnabled > 0)
{
pinMode(pinFlex, INPUT); //Standard GM / Continental flex sensor requires pullup, but this should be onboard. The internal pullup will not work (Requires ~3.3k)!
}
if(configPage6.launchEnabled > 0)
{
if (configPage6.lnchPullRes == true) { pinMode(pinLaunch, INPUT_PULLUP); }
else { pinMode(pinLaunch, INPUT); } //If Launch Pull Resistor is not set make input float.
}
if(configPage2.idleUpEnabled > 0)
{
if (configPage2.idleUpPolarity == 0) { pinMode(pinIdleUp, INPUT_PULLUP); } //Normal setting
else { pinMode(pinIdleUp, INPUT); } //inverted setting
}
//These must come after the above pinMode statements
triggerPri_pin_port = portInputRegister(digitalPinToPort(pinTrigger));
triggerPri_pin_mask = digitalPinToBitMask(pinTrigger);
triggerSec_pin_port = portInputRegister(digitalPinToPort(pinTrigger2));
triggerSec_pin_mask = digitalPinToBitMask(pinTrigger2);
//Set default values
digitalWrite(pinMAP, HIGH);
//digitalWrite(pinO2, LOW);
digitalWrite(pinTPS, LOW);
}
#endif

View File

@ -32,14 +32,15 @@
#define LED_BUILTIN PB1 //Maple Mini
#endif
#elif defined(ARDUINO_BLACK_F407VE) || defined(STM32F4)
#define BOARD_H "board_stm32F407VE.h"
#define BOARD_DIGITAL_GPIO_PINS 80
#define BOARD_NR_GPIO_PINS 80
//These boards always make 8/8 channels available
#undef INJ_CHANNELS
#undef IGN_CHANNELS
#define INJ_CHANNELS 4
#define IGN_CHANNELS 4
#define INJ_CHANNELS 8
#define IGN_CHANNELS 8
#endif
//Specific mode for Bluepill due to its small flash size. This disables a number of strings from being compiled into the flash