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 SERIAL_BUFFER_SIZE 517
41#define FPU_MAX_SIZE 32
42#define TIMER_RESOLUTION 4
50 #define word(h, l) (((h) << 8) | (l))
53#if defined(ARDUINO_BLUEPILL_F103C8) || defined(ARDUINO_BLUEPILL_F103CB) \
54 || defined(ARDUINO_BLACKPILL_F401CC) || defined(ARDUINO_BLACKPILL_F411CE)
56 #ifndef NUM_DIGITAL_PINS
57 #define NUM_DIGITAL_PINS 35
60 #define LED_BUILTIN PB1
62#elif defined(STM32F407xx)
63 #ifndef NUM_DIGITAL_PINS
64 #define NUM_DIGITAL_PINS 75
69#if defined(MCU_STM32F103C8) || defined(MCU_STM32F103CB)
70 #define SMALL_FLASH_MODE
73#define BOARD_MAX_DIGITAL_PINS NUM_DIGITAL_PINS
74#define BOARD_MAX_IO_PINS NUM_DIGITAL_PINS
78#ifndef digitalPinToInterrupt
83 #define EEPROM_RESET_PIN USER_BTN
86#if defined(STM32F407xx)
91#if defined(SD_LOGGING)
95 #define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(50), &SD_SPI)
101#if SERIAL_UART_INSTANCE==2
107#if defined(ARDUINO_BLUEPILL_F103C8) || defined(ARDUINO_BLUEPILL_F103CB) \
108 || defined(ARDUINO_BLACKPILL_F401CC) || defined(ARDUINO_BLACKPILL_F411CE)
109 #define pinIsReserved(pin) ( ((pin) == PA11) || ((pin) == PA12) || ((pin) == PC14) || ((pin) == PC15) )
124 #ifdef USE_SPI_EEPROM
125 #define pinIsReserved(pin) ( ((pin) == PA11) || ((pin) == PA12) || ((pin) == PB3) || ((pin) == PB4) || ((pin) == PB5) || ((pin) == USE_SPI_EEPROM) )
127 #define pinIsReserved(pin) ( ((pin) == PA11) || ((pin) == PA12) || ((pin) == PB3) || ((pin) == PB4) || ((pin) == PB5) || ((pin) == PB0) )
131#define PWM_FAN_AVAILABLE
132#define BOARD_MAX_ADC_PINS NUM_ANALOG_INPUTS-1
135 #define LED_BUILTIN PA7
142#if defined(SRAM_AS_EEPROM)
143 #define EEPROM_LIB_H "src/BackupSram/BackupSramAsEEPROM.h"
145 #include EEPROM_LIB_H
148#elif defined(USE_SPI_EEPROM)
149 #define EEPROM_LIB_H "src/SPIAsEEPROM/SPIAsEEPROM.h"
151 #include EEPROM_LIB_H
159#elif defined(FRAM_AS_EEPROM)
160 #define EEPROM_LIB_H "src/FRAM/Fram.h"
162 #include EEPROM_LIB_H
163 #if defined(STM32F407xx)
170 #define EEPROM_LIB_H "src/SPIAsEEPROM/SPIAsEEPROM.h"
172 #include EEPROM_LIB_H
174 #if defined(STM32F401xC)
175 #define SMALL_FLASH_MODE
179#define RTC_LIB_H "STM32RTC.h"
198#define MAX_TIMER_PERIOD 262140UL
199#define uS_TO_TIMER_COMPARE(uS1) ((uS1) >> 2)
201#if defined(STM32F407xx)
202 #define INJ_CHANNELS 8
203 #define IGN_CHANNELS 8
205 #define INJ_CHANNELS 4
206 #define IGN_CHANNELS 5
208#define FUEL1_COUNTER (TIM3)->CNT
209#define FUEL2_COUNTER (TIM3)->CNT
210#define FUEL3_COUNTER (TIM3)->CNT
211#define FUEL4_COUNTER (TIM3)->CNT
213#define FUEL1_COMPARE (TIM3)->CCR1
214#define FUEL2_COMPARE (TIM3)->CCR2
215#define FUEL3_COMPARE (TIM3)->CCR3
216#define FUEL4_COMPARE (TIM3)->CCR4
218#define IGN1_COUNTER (TIM2)->CNT
219#define IGN2_COUNTER (TIM2)->CNT
220#define IGN3_COUNTER (TIM2)->CNT
221#define IGN4_COUNTER (TIM2)->CNT
223#define IGN1_COMPARE (TIM2)->CCR1
224#define IGN2_COMPARE (TIM2)->CCR2
225#define IGN3_COMPARE (TIM2)->CCR3
226#define IGN4_COMPARE (TIM2)->CCR4
228#define FUEL5_COUNTER (TIM5)->CNT
229#define FUEL6_COUNTER (TIM5)->CNT
230#define FUEL7_COUNTER (TIM5)->CNT
231#define FUEL8_COUNTER (TIM5)->CNT
233#define FUEL5_COMPARE (TIM5)->CCR1
234#define FUEL6_COMPARE (TIM5)->CCR2
235#define FUEL7_COMPARE (TIM5)->CCR3
236#define FUEL8_COMPARE (TIM5)->CCR4
238#define IGN5_COUNTER (TIM4)->CNT
239#define IGN6_COUNTER (TIM4)->CNT
240#define IGN7_COUNTER (TIM4)->CNT
241#define IGN8_COUNTER (TIM4)->CNT
243#define IGN5_COMPARE (TIM4)->CCR1
244#define IGN6_COMPARE (TIM4)->CCR2
245#define IGN7_COMPARE (TIM4)->CCR3
246#define IGN8_COMPARE (TIM4)->CCR4
294#define ENABLE_BOOST_TIMER() (TIM1)->SR = ~TIM_FLAG_CC2; (TIM1)->DIER |= TIM_DIER_CC2IE; (TIM1)->CR1 |= TIM_CR1_CEN;
295#define DISABLE_BOOST_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC2IE
297#define ENABLE_VVT_TIMER() (TIM1)->SR = ~TIM_FLAG_CC3; (TIM1)->DIER |= TIM_DIER_CC3IE; (TIM1)->CR1 |= TIM_CR1_CEN;
298#define DISABLE_VVT_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC3IE
300#define ENABLE_FAN_TIMER() (TIM1)->SR = ~TIM_FLAG_CC1; (TIM1)->DIER |= TIM_DIER_CC1IE; (TIM1)->CR1 |= TIM_CR1_CEN;
301#define DISABLE_FAN_TIMER() (TIM1)->DIER &= ~TIM_DIER_CC1IE
303#define BOOST_TIMER_COMPARE (TIM1)->CCR2
304#define BOOST_TIMER_COUNTER (TIM1)->CNT
305#define VVT_TIMER_COMPARE (TIM1)->CCR3
306#define VVT_TIMER_COUNTER (TIM1)->CNT
307#define FAN_TIMER_COMPARE (TIM1)->CCR1
308#define FAN_TIMER_COUNTER (TIM1)->CNT
314#define IDLE_COUNTER (TIM1)->CNT
315#define IDLE_COMPARE (TIM1)->CCR4
317#define IDLE_TIMER_ENABLE() (TIM1)->SR = ~TIM_FLAG_CC4; (TIM1)->DIER |= TIM_DIER_CC4IE; (TIM1)->CR1 |= TIM_CR1_CEN;
318#define IDLE_TIMER_DISABLE() (TIM1)->DIER &= ~TIM_DIER_CC4IE
325#if defined(HAL_CAN_MODULE_ENABLED)
326#define NATIVE_CAN_AVAILABLE
327#include <src/STM32_CAN/STM32_CAN.h>
332#if defined(STM32GENERIC)
333 #define SECONDARY_SERIAL_T SerialUART
335 #define SECONDARY_SERIAL_T HardwareSerial
static void IGN1_TIMER_ENABLE(void)
Definition board_stm32_official.h:259
static void IGN3_TIMER_DISABLE(void)
Definition board_stm32_official.h:266
static void IGN1_TIMER_DISABLE(void)
Definition board_stm32_official.h:264
static void FUEL2_TIMER_ENABLE(void)
Definition board_stm32_official.h:250
static void FUEL1_TIMER_DISABLE(void)
Definition board_stm32_official.h:254
static void FUEL4_TIMER_DISABLE(void)
Definition board_stm32_official.h:257
static void IGN3_TIMER_ENABLE(void)
Definition board_stm32_official.h:261
static void FUEL4_TIMER_ENABLE(void)
Definition board_stm32_official.h:252
InternalSTM32F4_EEPROM_Class EEPROM
static void FUEL5_TIMER_DISABLE(void)
Definition board_stm32_official.h:274
static void FUEL2_TIMER_DISABLE(void)
Definition board_stm32_official.h:255
static void FUEL3_TIMER_DISABLE(void)
Definition board_stm32_official.h:256
static void IGN5_TIMER_ENABLE(void)
Definition board_stm32_official.h:279
static void FUEL7_TIMER_DISABLE(void)
Definition board_stm32_official.h:276
uint32_t digitalPinToInterrupt(uint32_t Interrupt_pin)
Definition board_stm32_official.h:79
static void FUEL7_TIMER_ENABLE(void)
Definition board_stm32_official.h:271
static void FUEL3_TIMER_ENABLE(void)
Definition board_stm32_official.h:251
static void FUEL6_TIMER_ENABLE(void)
Definition board_stm32_official.h:270
static void IGN6_TIMER_DISABLE(void)
Definition board_stm32_official.h:285
uint16_t eeprom_address_t
Definition board_stm32_official.h:171
static void FUEL6_TIMER_DISABLE(void)
Definition board_stm32_official.h:275
static void IGN7_TIMER_DISABLE(void)
Definition board_stm32_official.h:286
static void IGN2_TIMER_DISABLE(void)
Definition board_stm32_official.h:265
static void IGN8_TIMER_DISABLE(void)
Definition board_stm32_official.h:287
static void IGN6_TIMER_ENABLE(void)
Definition board_stm32_official.h:280
static void IGN2_TIMER_ENABLE(void)
Definition board_stm32_official.h:260
static void IGN8_TIMER_ENABLE(void)
Definition board_stm32_official.h:282
static void FUEL8_TIMER_DISABLE(void)
Definition board_stm32_official.h:277
static void IGN4_TIMER_ENABLE(void)
Definition board_stm32_official.h:262
static void IGN7_TIMER_ENABLE(void)
Definition board_stm32_official.h:281
static void IGN5_TIMER_DISABLE(void)
Definition board_stm32_official.h:284
static void IGN4_TIMER_DISABLE(void)
Definition board_stm32_official.h:267
static void FUEL1_TIMER_ENABLE(void)
Definition board_stm32_official.h:249
static void FUEL8_TIMER_ENABLE(void)
Definition board_stm32_official.h:272
static void FUEL5_TIMER_ENABLE(void)
Definition board_stm32_official.h:269
static uint32_t rshift(uint32_t a)
Bitwise right shift - generic, unoptimized, case.
Definition bit_shifts.h:348