6#include <HardwareTimer.h>
7#include <HardwareSerial.h>
15 #error "USBCON must be defined in boards.txt"
18 #error "USBD_USE_CDC must be defined in boards.txt"
23 #include "stm32f1xx_ll_tim.h"
25 #include "stm32f3xx_ll_tim.h"
27 #include "stm32f4xx_ll_tim.h"
28 #if defined(STM32F407xx) && !defined(HAL_CAN_MODULE_ENABLED)
29 #warning "CAN module is not enabled. Internal CAN will NOT be available"
32 #include "stm32f4xx_ll_tim.h"
63#define TS_SERIAL_BUFFER_SIZE 517
64#define FPU_MAX_SIZE 32
69 #define word(h, l) (((h) << 8) | (l))
72#if defined(ARDUINO_BLUEPILL_F103C8) || defined(ARDUINO_BLUEPILL_F103CB) \
73 || defined(ARDUINO_BLACKPILL_F401CC) || defined(ARDUINO_BLACKPILL_F411CE)
75 #ifndef NUM_DIGITAL_PINS
76 #define NUM_DIGITAL_PINS 35
79 #define LED_BUILTIN PB1
81#elif defined(STM32F407xx)
82 #ifndef NUM_DIGITAL_PINS
83 #define NUM_DIGITAL_PINS 75
88#if defined(MCU_STM32F103C8) || defined(MCU_STM32F103CB)
89 #define SMALL_FLASH_MODE
92#define BOARD_MAX_DIGITAL_PINS NUM_DIGITAL_PINS
93#define BOARD_MAX_IO_PINS NUM_DIGITAL_PINS
95extern "C" char*
sbrk(
int incr);
97#ifndef digitalPinToInterrupt
102 #define EEPROM_RESET_PIN USER_BTN
105#if defined(STM32F407xx)
110#if defined(SD_LOGGING)
113 extern SPIClass SD_SPI;
114 #define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(50), &SD_SPI)
120#if SERIAL_UART_INSTANCE==2
121HardwareSerial Serial1(PA10, PA9);
126#if defined(ARDUINO_BLUEPILL_F103C8) || defined(ARDUINO_BLUEPILL_F103CB) \
127 || defined(ARDUINO_BLACKPILL_F401CC) || defined(ARDUINO_BLACKPILL_F411CE)
129 return (pin == (uint8_t)PA11)
130 || (pin == (uint8_t)PA12)
131 || (pin == (uint8_t)PC14)
132 || (pin == (uint8_t)PC15)
149 #ifdef USE_SPI_EEPROM
151 return (pin == (uint8_t)PA11)
152 || (pin == (uint8_t)PA12)
153 || (pin == (uint8_t)PB3)
154 || (pin == (uint8_t)PB4)
155 || (pin == (uint8_t)USE_SPI_EEPROM)
160 return (pin == (uint8_t)PA11)
161 || (pin == (uint8_t)PA12)
162 || (pin == (uint8_t)PB3)
163 || (pin == (uint8_t)PB4)
164 || (pin == (uint8_t)PB5)
165 || (pin == (uint8_t)PB0)
171#define PWM_FAN_AVAILABLE
174 #define LED_BUILTIN PA7
181#if defined(STM32F401xC)
182 #define SMALL_FLASH_MODE
185#define RTC_LIB_H "STM32RTC.h"
204#if defined(STM32F407xx)
205 #define INJ_CHANNELS 8
206 #define IGN_CHANNELS 8
208 #define INJ_CHANNELS 4
209 #define IGN_CHANNELS 5
211#define FUEL1_COUNTER (TIM3)->CNT
212#define FUEL2_COUNTER (TIM3)->CNT
213#define FUEL3_COUNTER (TIM3)->CNT
214#define FUEL4_COUNTER (TIM3)->CNT
216#define FUEL1_COMPARE (TIM3)->CCR1
217#define FUEL2_COMPARE (TIM3)->CCR2
218#define FUEL3_COMPARE (TIM3)->CCR3
219#define FUEL4_COMPARE (TIM3)->CCR4
221#define IGN1_COUNTER (TIM2)->CNT
222#define IGN2_COUNTER (TIM2)->CNT
223#define IGN3_COUNTER (TIM2)->CNT
224#define IGN4_COUNTER (TIM2)->CNT
226#define IGN1_COMPARE (TIM2)->CCR1
227#define IGN2_COMPARE (TIM2)->CCR2
228#define IGN3_COMPARE (TIM2)->CCR3
229#define IGN4_COMPARE (TIM2)->CCR4
231#define FUEL5_COUNTER (TIM5)->CNT
232#define FUEL6_COUNTER (TIM5)->CNT
233#define FUEL7_COUNTER (TIM5)->CNT
234#define FUEL8_COUNTER (TIM5)->CNT
236#define FUEL5_COMPARE (TIM5)->CCR1
237#define FUEL6_COMPARE (TIM5)->CCR2
238#define FUEL7_COMPARE (TIM5)->CCR3
239#define FUEL8_COMPARE (TIM5)->CCR4
241#define IGN5_COUNTER (TIM4)->CNT
242#define IGN6_COUNTER (TIM4)->CNT
243#define IGN7_COUNTER (TIM4)->CNT
244#define IGN8_COUNTER (TIM4)->CNT
246#define IGN5_COMPARE (TIM4)->CCR1
247#define IGN6_COMPARE (TIM4)->CCR2
248#define IGN7_COMPARE (TIM4)->CCR3
249#define IGN8_COMPARE (TIM4)->CCR4
252static inline void FUEL1_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC1; (TIM3)->DIER |= TIM_DIER_CC1IE;}
253static inline void FUEL2_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC2; (TIM3)->DIER |= TIM_DIER_CC2IE;}
254static inline void FUEL3_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC3; (TIM3)->DIER |= TIM_DIER_CC3IE;}
255static inline void FUEL4_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC4; (TIM3)->DIER |= TIM_DIER_CC4IE;}
262static inline void IGN1_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC1; (TIM2)->DIER |= TIM_DIER_CC1IE;}
263static inline void IGN2_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC2; (TIM2)->DIER |= TIM_DIER_CC2IE;}
264static inline void IGN3_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC3; (TIM2)->DIER |= TIM_DIER_CC3IE;}
265static inline void IGN4_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC4; (TIM2)->DIER |= TIM_DIER_CC4IE;}
272static inline void FUEL5_TIMER_ENABLE(
void) {(TIM5)->CR1 |= TIM_CR1_CEN; (TIM5)->CR1 |= TIM_CR1_CEN; (TIM5)->SR = ~TIM_FLAG_CC1; (TIM5)->DIER |= TIM_DIER_CC1IE;}
273static inline void FUEL6_TIMER_ENABLE(
void) {(TIM5)->CR1 |= TIM_CR1_CEN; (TIM5)->CR1 |= TIM_CR1_CEN; (TIM5)->SR = ~TIM_FLAG_CC2; (TIM5)->DIER |= TIM_DIER_CC2IE;}
274static inline void FUEL7_TIMER_ENABLE(
void) {(TIM5)->CR1 |= TIM_CR1_CEN; (TIM5)->CR1 |= TIM_CR1_CEN; (TIM5)->SR = ~TIM_FLAG_CC3; (TIM5)->DIER |= TIM_DIER_CC3IE;}
275static inline void FUEL8_TIMER_ENABLE(
void) {(TIM5)->CR1 |= TIM_CR1_CEN; (TIM5)->CR1 |= TIM_CR1_CEN; (TIM5)->SR = ~TIM_FLAG_CC4; (TIM5)->DIER |= TIM_DIER_CC4IE;}
282static inline void IGN5_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC1; (TIM4)->DIER |= TIM_DIER_CC1IE;}
283static inline void IGN6_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC2; (TIM4)->DIER |= TIM_DIER_CC2IE;}
284static inline void IGN7_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC3; (TIM4)->DIER |= TIM_DIER_CC3IE;}
285static inline void IGN8_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC4; (TIM4)->DIER |= TIM_DIER_CC4IE;}
297#define ENABLE_BOOST_TIMER() (TIM1)->SR = ~TIM_FLAG_CC2; (TIM1)->DIER |= TIM_DIER_CC2IE; (TIM1)->CR1 |= TIM_CR1_CEN;
298#define DISABLE_BOOST_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC2IE
300#define ENABLE_VVT_TIMER() (TIM1)->SR = ~TIM_FLAG_CC3; (TIM1)->DIER |= TIM_DIER_CC3IE; (TIM1)->CR1 |= TIM_CR1_CEN;
301#define DISABLE_VVT_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC3IE
303#define ENABLE_FAN_TIMER() (TIM1)->SR = ~TIM_FLAG_CC1; (TIM1)->DIER |= TIM_DIER_CC1IE; (TIM1)->CR1 |= TIM_CR1_CEN;
304#define DISABLE_FAN_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC1IE
306#define BOOST_TIMER_COMPARE (TIM1)->CCR2
307#define BOOST_TIMER_COUNTER (TIM1)->CNT
308#define VVT_TIMER_COMPARE (TIM1)->CCR3
309#define VVT_TIMER_COUNTER (TIM1)->CNT
310#define FAN_TIMER_COMPARE (TIM1)->CCR1
311#define FAN_TIMER_COUNTER (TIM1)->CNT
317#define IDLE_COUNTER (TIM1)->CNT
318#define IDLE_COMPARE (TIM1)->CCR4
320#define IDLE_TIMER_ENABLE() (TIM1)->SR = ~TIM_FLAG_CC4; (TIM1)->DIER |= TIM_DIER_CC4IE; (TIM1)->CR1 |= TIM_CR1_CEN;
321#define IDLE_TIMER_DISABLE() (TIM1)->DIER &= ~TIM_DIER_CC4IE
328#if defined(HAL_CAN_MODULE_ENABLED)
329#define NATIVE_CAN_AVAILABLE
330#include <src/STM32_CAN/STM32_CAN.h>
332extern STM32_CAN Can0;
335#if defined(STM32GENERIC)
336 #define SECONDARY_SERIAL_T SerialUART
338 #define SECONDARY_SERIAL_T HardwareSerial
347#if NUM_ANALOG_INPUTS==10
348constexpr uint8_t
ANALOG_PINS[NUM_ANALOG_INPUTS-1] = { _ANALOG_PINS_A0_A8 };
350constexpr uint8_t
ANALOG_PINS[NUM_ANALOG_INPUTS-1] = { _ANALOG_PINS_A0_A14 };
uint16_t COMPARE_TYPE
The timer overflow type.
Definition board_avr2560.h:32
fastInputPin_t boardInputPin_t
Definition board_avr2560.h:174
fastOutputPin_t boardOutputPin_t
Definition board_avr2560.h:176
static void IGN1_TIMER_ENABLE(void)
Definition board_stm32_official.h:262
static void IGN3_TIMER_DISABLE(void)
Definition board_stm32_official.h:269
static void IGN1_TIMER_DISABLE(void)
Definition board_stm32_official.h:267
static void FUEL2_TIMER_ENABLE(void)
Definition board_stm32_official.h:253
static void FUEL1_TIMER_DISABLE(void)
Definition board_stm32_official.h:257
static void FUEL4_TIMER_DISABLE(void)
Definition board_stm32_official.h:260
static void IGN3_TIMER_ENABLE(void)
Definition board_stm32_official.h:264
constexpr uint8_t ANALOG_PINS[NUM_ANALOG_INPUTS-1]
Analog pin mapping.
Definition board_stm32_official.h:350
static void FUEL4_TIMER_ENABLE(void)
Definition board_stm32_official.h:255
static void FUEL5_TIMER_DISABLE(void)
Definition board_stm32_official.h:277
static void FUEL2_TIMER_DISABLE(void)
Definition board_stm32_official.h:258
static void FUEL3_TIMER_DISABLE(void)
Definition board_stm32_official.h:259
static void IGN5_TIMER_ENABLE(void)
Definition board_stm32_official.h:282
static bool pinIsReserved(uint8_t pin)
Definition board_stm32_official.h:159
static void FUEL7_TIMER_DISABLE(void)
Definition board_stm32_official.h:279
uint32_t digitalPinToInterrupt(uint32_t Interrupt_pin)
Definition board_stm32_official.h:98
constexpr uint16_t BLOCKING_FACTOR
Definition board_stm32_official.h:65
static void FUEL7_TIMER_ENABLE(void)
Definition board_stm32_official.h:274
static void FUEL3_TIMER_ENABLE(void)
Definition board_stm32_official.h:254
static void FUEL6_TIMER_ENABLE(void)
Definition board_stm32_official.h:273
static void IGN6_TIMER_DISABLE(void)
Definition board_stm32_official.h:288
static constexpr uint32_t ticksToMicros(COMPARE_TYPE ticks)
Convert timer ticks to µS.
Definition board_stm32_official.h:58
static void FUEL6_TIMER_DISABLE(void)
Definition board_stm32_official.h:278
static void IGN7_TIMER_DISABLE(void)
Definition board_stm32_official.h:289
static void IGN2_TIMER_DISABLE(void)
Definition board_stm32_official.h:268
constexpr uint32_t TIMER_RESOLUTION
The timer tick length in µS.
Definition board_stm32_official.h:47
static void IGN8_TIMER_DISABLE(void)
Definition board_stm32_official.h:290
static void IGN6_TIMER_ENABLE(void)
Definition board_stm32_official.h:283
static void IGN2_TIMER_ENABLE(void)
Definition board_stm32_official.h:263
static void IGN8_TIMER_ENABLE(void)
Definition board_stm32_official.h:285
static void FUEL8_TIMER_DISABLE(void)
Definition board_stm32_official.h:280
static void IGN4_TIMER_ENABLE(void)
Definition board_stm32_official.h:265
static void IGN7_TIMER_ENABLE(void)
Definition board_stm32_official.h:284
static void IGN5_TIMER_DISABLE(void)
Definition board_stm32_official.h:287
static void IGN4_TIMER_DISABLE(void)
Definition board_stm32_official.h:270
constexpr uint8_t SERIAL_BUFFER_THRESHOLD
When the serial buffer is filled to greater than this threshold value, the serial processing operatio...
Definition board_stm32_official.h:357
static void FUEL1_TIMER_ENABLE(void)
Definition board_stm32_official.h:252
static void FUEL8_TIMER_ENABLE(void)
Definition board_stm32_official.h:275
static void FUEL5_TIMER_ENABLE(void)
Definition board_stm32_official.h:272
constexpr uint16_t TABLE_BLOCKING_FACTOR
Definition board_stm32_official.h:66
static constexpr COMPARE_TYPE uS_TO_TIMER_COMPARE(uint32_t micros)
Converts a given number of uS into the required number of timer ticks until that time has passed.
Definition board_stm32_official.h:50