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
85#elif defined(BOARD_FCR_MICRO_F4)
86 #ifndef NUM_DIGITAL_PINS
87 #define NUM_DIGITAL_PINS 100
89 #define BOARD_ANALOG_SCALE_NUM 5148
90 #define BOARD_ANALOG_SCALE_DEN 5000
94#if defined(MCU_STM32F103C8) || defined(MCU_STM32F103CB)
95 #define SMALL_FLASH_MODE
98#define BOARD_MAX_DIGITAL_PINS NUM_DIGITAL_PINS
99#define BOARD_MAX_IO_PINS NUM_DIGITAL_PINS
101extern "C" char*
sbrk(
int incr);
103#ifndef digitalPinToInterrupt
108 #define EEPROM_RESET_PIN USER_BTN
111#if defined(STM32F407xx)
116#if defined(SD_LOGGING)
119 extern SPIClass SD_SPI;
120 #define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(50), &SD_SPI)
126#if SERIAL_UART_INSTANCE==2
127HardwareSerial Serial1(PA10, PA9);
132#if defined(ARDUINO_BLUEPILL_F103C8) || defined(ARDUINO_BLUEPILL_F103CB) \
133 || defined(ARDUINO_BLACKPILL_F401CC) || defined(ARDUINO_BLACKPILL_F411CE)
135 return (pin == (uint8_t)PA11)
136 || (pin == (uint8_t)PA12)
137 || (pin == (uint8_t)PC14)
138 || (pin == (uint8_t)PC15)
155 #ifdef USE_SPI_EEPROM
156 #if defined(BOARD_FCR_MICRO_F4)
158 PinName p = digitalPinToPinName(pin);
165 || (p == (PinName)USE_SPI_EEPROM)
172 return (pin == (uint8_t)PA11)
173 || (pin == (uint8_t)PA12)
174 || (pin == (uint8_t)PB3)
175 || (pin == (uint8_t)PB4)
176 || (pin == (uint8_t)USE_SPI_EEPROM)
182 return (pin == (uint8_t)PA11)
183 || (pin == (uint8_t)PA12)
184 || (pin == (uint8_t)PB3)
185 || (pin == (uint8_t)PB4)
186 || (pin == (uint8_t)PB5)
187 || (pin == (uint8_t)PB0)
193#define PWM_FAN_AVAILABLE
196 #define LED_BUILTIN PA7
203#if defined(STM32F401xC)
204 #define SMALL_FLASH_MODE
207#define RTC_LIB_H "STM32RTC.h"
226#if defined(STM32F407xx)
228 #define INJ_CHANNELS 8
231 #define IGN_CHANNELS 8
235 #define INJ_CHANNELS 4
238 #define IGN_CHANNELS 5
241#define FUEL1_COUNTER (TIM3)->CNT
242#define FUEL2_COUNTER (TIM3)->CNT
243#define FUEL3_COUNTER (TIM3)->CNT
244#define FUEL4_COUNTER (TIM3)->CNT
246#define FUEL1_COMPARE (TIM3)->CCR1
247#define FUEL2_COMPARE (TIM3)->CCR2
248#define FUEL3_COMPARE (TIM3)->CCR3
249#define FUEL4_COMPARE (TIM3)->CCR4
251#define IGN1_COUNTER (TIM2)->CNT
252#define IGN2_COUNTER (TIM2)->CNT
253#define IGN3_COUNTER (TIM2)->CNT
254#define IGN4_COUNTER (TIM2)->CNT
256#define IGN1_COMPARE (TIM2)->CCR1
257#define IGN2_COMPARE (TIM2)->CCR2
258#define IGN3_COMPARE (TIM2)->CCR3
259#define IGN4_COMPARE (TIM2)->CCR4
261#define FUEL5_COUNTER (TIM5)->CNT
262#define FUEL6_COUNTER (TIM5)->CNT
263#define FUEL7_COUNTER (TIM5)->CNT
264#define FUEL8_COUNTER (TIM5)->CNT
266#define FUEL5_COMPARE (TIM5)->CCR1
267#define FUEL6_COMPARE (TIM5)->CCR2
268#define FUEL7_COMPARE (TIM5)->CCR3
269#define FUEL8_COMPARE (TIM5)->CCR4
271#define IGN5_COUNTER (TIM4)->CNT
272#define IGN6_COUNTER (TIM4)->CNT
273#define IGN7_COUNTER (TIM4)->CNT
274#define IGN8_COUNTER (TIM4)->CNT
276#define IGN5_COMPARE (TIM4)->CCR1
277#define IGN6_COMPARE (TIM4)->CCR2
278#define IGN7_COMPARE (TIM4)->CCR3
279#define IGN8_COMPARE (TIM4)->CCR4
282static inline void FUEL1_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC1; (TIM3)->DIER |= TIM_DIER_CC1IE;}
283static inline void FUEL2_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC2; (TIM3)->DIER |= TIM_DIER_CC2IE;}
284static inline void FUEL3_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC3; (TIM3)->DIER |= TIM_DIER_CC3IE;}
285static inline void FUEL4_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC4; (TIM3)->DIER |= TIM_DIER_CC4IE;}
292static inline void IGN1_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC1; (TIM2)->DIER |= TIM_DIER_CC1IE;}
293static inline void IGN2_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC2; (TIM2)->DIER |= TIM_DIER_CC2IE;}
294static inline void IGN3_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC3; (TIM2)->DIER |= TIM_DIER_CC3IE;}
295static inline void IGN4_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC4; (TIM2)->DIER |= TIM_DIER_CC4IE;}
302static 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;}
303static 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;}
304static 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;}
305static 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;}
312static inline void IGN5_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC1; (TIM4)->DIER |= TIM_DIER_CC1IE;}
313static inline void IGN6_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC2; (TIM4)->DIER |= TIM_DIER_CC2IE;}
314static inline void IGN7_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC3; (TIM4)->DIER |= TIM_DIER_CC3IE;}
315static inline void IGN8_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC4; (TIM4)->DIER |= TIM_DIER_CC4IE;}
327#define ENABLE_BOOST_TIMER() (TIM1)->SR = ~TIM_FLAG_CC2; (TIM1)->DIER |= TIM_DIER_CC2IE; (TIM1)->CR1 |= TIM_CR1_CEN;
328#define DISABLE_BOOST_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC2IE
330#define ENABLE_VVT_TIMER() (TIM1)->SR = ~TIM_FLAG_CC3; (TIM1)->DIER |= TIM_DIER_CC3IE; (TIM1)->CR1 |= TIM_CR1_CEN;
331#define DISABLE_VVT_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC3IE
333#define ENABLE_FAN_TIMER() (TIM1)->SR = ~TIM_FLAG_CC1; (TIM1)->DIER |= TIM_DIER_CC1IE; (TIM1)->CR1 |= TIM_CR1_CEN;
334#define DISABLE_FAN_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC1IE
336#define BOOST_TIMER_COMPARE (TIM1)->CCR2
337#define BOOST_TIMER_COUNTER (TIM1)->CNT
338#define VVT_TIMER_COMPARE (TIM1)->CCR3
339#define VVT_TIMER_COUNTER (TIM1)->CNT
340#define FAN_TIMER_COMPARE (TIM1)->CCR1
341#define FAN_TIMER_COUNTER (TIM1)->CNT
347#define IDLE_COUNTER (TIM1)->CNT
348#define IDLE_COMPARE (TIM1)->CCR4
350#define IDLE_TIMER_ENABLE() (TIM1)->SR = ~TIM_FLAG_CC4; (TIM1)->DIER |= TIM_DIER_CC4IE; (TIM1)->CR1 |= TIM_CR1_CEN;
351#define IDLE_TIMER_DISABLE() (TIM1)->DIER &= ~TIM_DIER_CC4IE
358#if defined(HAL_CAN_MODULE_ENABLED)
359#define NATIVE_CAN_AVAILABLE
360#include <src/STM32_CAN/STM32_CAN.h>
362extern STM32_CAN Can0;
365#if defined(STM32GENERIC)
366 #define SECONDARY_SERIAL_T SerialUART
368 #define SECONDARY_SERIAL_T HardwareSerial
377#if NUM_ANALOG_INPUTS==10
378constexpr uint8_t
ANALOG_PINS[NUM_ANALOG_INPUTS-1] = { _ANALOG_PINS_A0_A8 };
380constexpr 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:292
static void IGN3_TIMER_DISABLE(void)
Definition board_stm32_official.h:299
static void IGN1_TIMER_DISABLE(void)
Definition board_stm32_official.h:297
static void FUEL2_TIMER_ENABLE(void)
Definition board_stm32_official.h:283
static void FUEL1_TIMER_DISABLE(void)
Definition board_stm32_official.h:287
static void FUEL4_TIMER_DISABLE(void)
Definition board_stm32_official.h:290
static void IGN3_TIMER_ENABLE(void)
Definition board_stm32_official.h:294
constexpr uint8_t ANALOG_PINS[NUM_ANALOG_INPUTS-1]
Analog pin mapping.
Definition board_stm32_official.h:380
static void FUEL4_TIMER_ENABLE(void)
Definition board_stm32_official.h:285
static void FUEL5_TIMER_DISABLE(void)
Definition board_stm32_official.h:307
static void FUEL2_TIMER_DISABLE(void)
Definition board_stm32_official.h:288
static void FUEL3_TIMER_DISABLE(void)
Definition board_stm32_official.h:289
static void IGN5_TIMER_ENABLE(void)
Definition board_stm32_official.h:312
static bool pinIsReserved(uint8_t pin)
Definition board_stm32_official.h:181
static void FUEL7_TIMER_DISABLE(void)
Definition board_stm32_official.h:309
uint32_t digitalPinToInterrupt(uint32_t Interrupt_pin)
Definition board_stm32_official.h:104
constexpr uint16_t BLOCKING_FACTOR
Definition board_stm32_official.h:65
static void FUEL7_TIMER_ENABLE(void)
Definition board_stm32_official.h:304
static void FUEL3_TIMER_ENABLE(void)
Definition board_stm32_official.h:284
static void FUEL6_TIMER_ENABLE(void)
Definition board_stm32_official.h:303
static void IGN6_TIMER_DISABLE(void)
Definition board_stm32_official.h:318
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:308
static void IGN7_TIMER_DISABLE(void)
Definition board_stm32_official.h:319
static void IGN2_TIMER_DISABLE(void)
Definition board_stm32_official.h:298
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:320
static void IGN6_TIMER_ENABLE(void)
Definition board_stm32_official.h:313
static void IGN2_TIMER_ENABLE(void)
Definition board_stm32_official.h:293
static void IGN8_TIMER_ENABLE(void)
Definition board_stm32_official.h:315
static void FUEL8_TIMER_DISABLE(void)
Definition board_stm32_official.h:310
static void IGN4_TIMER_ENABLE(void)
Definition board_stm32_official.h:295
static void IGN7_TIMER_ENABLE(void)
Definition board_stm32_official.h:314
static void IGN5_TIMER_DISABLE(void)
Definition board_stm32_official.h:317
static void IGN4_TIMER_DISABLE(void)
Definition board_stm32_official.h:300
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:387
static void FUEL1_TIMER_ENABLE(void)
Definition board_stm32_official.h:282
static void FUEL8_TIMER_ENABLE(void)
Definition board_stm32_official.h:305
static void FUEL5_TIMER_ENABLE(void)
Definition board_stm32_official.h:302
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