6#include <HardwareTimer.h>
7#include <HardwareSerial.h>
10#include "src/pins/inputPin.h"
11#include "src/pins/outputPin.h"
17 #error "USBCON must be defined in boards.txt"
20 #error "USBD_USE_CDC must be defined in boards.txt"
25 #include "stm32f1xx_ll_tim.h"
27 #include "stm32f3xx_ll_tim.h"
29 #include "stm32f4xx_ll_tim.h"
30 #if defined(STM32F407xx) && !defined(HAL_CAN_MODULE_ENABLED)
31 #warning "CAN module is not enabled. Internal CAN will NOT be available"
34 #include "stm32f4xx_ll_tim.h"
65#define TS_SERIAL_BUFFER_SIZE 517
66#define FPU_MAX_SIZE 32
71 #define word(h, l) (((h) << 8) | (l))
74#if defined(ARDUINO_BLUEPILL_F103C8) || defined(ARDUINO_BLUEPILL_F103CB) \
75 || defined(ARDUINO_BLACKPILL_F401CC) || defined(ARDUINO_BLACKPILL_F411CE)
77 #ifndef NUM_DIGITAL_PINS
78 #define NUM_DIGITAL_PINS 35
81 #define LED_BUILTIN PB1
83#elif defined(STM32F407xx)
84 #ifndef NUM_DIGITAL_PINS
85 #define NUM_DIGITAL_PINS 75
90#if defined(MCU_STM32F103C8) || defined(MCU_STM32F103CB)
91 #define SMALL_FLASH_MODE
94#define BOARD_MAX_DIGITAL_PINS NUM_DIGITAL_PINS
95#define BOARD_MAX_IO_PINS NUM_DIGITAL_PINS
97extern "C" char*
sbrk(
int incr);
99#ifndef digitalPinToInterrupt
104 #define EEPROM_RESET_PIN USER_BTN
107#if defined(STM32F407xx)
112#if defined(SD_LOGGING)
115 extern SPIClass SD_SPI;
116 #define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(50), &SD_SPI)
122#if SERIAL_UART_INSTANCE==2
123HardwareSerial Serial1(PA10, PA9);
128#if defined(ARDUINO_BLUEPILL_F103C8) || defined(ARDUINO_BLUEPILL_F103CB) \
129 || defined(ARDUINO_BLACKPILL_F401CC) || defined(ARDUINO_BLACKPILL_F411CE)
131 return (pin == (uint8_t)PA11)
132 || (pin == (uint8_t)PA12)
133 || (pin == (uint8_t)PC14)
134 || (pin == (uint8_t)PC15)
151 #ifdef USE_SPI_EEPROM
153 return (pin == (uint8_t)PA11)
154 || (pin == (uint8_t)PA12)
155 || (pin == (uint8_t)PB3)
156 || (pin == (uint8_t)PB4)
157 || (pin == (uint8_t)USE_SPI_EEPROM)
162 return (pin == (uint8_t)PA11)
163 || (pin == (uint8_t)PA12)
164 || (pin == (uint8_t)PB3)
165 || (pin == (uint8_t)PB4)
166 || (pin == (uint8_t)PB5)
167 || (pin == (uint8_t)PB0)
173#define PWM_FAN_AVAILABLE
176 #define LED_BUILTIN PA7
183#if defined(STM32F401xC)
184 #define SMALL_FLASH_MODE
187#define RTC_LIB_H "STM32RTC.h"
206#if defined(STM32F407xx)
207 #define INJ_CHANNELS 8
208 #define IGN_CHANNELS 8
210 #define INJ_CHANNELS 4
211 #define IGN_CHANNELS 5
213#define FUEL1_COUNTER (TIM3)->CNT
214#define FUEL2_COUNTER (TIM3)->CNT
215#define FUEL3_COUNTER (TIM3)->CNT
216#define FUEL4_COUNTER (TIM3)->CNT
218#define FUEL1_COMPARE (TIM3)->CCR1
219#define FUEL2_COMPARE (TIM3)->CCR2
220#define FUEL3_COMPARE (TIM3)->CCR3
221#define FUEL4_COMPARE (TIM3)->CCR4
223#define IGN1_COUNTER (TIM2)->CNT
224#define IGN2_COUNTER (TIM2)->CNT
225#define IGN3_COUNTER (TIM2)->CNT
226#define IGN4_COUNTER (TIM2)->CNT
228#define IGN1_COMPARE (TIM2)->CCR1
229#define IGN2_COMPARE (TIM2)->CCR2
230#define IGN3_COMPARE (TIM2)->CCR3
231#define IGN4_COMPARE (TIM2)->CCR4
233#define FUEL5_COUNTER (TIM5)->CNT
234#define FUEL6_COUNTER (TIM5)->CNT
235#define FUEL7_COUNTER (TIM5)->CNT
236#define FUEL8_COUNTER (TIM5)->CNT
238#define FUEL5_COMPARE (TIM5)->CCR1
239#define FUEL6_COMPARE (TIM5)->CCR2
240#define FUEL7_COMPARE (TIM5)->CCR3
241#define FUEL8_COMPARE (TIM5)->CCR4
243#define IGN5_COUNTER (TIM4)->CNT
244#define IGN6_COUNTER (TIM4)->CNT
245#define IGN7_COUNTER (TIM4)->CNT
246#define IGN8_COUNTER (TIM4)->CNT
248#define IGN5_COMPARE (TIM4)->CCR1
249#define IGN6_COMPARE (TIM4)->CCR2
250#define IGN7_COMPARE (TIM4)->CCR3
251#define IGN8_COMPARE (TIM4)->CCR4
254static inline void FUEL1_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC1; (TIM3)->DIER |= TIM_DIER_CC1IE;}
255static inline void FUEL2_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC2; (TIM3)->DIER |= TIM_DIER_CC2IE;}
256static inline void FUEL3_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC3; (TIM3)->DIER |= TIM_DIER_CC3IE;}
257static inline void FUEL4_TIMER_ENABLE(
void) {(TIM3)->CR1 |= TIM_CR1_CEN; (TIM3)->SR = ~TIM_FLAG_CC4; (TIM3)->DIER |= TIM_DIER_CC4IE;}
264static inline void IGN1_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC1; (TIM2)->DIER |= TIM_DIER_CC1IE;}
265static inline void IGN2_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC2; (TIM2)->DIER |= TIM_DIER_CC2IE;}
266static inline void IGN3_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC3; (TIM2)->DIER |= TIM_DIER_CC3IE;}
267static inline void IGN4_TIMER_ENABLE(
void) {(TIM2)->CR1 |= TIM_CR1_CEN; (TIM2)->SR = ~TIM_FLAG_CC4; (TIM2)->DIER |= TIM_DIER_CC4IE;}
274static 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;}
275static 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;}
276static 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;}
277static 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;}
284static inline void IGN5_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC1; (TIM4)->DIER |= TIM_DIER_CC1IE;}
285static inline void IGN6_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC2; (TIM4)->DIER |= TIM_DIER_CC2IE;}
286static inline void IGN7_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC3; (TIM4)->DIER |= TIM_DIER_CC3IE;}
287static inline void IGN8_TIMER_ENABLE(
void) {(TIM4)->CR1 |= TIM_CR1_CEN; (TIM4)->SR = ~TIM_FLAG_CC4; (TIM4)->DIER |= TIM_DIER_CC4IE;}
299#define ENABLE_BOOST_TIMER() (TIM1)->SR = ~TIM_FLAG_CC2; (TIM1)->DIER |= TIM_DIER_CC2IE; (TIM1)->CR1 |= TIM_CR1_CEN;
300#define DISABLE_BOOST_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC2IE
302#define ENABLE_VVT_TIMER() (TIM1)->SR = ~TIM_FLAG_CC3; (TIM1)->DIER |= TIM_DIER_CC3IE; (TIM1)->CR1 |= TIM_CR1_CEN;
303#define DISABLE_VVT_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC3IE
305#define ENABLE_FAN_TIMER() (TIM1)->SR = ~TIM_FLAG_CC1; (TIM1)->DIER |= TIM_DIER_CC1IE; (TIM1)->CR1 |= TIM_CR1_CEN;
306#define DISABLE_FAN_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC1IE
308#define BOOST_TIMER_COMPARE (TIM1)->CCR2
309#define BOOST_TIMER_COUNTER (TIM1)->CNT
310#define VVT_TIMER_COMPARE (TIM1)->CCR3
311#define VVT_TIMER_COUNTER (TIM1)->CNT
312#define FAN_TIMER_COMPARE (TIM1)->CCR1
313#define FAN_TIMER_COUNTER (TIM1)->CNT
319#define IDLE_COUNTER (TIM1)->CNT
320#define IDLE_COMPARE (TIM1)->CCR4
322#define IDLE_TIMER_ENABLE() (TIM1)->SR = ~TIM_FLAG_CC4; (TIM1)->DIER |= TIM_DIER_CC4IE; (TIM1)->CR1 |= TIM_CR1_CEN;
323#define IDLE_TIMER_DISABLE() (TIM1)->DIER &= ~TIM_DIER_CC4IE
330#if defined(HAL_CAN_MODULE_ENABLED)
331#define NATIVE_CAN_AVAILABLE
332#include <src/STM32_CAN/STM32_CAN.h>
334extern STM32_CAN Can0;
337#if defined(STM32GENERIC)
338 #define SECONDARY_SERIAL_T SerialUART
340 #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:34
fastInputPin_t boardInputPin_t
Definition board_avr2560.h:175
fastOutputPin_t boardOutputPin_t
Definition board_avr2560.h:176
static void IGN1_TIMER_ENABLE(void)
Definition board_stm32_official.h:264
static void IGN3_TIMER_DISABLE(void)
Definition board_stm32_official.h:271
static void IGN1_TIMER_DISABLE(void)
Definition board_stm32_official.h:269
static void FUEL2_TIMER_ENABLE(void)
Definition board_stm32_official.h:255
static void FUEL1_TIMER_DISABLE(void)
Definition board_stm32_official.h:259
static void FUEL4_TIMER_DISABLE(void)
Definition board_stm32_official.h:262
static void IGN3_TIMER_ENABLE(void)
Definition board_stm32_official.h:266
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:257
static void FUEL5_TIMER_DISABLE(void)
Definition board_stm32_official.h:279
static void FUEL2_TIMER_DISABLE(void)
Definition board_stm32_official.h:260
static void FUEL3_TIMER_DISABLE(void)
Definition board_stm32_official.h:261
static void IGN5_TIMER_ENABLE(void)
Definition board_stm32_official.h:284
static bool pinIsReserved(uint8_t pin)
Definition board_stm32_official.h:161
static void FUEL7_TIMER_DISABLE(void)
Definition board_stm32_official.h:281
uint32_t digitalPinToInterrupt(uint32_t Interrupt_pin)
Definition board_stm32_official.h:100
constexpr uint16_t BLOCKING_FACTOR
Definition board_stm32_official.h:67
static void FUEL7_TIMER_ENABLE(void)
Definition board_stm32_official.h:276
static void FUEL3_TIMER_ENABLE(void)
Definition board_stm32_official.h:256
static void FUEL6_TIMER_ENABLE(void)
Definition board_stm32_official.h:275
static void IGN6_TIMER_DISABLE(void)
Definition board_stm32_official.h:290
static constexpr uint32_t ticksToMicros(COMPARE_TYPE ticks)
Convert timer ticks to µS.
Definition board_stm32_official.h:60
static void FUEL6_TIMER_DISABLE(void)
Definition board_stm32_official.h:280
static void IGN7_TIMER_DISABLE(void)
Definition board_stm32_official.h:291
static void IGN2_TIMER_DISABLE(void)
Definition board_stm32_official.h:270
constexpr uint32_t TIMER_RESOLUTION
The timer tick length in µS.
Definition board_stm32_official.h:49
static void IGN8_TIMER_DISABLE(void)
Definition board_stm32_official.h:292
static void IGN6_TIMER_ENABLE(void)
Definition board_stm32_official.h:285
static void IGN2_TIMER_ENABLE(void)
Definition board_stm32_official.h:265
static void IGN8_TIMER_ENABLE(void)
Definition board_stm32_official.h:287
static void FUEL8_TIMER_DISABLE(void)
Definition board_stm32_official.h:282
static void IGN4_TIMER_ENABLE(void)
Definition board_stm32_official.h:267
static void IGN7_TIMER_ENABLE(void)
Definition board_stm32_official.h:286
static void IGN5_TIMER_DISABLE(void)
Definition board_stm32_official.h:289
static void IGN4_TIMER_DISABLE(void)
Definition board_stm32_official.h:272
static void FUEL1_TIMER_ENABLE(void)
Definition board_stm32_official.h:254
static void FUEL8_TIMER_ENABLE(void)
Definition board_stm32_official.h:277
static void FUEL5_TIMER_ENABLE(void)
Definition board_stm32_official.h:274
constexpr uint16_t TABLE_BLOCKING_FACTOR
Definition board_stm32_official.h:68
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:52