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"
39#define COMPARE_TYPE uint16_t
40#define TS_SERIAL_BUFFER_SIZE 517
41#define FPU_MAX_SIZE 32
42#define TIMER_RESOLUTION 4
52 #define word(h, l) (((h) << 8) | (l))
55#if defined(ARDUINO_BLUEPILL_F103C8) || defined(ARDUINO_BLUEPILL_F103CB) \
56 || defined(ARDUINO_BLACKPILL_F401CC) || defined(ARDUINO_BLACKPILL_F411CE)
58 #ifndef NUM_DIGITAL_PINS
59 #define NUM_DIGITAL_PINS 35
62 #define LED_BUILTIN PB1
64#elif defined(STM32F407xx)
65 #ifndef NUM_DIGITAL_PINS
66 #define NUM_DIGITAL_PINS 75
71#if defined(MCU_STM32F103C8) || defined(MCU_STM32F103CB)
72 #define SMALL_FLASH_MODE
75#define BOARD_MAX_DIGITAL_PINS NUM_DIGITAL_PINS
76#define BOARD_MAX_IO_PINS NUM_DIGITAL_PINS
78extern "C" char*
sbrk(
int incr);
80#ifndef digitalPinToInterrupt
85 #define EEPROM_RESET_PIN USER_BTN
88#if defined(STM32F407xx)
93#if defined(SD_LOGGING)
96 extern SPIClass SD_SPI;
97 #define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(50), &SD_SPI)
103#if SERIAL_UART_INSTANCE==2
104HardwareSerial Serial1(PA10, PA9);
109#if defined(ARDUINO_BLUEPILL_F103C8) || defined(ARDUINO_BLUEPILL_F103CB) \
110 || defined(ARDUINO_BLACKPILL_F401CC) || defined(ARDUINO_BLACKPILL_F411CE)
112 return (pin == (uint8_t)PA11)
113 || (pin == (uint8_t)PA12)
114 || (pin == (uint8_t)PC14)
115 || (pin == (uint8_t)PC15)
132 #ifdef USE_SPI_EEPROM
134 return (pin == (uint8_t)PA11)
135 || (pin == (uint8_t)PA12)
136 || (pin == (uint8_t)PB3)
137 || (pin == (uint8_t)PB4)
138 || (pin == (uint8_t)USE_SPI_EEPROM)
143 return (pin == (uint8_t)PA11)
144 || (pin == (uint8_t)PA12)
145 || (pin == (uint8_t)PB3)
146 || (pin == (uint8_t)PB4)
147 || (pin == (uint8_t)PB5)
148 || (pin == (uint8_t)PB0)
154#define PWM_FAN_AVAILABLE
155#define BOARD_MAX_ADC_PINS NUM_ANALOG_INPUTS-1
158 #define LED_BUILTIN PA7
165#if defined(SRAM_AS_EEPROM)
166 #define EEPROM_LIB_H "src/BackupSram/BackupSramAsEEPROM.h"
168 #include EEPROM_LIB_H
169 extern BackupSramAsEEPROM
EEPROM;
171#elif defined(USE_SPI_EEPROM)
172 #define EEPROM_LIB_H "src/SPIAsEEPROM/SPIAsEEPROM.h"
174 #include EEPROM_LIB_H
175 extern SPIClass SPI_for_flash;
178 extern EEPROM_Emulation_Config EmulatedEEPROMMconfig;
179 extern Flash_SPI_Config SPIconfig;
180 extern SPI_EEPROM_Class
EEPROM;
182#elif defined(FRAM_AS_EEPROM)
183 #define EEPROM_LIB_H "src/FRAM/Fram.h"
185 #include EEPROM_LIB_H
186 #if defined(STM32F407xx)
193 #define EEPROM_LIB_H "src/SPIAsEEPROM/SPIAsEEPROM.h"
195 #include EEPROM_LIB_H
196 extern InternalSTM32F4_EEPROM_Class
EEPROM;
197 #if defined(STM32F401xC)
198 #define SMALL_FLASH_MODE
202#define RTC_LIB_H "STM32RTC.h"
221#define MAX_TIMER_PERIOD 262140UL
222#define uS_TO_TIMER_COMPARE(uS1) (COMPARE_TYPE)((uS1) >> 2U)
224#if defined(STM32F407xx)
225 #define INJ_CHANNELS 8
226 #define IGN_CHANNELS 8
228 #define INJ_CHANNELS 4
229 #define IGN_CHANNELS 5
231#define FUEL1_COUNTER (TIM3)->CNT
232#define FUEL2_COUNTER (TIM3)->CNT
233#define FUEL3_COUNTER (TIM3)->CNT
234#define FUEL4_COUNTER (TIM3)->CNT
236#define FUEL1_COMPARE (TIM3)->CCR1
237#define FUEL2_COMPARE (TIM3)->CCR2
238#define FUEL3_COMPARE (TIM3)->CCR3
239#define FUEL4_COMPARE (TIM3)->CCR4
241#define IGN1_COUNTER (TIM2)->CNT
242#define IGN2_COUNTER (TIM2)->CNT
243#define IGN3_COUNTER (TIM2)->CNT
244#define IGN4_COUNTER (TIM2)->CNT
246#define IGN1_COMPARE (TIM2)->CCR1
247#define IGN2_COMPARE (TIM2)->CCR2
248#define IGN3_COMPARE (TIM2)->CCR3
249#define IGN4_COMPARE (TIM2)->CCR4
251#define FUEL5_COUNTER (TIM5)->CNT
252#define FUEL6_COUNTER (TIM5)->CNT
253#define FUEL7_COUNTER (TIM5)->CNT
254#define FUEL8_COUNTER (TIM5)->CNT
256#define FUEL5_COMPARE (TIM5)->CCR1
257#define FUEL6_COMPARE (TIM5)->CCR2
258#define FUEL7_COMPARE (TIM5)->CCR3
259#define FUEL8_COMPARE (TIM5)->CCR4
261#define IGN5_COUNTER (TIM4)->CNT
262#define IGN6_COUNTER (TIM4)->CNT
263#define IGN7_COUNTER (TIM4)->CNT
264#define IGN8_COUNTER (TIM4)->CNT
266#define IGN5_COMPARE (TIM4)->CCR1
267#define IGN6_COMPARE (TIM4)->CCR2
268#define IGN7_COMPARE (TIM4)->CCR3
269#define IGN8_COMPARE (TIM4)->CCR4
272static inline void FUEL1_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC1; (TIM3)->DIER |= TIM_DIER_CC1IE;}
273static inline void FUEL2_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC2; (TIM3)->DIER |= TIM_DIER_CC2IE;}
274static inline void FUEL3_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC3; (TIM3)->DIER |= TIM_DIER_CC3IE;}
275static inline void FUEL4_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC4; (TIM3)->DIER |= TIM_DIER_CC4IE;}
282static inline void IGN1_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC1; (TIM2)->DIER |= TIM_DIER_CC1IE;}
283static inline void IGN2_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC2; (TIM2)->DIER |= TIM_DIER_CC2IE;}
284static inline void IGN3_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC3; (TIM2)->DIER |= TIM_DIER_CC3IE;}
285static inline void IGN4_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC4; (TIM2)->DIER |= TIM_DIER_CC4IE;}
292static 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;}
293static 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;}
294static 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;}
295static 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;}
302static inline void IGN5_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC1; (TIM4)->DIER |= TIM_DIER_CC1IE;}
303static inline void IGN6_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC2; (TIM4)->DIER |= TIM_DIER_CC2IE;}
304static inline void IGN7_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC3; (TIM4)->DIER |= TIM_DIER_CC3IE;}
305static inline void IGN8_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC4; (TIM4)->DIER |= TIM_DIER_CC4IE;}
317#define ENABLE_BOOST_TIMER() (TIM1)->SR = ~TIM_FLAG_CC2; (TIM1)->DIER |= TIM_DIER_CC2IE; (TIM1)->CR1 |= TIM_CR1_CEN;
318#define DISABLE_BOOST_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC2IE
320#define ENABLE_VVT_TIMER() (TIM1)->SR = ~TIM_FLAG_CC3; (TIM1)->DIER |= TIM_DIER_CC3IE; (TIM1)->CR1 |= TIM_CR1_CEN;
321#define DISABLE_VVT_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC3IE
323#define ENABLE_FAN_TIMER() (TIM1)->SR = ~TIM_FLAG_CC1; (TIM1)->DIER |= TIM_DIER_CC1IE; (TIM1)->CR1 |= TIM_CR1_CEN;
324#define DISABLE_FAN_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC1IE
326#define BOOST_TIMER_COMPARE (TIM1)->CCR2
327#define BOOST_TIMER_COUNTER (TIM1)->CNT
328#define VVT_TIMER_COMPARE (TIM1)->CCR3
329#define VVT_TIMER_COUNTER (TIM1)->CNT
330#define FAN_TIMER_COMPARE (TIM1)->CCR1
331#define FAN_TIMER_COUNTER (TIM1)->CNT
337#define IDLE_COUNTER (TIM1)->CNT
338#define IDLE_COMPARE (TIM1)->CCR4
340#define IDLE_TIMER_ENABLE() (TIM1)->SR = ~TIM_FLAG_CC4; (TIM1)->DIER |= TIM_DIER_CC4IE; (TIM1)->CR1 |= TIM_CR1_CEN;
341#define IDLE_TIMER_DISABLE() (TIM1)->DIER &= ~TIM_DIER_CC4IE
348#if defined(HAL_CAN_MODULE_ENABLED)
349#define NATIVE_CAN_AVAILABLE
350#include <src/STM32_CAN/STM32_CAN.h>
352extern STM32_CAN Can0;
355#if defined(STM32GENERIC)
356 #define SECONDARY_SERIAL_T SerialUART
358 #define SECONDARY_SERIAL_T HardwareSerial
static void IGN1_TIMER_ENABLE(void)
Definition board_stm32_official.h:282
static void IGN3_TIMER_DISABLE(void)
Definition board_stm32_official.h:289
static void IGN1_TIMER_DISABLE(void)
Definition board_stm32_official.h:287
static void FUEL2_TIMER_ENABLE(void)
Definition board_stm32_official.h:273
static void FUEL1_TIMER_DISABLE(void)
Definition board_stm32_official.h:277
static void FUEL4_TIMER_DISABLE(void)
Definition board_stm32_official.h:280
static void IGN3_TIMER_ENABLE(void)
Definition board_stm32_official.h:284
static void FUEL4_TIMER_ENABLE(void)
Definition board_stm32_official.h:275
InternalSTM32F4_EEPROM_Class EEPROM
static void FUEL5_TIMER_DISABLE(void)
Definition board_stm32_official.h:297
static void FUEL2_TIMER_DISABLE(void)
Definition board_stm32_official.h:278
static void FUEL3_TIMER_DISABLE(void)
Definition board_stm32_official.h:279
static void IGN5_TIMER_ENABLE(void)
Definition board_stm32_official.h:302
static bool pinIsReserved(uint8_t pin)
Definition board_stm32_official.h:142
static void FUEL7_TIMER_DISABLE(void)
Definition board_stm32_official.h:299
uint32_t digitalPinToInterrupt(uint32_t Interrupt_pin)
Definition board_stm32_official.h:81
constexpr uint16_t BLOCKING_FACTOR
Definition board_stm32_official.h:43
static void FUEL7_TIMER_ENABLE(void)
Definition board_stm32_official.h:294
static void FUEL3_TIMER_ENABLE(void)
Definition board_stm32_official.h:274
static void FUEL6_TIMER_ENABLE(void)
Definition board_stm32_official.h:293
static void IGN6_TIMER_DISABLE(void)
Definition board_stm32_official.h:308
uint16_t eeprom_address_t
Definition board_stm32_official.h:194
static void FUEL6_TIMER_DISABLE(void)
Definition board_stm32_official.h:298
static void IGN7_TIMER_DISABLE(void)
Definition board_stm32_official.h:309
static void IGN2_TIMER_DISABLE(void)
Definition board_stm32_official.h:288
static void IGN8_TIMER_DISABLE(void)
Definition board_stm32_official.h:310
static void IGN6_TIMER_ENABLE(void)
Definition board_stm32_official.h:303
static void IGN2_TIMER_ENABLE(void)
Definition board_stm32_official.h:283
static void IGN8_TIMER_ENABLE(void)
Definition board_stm32_official.h:305
static void FUEL8_TIMER_DISABLE(void)
Definition board_stm32_official.h:300
static void IGN4_TIMER_ENABLE(void)
Definition board_stm32_official.h:285
static void IGN7_TIMER_ENABLE(void)
Definition board_stm32_official.h:304
static void IGN5_TIMER_DISABLE(void)
Definition board_stm32_official.h:307
static void IGN4_TIMER_DISABLE(void)
Definition board_stm32_official.h:290
static void FUEL1_TIMER_ENABLE(void)
Definition board_stm32_official.h:272
static void FUEL8_TIMER_ENABLE(void)
Definition board_stm32_official.h:295
static void FUEL5_TIMER_ENABLE(void)
Definition board_stm32_official.h:292
constexpr uint16_t TABLE_BLOCKING_FACTOR
Definition board_stm32_official.h:44