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
74 #define word(h, l) (((h) << 8) | (l))
77#if defined(ARDUINO_BLUEPILL_F103C8) || defined(ARDUINO_BLUEPILL_F103CB) \
78 || defined(ARDUINO_BLACKPILL_F401CC) || defined(ARDUINO_BLACKPILL_F411CE)
80 #ifndef NUM_DIGITAL_PINS
81 #define NUM_DIGITAL_PINS 35
84 #define LED_BUILTIN PB1
86#elif defined(STM32F407xx)
87 #ifndef NUM_DIGITAL_PINS
88 #define NUM_DIGITAL_PINS 75
93#if defined(MCU_STM32F103C8) || defined(MCU_STM32F103CB)
94 #define SMALL_FLASH_MODE
97#define BOARD_MAX_DIGITAL_PINS NUM_DIGITAL_PINS
98#define BOARD_MAX_IO_PINS NUM_DIGITAL_PINS
100extern "C" char*
sbrk(
int incr);
102#ifndef digitalPinToInterrupt
107 #define EEPROM_RESET_PIN USER_BTN
110#if defined(STM32F407xx)
115#if defined(SD_LOGGING)
118 extern SPIClass SD_SPI;
119 #define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(50), &SD_SPI)
125#if SERIAL_UART_INSTANCE==2
126HardwareSerial Serial1(PA10, PA9);
131#if defined(ARDUINO_BLUEPILL_F103C8) || defined(ARDUINO_BLUEPILL_F103CB) \
132 || defined(ARDUINO_BLACKPILL_F401CC) || defined(ARDUINO_BLACKPILL_F411CE)
134 return (pin == (uint8_t)PA11)
135 || (pin == (uint8_t)PA12)
136 || (pin == (uint8_t)PC14)
137 || (pin == (uint8_t)PC15)
154 #ifdef USE_SPI_EEPROM
156 return (pin == (uint8_t)PA11)
157 || (pin == (uint8_t)PA12)
158 || (pin == (uint8_t)PB3)
159 || (pin == (uint8_t)PB4)
160 || (pin == (uint8_t)USE_SPI_EEPROM)
165 return (pin == (uint8_t)PA11)
166 || (pin == (uint8_t)PA12)
167 || (pin == (uint8_t)PB3)
168 || (pin == (uint8_t)PB4)
169 || (pin == (uint8_t)PB5)
170 || (pin == (uint8_t)PB0)
176#define PWM_FAN_AVAILABLE
177#define BOARD_MAX_ADC_PINS NUM_ANALOG_INPUTS-1
180 #define LED_BUILTIN PA7
187#if defined(SRAM_AS_EEPROM)
188 #define EEPROM_LIB_H "src/BackupSram/BackupSramAsEEPROM.h"
189 class BackupSramAsEEPROM;
190 using EEPROM_t = BackupSramAsEEPROM;
191#elif defined(USE_SPI_EEPROM)
192 #define EEPROM_LIB_H "src/SPIAsEEPROM/SPIAsEEPROM.h"
193 class SPI_EEPROM_Class;
195#elif defined(FRAM_AS_EEPROM)
196 #define EEPROM_LIB_H "src/FRAM/Fram.h"
200 #define EEPROM_LIB_H "src/SPIAsEEPROM/SPIAsEEPROM.h"
201 class InternalSTM32F4_EEPROM_Class;
203 #if defined(STM32F401xC)
204 #define SMALL_FLASH_MODE
208#define RTC_LIB_H "STM32RTC.h"
227#if defined(STM32F407xx)
228 #define INJ_CHANNELS 8
229 #define IGN_CHANNELS 8
231 #define INJ_CHANNELS 4
232 #define IGN_CHANNELS 5
234#define FUEL1_COUNTER (TIM3)->CNT
235#define FUEL2_COUNTER (TIM3)->CNT
236#define FUEL3_COUNTER (TIM3)->CNT
237#define FUEL4_COUNTER (TIM3)->CNT
239#define FUEL1_COMPARE (TIM3)->CCR1
240#define FUEL2_COMPARE (TIM3)->CCR2
241#define FUEL3_COMPARE (TIM3)->CCR3
242#define FUEL4_COMPARE (TIM3)->CCR4
244#define IGN1_COUNTER (TIM2)->CNT
245#define IGN2_COUNTER (TIM2)->CNT
246#define IGN3_COUNTER (TIM2)->CNT
247#define IGN4_COUNTER (TIM2)->CNT
249#define IGN1_COMPARE (TIM2)->CCR1
250#define IGN2_COMPARE (TIM2)->CCR2
251#define IGN3_COMPARE (TIM2)->CCR3
252#define IGN4_COMPARE (TIM2)->CCR4
254#define FUEL5_COUNTER (TIM5)->CNT
255#define FUEL6_COUNTER (TIM5)->CNT
256#define FUEL7_COUNTER (TIM5)->CNT
257#define FUEL8_COUNTER (TIM5)->CNT
259#define FUEL5_COMPARE (TIM5)->CCR1
260#define FUEL6_COMPARE (TIM5)->CCR2
261#define FUEL7_COMPARE (TIM5)->CCR3
262#define FUEL8_COMPARE (TIM5)->CCR4
264#define IGN5_COUNTER (TIM4)->CNT
265#define IGN6_COUNTER (TIM4)->CNT
266#define IGN7_COUNTER (TIM4)->CNT
267#define IGN8_COUNTER (TIM4)->CNT
269#define IGN5_COMPARE (TIM4)->CCR1
270#define IGN6_COMPARE (TIM4)->CCR2
271#define IGN7_COMPARE (TIM4)->CCR3
272#define IGN8_COMPARE (TIM4)->CCR4
275static inline void FUEL1_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC1; (TIM3)->DIER |= TIM_DIER_CC1IE;}
276static inline void FUEL2_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC2; (TIM3)->DIER |= TIM_DIER_CC2IE;}
277static inline void FUEL3_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC3; (TIM3)->DIER |= TIM_DIER_CC3IE;}
278static inline void FUEL4_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC4; (TIM3)->DIER |= TIM_DIER_CC4IE;}
285static inline void IGN1_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC1; (TIM2)->DIER |= TIM_DIER_CC1IE;}
286static inline void IGN2_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC2; (TIM2)->DIER |= TIM_DIER_CC2IE;}
287static inline void IGN3_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC3; (TIM2)->DIER |= TIM_DIER_CC3IE;}
288static inline void IGN4_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC4; (TIM2)->DIER |= TIM_DIER_CC4IE;}
295static 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;}
296static 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;}
297static 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;}
298static 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;}
305static inline void IGN5_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC1; (TIM4)->DIER |= TIM_DIER_CC1IE;}
306static inline void IGN6_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC2; (TIM4)->DIER |= TIM_DIER_CC2IE;}
307static inline void IGN7_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC3; (TIM4)->DIER |= TIM_DIER_CC3IE;}
308static inline void IGN8_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC4; (TIM4)->DIER |= TIM_DIER_CC4IE;}
320#define ENABLE_BOOST_TIMER() (TIM1)->SR = ~TIM_FLAG_CC2; (TIM1)->DIER |= TIM_DIER_CC2IE; (TIM1)->CR1 |= TIM_CR1_CEN;
321#define DISABLE_BOOST_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC2IE
323#define ENABLE_VVT_TIMER() (TIM1)->SR = ~TIM_FLAG_CC3; (TIM1)->DIER |= TIM_DIER_CC3IE; (TIM1)->CR1 |= TIM_CR1_CEN;
324#define DISABLE_VVT_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC3IE
326#define ENABLE_FAN_TIMER() (TIM1)->SR = ~TIM_FLAG_CC1; (TIM1)->DIER |= TIM_DIER_CC1IE; (TIM1)->CR1 |= TIM_CR1_CEN;
327#define DISABLE_FAN_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC1IE
329#define BOOST_TIMER_COMPARE (TIM1)->CCR2
330#define BOOST_TIMER_COUNTER (TIM1)->CNT
331#define VVT_TIMER_COMPARE (TIM1)->CCR3
332#define VVT_TIMER_COUNTER (TIM1)->CNT
333#define FAN_TIMER_COMPARE (TIM1)->CCR1
334#define FAN_TIMER_COUNTER (TIM1)->CNT
340#define IDLE_COUNTER (TIM1)->CNT
341#define IDLE_COMPARE (TIM1)->CCR4
343#define IDLE_TIMER_ENABLE() (TIM1)->SR = ~TIM_FLAG_CC4; (TIM1)->DIER |= TIM_DIER_CC4IE; (TIM1)->CR1 |= TIM_CR1_CEN;
344#define IDLE_TIMER_DISABLE() (TIM1)->DIER &= ~TIM_DIER_CC4IE
351#if defined(HAL_CAN_MODULE_ENABLED)
352#define NATIVE_CAN_AVAILABLE
353#include <src/STM32_CAN/STM32_CAN.h>
355extern STM32_CAN Can0;
358#if defined(STM32GENERIC)
359 #define SECONDARY_SERIAL_T SerialUART
361 #define SECONDARY_SERIAL_T HardwareSerial
EEPROMClass EEPROM_t
Definition board_avr2560.h:63
uint16_t COMPARE_TYPE
The timer overflow type.
Definition board_avr2560.h:33
static void IGN1_TIMER_ENABLE(void)
Definition board_stm32_official.h:285
static void IGN3_TIMER_DISABLE(void)
Definition board_stm32_official.h:292
static void IGN1_TIMER_DISABLE(void)
Definition board_stm32_official.h:290
static void FUEL2_TIMER_ENABLE(void)
Definition board_stm32_official.h:276
static void FUEL1_TIMER_DISABLE(void)
Definition board_stm32_official.h:280
static void FUEL4_TIMER_DISABLE(void)
Definition board_stm32_official.h:283
static void IGN3_TIMER_ENABLE(void)
Definition board_stm32_official.h:287
static void FUEL4_TIMER_ENABLE(void)
Definition board_stm32_official.h:278
static void FUEL5_TIMER_DISABLE(void)
Definition board_stm32_official.h:300
static void FUEL2_TIMER_DISABLE(void)
Definition board_stm32_official.h:281
static void FUEL3_TIMER_DISABLE(void)
Definition board_stm32_official.h:282
static void IGN5_TIMER_ENABLE(void)
Definition board_stm32_official.h:305
static bool pinIsReserved(uint8_t pin)
Definition board_stm32_official.h:164
static void FUEL7_TIMER_DISABLE(void)
Definition board_stm32_official.h:302
uint32_t digitalPinToInterrupt(uint32_t Interrupt_pin)
Definition board_stm32_official.h:103
constexpr uint16_t BLOCKING_FACTOR
Definition board_stm32_official.h:65
static void FUEL7_TIMER_ENABLE(void)
Definition board_stm32_official.h:297
static void FUEL3_TIMER_ENABLE(void)
Definition board_stm32_official.h:277
static void FUEL6_TIMER_ENABLE(void)
Definition board_stm32_official.h:296
static void IGN6_TIMER_DISABLE(void)
Definition board_stm32_official.h:311
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:301
static void IGN7_TIMER_DISABLE(void)
Definition board_stm32_official.h:312
static void IGN2_TIMER_DISABLE(void)
Definition board_stm32_official.h:291
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:313
static void IGN6_TIMER_ENABLE(void)
Definition board_stm32_official.h:306
static void IGN2_TIMER_ENABLE(void)
Definition board_stm32_official.h:286
static void IGN8_TIMER_ENABLE(void)
Definition board_stm32_official.h:308
static void FUEL8_TIMER_DISABLE(void)
Definition board_stm32_official.h:303
static void IGN4_TIMER_ENABLE(void)
Definition board_stm32_official.h:288
static void IGN7_TIMER_ENABLE(void)
Definition board_stm32_official.h:307
static void IGN5_TIMER_DISABLE(void)
Definition board_stm32_official.h:310
static void IGN4_TIMER_DISABLE(void)
Definition board_stm32_official.h:293
static void FUEL1_TIMER_ENABLE(void)
Definition board_stm32_official.h:275
static void FUEL8_TIMER_ENABLE(void)
Definition board_stm32_official.h:298
static void FUEL5_TIMER_ENABLE(void)
Definition board_stm32_official.h:295
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