Speeduino
Loading...
Searching...
No Matches
board_stm32_official.h
Go to the documentation of this file.
1#pragma once
2
5#include <Arduino.h>
6#include <HardwareTimer.h>
7#include <HardwareSerial.h>
8#include "STM32RTC.h"
9#include <SPI.h>
10
11#define CORE_STM32
12
13#ifndef PLATFORMIO
14#ifndef USBCON
15 #error "USBCON must be defined in boards.txt"
16#endif
17#ifndef USBD_USE_CDC
18 #error "USBD_USE_CDC must be defined in boards.txt"
19#endif
20#endif
21
22#if defined(STM32F1)
23 #include "stm32f1xx_ll_tim.h"
24#elif defined(STM32F3)
25 #include "stm32f3xx_ll_tim.h"
26#elif defined(STM32F4)
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"
30 #endif
31#else /*Default should be STM32F4*/
32 #include "stm32f4xx_ll_tim.h"
33#endif
34
35/*
36***********************************************************************************************************
37* General
38*/
39
44using COMPARE_TYPE = uint16_t;
45
47constexpr uint32_t TIMER_RESOLUTION = 4U;
48
50static constexpr COMPARE_TYPE uS_TO_TIMER_COMPARE(uint32_t micros)
51{
52 // Faster than micros/TIMER_RESOLUTION
53 constexpr uint32_t SHIFT = TIMER_RESOLUTION/2U;
54 return (COMPARE_TYPE)(micros >> SHIFT);
55}
56
58static constexpr uint32_t ticksToMicros(COMPARE_TYPE ticks)
59{
60 return ticks * TIMER_RESOLUTION;
61}
62
63#define TS_SERIAL_BUFFER_SIZE 517 //Size of the serial buffer used by new comms protocol. For SD transfers this must be at least 512 + 1 (flag) + 4 (sector)
64#define FPU_MAX_SIZE 32 //Size of the FPU buffer. 0 means no FPU.
65constexpr uint16_t BLOCKING_FACTOR = 121;
66constexpr uint16_t TABLE_BLOCKING_FACTOR = 64;
67
68#ifndef word
69 #define word(h, l) (((h) << 8) | (l)) //word() function not defined for this platform in the main library
70#endif
71
72#if defined(ARDUINO_BLUEPILL_F103C8) || defined(ARDUINO_BLUEPILL_F103CB) \
73 || defined(ARDUINO_BLACKPILL_F401CC) || defined(ARDUINO_BLACKPILL_F411CE)
74 //STM32 Pill boards
75 #ifndef NUM_DIGITAL_PINS
76 #define NUM_DIGITAL_PINS 35
77 #endif
78 #ifndef LED_BUILTIN
79 #define LED_BUILTIN PB1 //Maple Mini
80 #endif
81#elif defined(STM32F407xx)
82 #ifndef NUM_DIGITAL_PINS
83 #define NUM_DIGITAL_PINS 75
84 #endif
85#elif defined(BOARD_FCR_MICRO_F4)
86 #ifndef NUM_DIGITAL_PINS
87 #define NUM_DIGITAL_PINS 100
88 #endif
89 #define BOARD_ANALOG_SCALE_NUM 5148
90 #define BOARD_ANALOG_SCALE_DEN 5000
91#endif
92
93//Specific mode for Bluepill due to its small flash size. This disables a number of strings from being compiled into the flash
94#if defined(MCU_STM32F103C8) || defined(MCU_STM32F103CB)
95 #define SMALL_FLASH_MODE
96#endif
97
98#define BOARD_MAX_DIGITAL_PINS NUM_DIGITAL_PINS
99#define BOARD_MAX_IO_PINS NUM_DIGITAL_PINS
100#if __GNUC__ < 7 //Already included on GCC 7
101extern "C" char* sbrk(int incr); //Used to freeRam
102#endif
103#ifndef digitalPinToInterrupt
104inline uint32_t digitalPinToInterrupt(uint32_t Interrupt_pin) { return Interrupt_pin; } //This isn't included in the stm32duino libs (yet)
105#endif
106
107#if defined(USER_BTN)
108 #define EEPROM_RESET_PIN USER_BTN //onboard key0 for black STM32F407 boards and blackpills, keep pressed during boot to reset eeprom
109#endif
110
111#if defined(STM32F407xx)
112 //Comment out this to disable SD logging for STM32 if needed. Currently SD logging for STM32 is experimental feature for F407.
113 #define SD_LOGGING
114#endif
115
116#if defined(SD_LOGGING)
117 #define RTC_ENABLED
118 //SD logging with STM32 uses SD card in SPI mode, because used SD library doesn't support SDIO implementation. By default SPI3 is used that uses same pins as SDIO also, but in different order.
119 extern SPIClass SD_SPI; //SPI3_MOSI, SPI3_MISO, SPI3_SCK
120 #define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(50), &SD_SPI)
121 //Alternatively same SPI bus can be used as there is for SPI flash. But this is not recommended due to slower speed and other possible problems.
122 //#define SD_CONFIG SdSpiConfig(SD_CS_PIN, SHARED_SPI, SD_SCK_MHZ(50), &SPI_for_flash)
123#endif
124
125//When building for Black board Serial1 is instantiated,building generic STM32F4x7 has serial2 and serial 1 must be done here
126#if SERIAL_UART_INSTANCE==2
127HardwareSerial Serial1(PA10, PA9);
128#endif
129
130extern STM32RTC& rtc;
131
132#if defined(ARDUINO_BLUEPILL_F103C8) || defined(ARDUINO_BLUEPILL_F103CB) \
133 || defined(ARDUINO_BLACKPILL_F401CC) || defined(ARDUINO_BLACKPILL_F411CE)
134 static inline bool pinIsReserved(uint8_t pin) {
135 return (pin == (uint8_t)PA11)
136 || (pin == (uint8_t)PA12)
137 || (pin == (uint8_t)PC14)
138 || (pin == (uint8_t)PC15)
139 ;
140 }
141
142 #ifndef PB11 //Hack for F4 BlackPills
143 #define PB11 PB10
144 #endif
145 //Hack to allow compilation on small STM boards
146 #ifndef A10
147 #define A10 PA0
148 #define A11 PA1
149 #define A12 PA2
150 #define A13 PA3
151 #define A14 PA4
152 #define A15 PA5
153 #endif
154#else
155 #ifdef USE_SPI_EEPROM
156 #if defined(BOARD_FCR_MICRO_F4) //FCR Micro F4: USB(PA11/PA12) + VBUS sense(PA9) + SPI3 flash(PC10/11/12) + CS + CAN1 ALT_2(PD0/PD1)
157 static inline bool pinIsReserved(uint8_t pin) {
158 PinName p = digitalPinToPinName(pin);
159 return (p == PA_11)
160 || (p == PA_12)
161 || (p == PA_9)
162 || (p == PC_10)
163 || (p == PC_11)
164 || (p == PC_12)
165 || (p == (PinName)USE_SPI_EEPROM)
166 || (p == PD_0)
167 || (p == PD_1)
168 ;
169 }
170 #else
171 static inline bool pinIsReserved(uint8_t pin) {
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)
177 ;
178 }
179 #endif
180 #else
181 static inline bool pinIsReserved(uint8_t pin) {
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)
188 ;
189 }
190 #endif
191#endif
192
193#define PWM_FAN_AVAILABLE
194
195#ifndef LED_BUILTIN
196 #define LED_BUILTIN PA7
197#endif
198
199/*
200***********************************************************************************************************
201* EEPROM emulation
202*/
203#if defined(STM32F401xC)
204 #define SMALL_FLASH_MODE
205#endif
206
207#define RTC_LIB_H "STM32RTC.h"
208
209/*
210***********************************************************************************************************
211* Schedules
212* Timers Table for STM32F1
213* TIMER1 TIMER2 TIMER3 TIMER4
214* 1 - FAN 1 - INJ1 1 - IGN1 1 - oneMSInterval
215* 2 - BOOST 2 - INJ2 2 - IGN2 2 -
216* 3 - VVT 3 - INJ3 3 - IGN3 3 -
217* 4 - IDLE 4 - INJ4 4 - IGN4 4 -
218*
219* Timers Table for STM32F4
220* TIMER1 | TIMER2 | TIMER3 | TIMER4 | TIMER5 | TIMER11
221* 1 - FAN |1 - IGN1 |1 - INJ1 |1 - IGN5 |1 - INJ5 |1 - oneMSInterval
222* 2 - BOOST |2 - IGN2 |2 - INJ2 |2 - IGN6 |2 - INJ6 |
223* 3 - VVT |3 - IGN3 |3 - INJ3 |3 - IGN7 |3 - INJ7 |
224* 4 - IDLE |4 - IGN4 |4 - INJ4 |4 - IGN8 |4 - INJ8 |
225*/
226#if defined(STM32F407xx) //F407 can do 8x8 STM32F401/STM32F411 don't
227 #ifndef INJ_CHANNELS
228 #define INJ_CHANNELS 8
229 #endif
230 #ifndef IGN_CHANNELS
231 #define IGN_CHANNELS 8
232 #endif
233#else
234 #ifndef INJ_CHANNELS
235 #define INJ_CHANNELS 4
236 #endif
237 #ifndef IGN_CHANNELS
238 #define IGN_CHANNELS 5
239 #endif
240#endif
241#define FUEL1_COUNTER (TIM3)->CNT
242#define FUEL2_COUNTER (TIM3)->CNT
243#define FUEL3_COUNTER (TIM3)->CNT
244#define FUEL4_COUNTER (TIM3)->CNT
245
246#define FUEL1_COMPARE (TIM3)->CCR1
247#define FUEL2_COMPARE (TIM3)->CCR2
248#define FUEL3_COMPARE (TIM3)->CCR3
249#define FUEL4_COMPARE (TIM3)->CCR4
250
251#define IGN1_COUNTER (TIM2)->CNT
252#define IGN2_COUNTER (TIM2)->CNT
253#define IGN3_COUNTER (TIM2)->CNT
254#define IGN4_COUNTER (TIM2)->CNT
255
256#define IGN1_COMPARE (TIM2)->CCR1
257#define IGN2_COMPARE (TIM2)->CCR2
258#define IGN3_COMPARE (TIM2)->CCR3
259#define IGN4_COMPARE (TIM2)->CCR4
260
261#define FUEL5_COUNTER (TIM5)->CNT
262#define FUEL6_COUNTER (TIM5)->CNT
263#define FUEL7_COUNTER (TIM5)->CNT
264#define FUEL8_COUNTER (TIM5)->CNT
265
266#define FUEL5_COMPARE (TIM5)->CCR1
267#define FUEL6_COMPARE (TIM5)->CCR2
268#define FUEL7_COMPARE (TIM5)->CCR3
269#define FUEL8_COMPARE (TIM5)->CCR4
270
271#define IGN5_COUNTER (TIM4)->CNT
272#define IGN6_COUNTER (TIM4)->CNT
273#define IGN7_COUNTER (TIM4)->CNT
274#define IGN8_COUNTER (TIM4)->CNT
275
276#define IGN5_COMPARE (TIM4)->CCR1
277#define IGN6_COMPARE (TIM4)->CCR2
278#define IGN7_COMPARE (TIM4)->CCR3
279#define IGN8_COMPARE (TIM4)->CCR4
280
281
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;}
286
287static inline void FUEL1_TIMER_DISABLE(void) {(TIM3)->DIER &= ~TIM_DIER_CC1IE;}
288static inline void FUEL2_TIMER_DISABLE(void) {(TIM3)->DIER &= ~TIM_DIER_CC2IE;}
289static inline void FUEL3_TIMER_DISABLE(void) {(TIM3)->DIER &= ~TIM_DIER_CC3IE;}
290static inline void FUEL4_TIMER_DISABLE(void) {(TIM3)->DIER &= ~TIM_DIER_CC4IE;}
291
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;}
296
297static inline void IGN1_TIMER_DISABLE(void) {(TIM2)->DIER &= ~TIM_DIER_CC1IE;}
298static inline void IGN2_TIMER_DISABLE(void) {(TIM2)->DIER &= ~TIM_DIER_CC2IE;}
299static inline void IGN3_TIMER_DISABLE(void) {(TIM2)->DIER &= ~TIM_DIER_CC3IE;}
300static inline void IGN4_TIMER_DISABLE(void) {(TIM2)->DIER &= ~TIM_DIER_CC4IE;}
301
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;}
306
307static inline void FUEL5_TIMER_DISABLE(void) {(TIM5)->DIER &= ~TIM_DIER_CC1IE;}
308static inline void FUEL6_TIMER_DISABLE(void) {(TIM5)->DIER &= ~TIM_DIER_CC2IE;}
309static inline void FUEL7_TIMER_DISABLE(void) {(TIM5)->DIER &= ~TIM_DIER_CC3IE;}
310static inline void FUEL8_TIMER_DISABLE(void) {(TIM5)->DIER &= ~TIM_DIER_CC4IE;}
311
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;}
316
317static inline void IGN5_TIMER_DISABLE(void) {(TIM4)->DIER &= ~TIM_DIER_CC1IE;}
318static inline void IGN6_TIMER_DISABLE(void) {(TIM4)->DIER &= ~TIM_DIER_CC2IE;}
319static inline void IGN7_TIMER_DISABLE(void) {(TIM4)->DIER &= ~TIM_DIER_CC3IE;}
320static inline void IGN8_TIMER_DISABLE(void) {(TIM4)->DIER &= ~TIM_DIER_CC4IE;}
321
322
323/*
324***********************************************************************************************************
325* Auxiliaries
326*/
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
329
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
332
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
335
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
342
343/*
344***********************************************************************************************************
345* Idle
346*/
347#define IDLE_COUNTER (TIM1)->CNT
348#define IDLE_COMPARE (TIM1)->CCR4
349
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
352
353
354/*
355***********************************************************************************************************
356* CAN / Second serial
357*/
358#if defined(HAL_CAN_MODULE_ENABLED)
359#define NATIVE_CAN_AVAILABLE
360#include <src/STM32_CAN/STM32_CAN.h>
361//This activates CAN1 interface on STM32, but it's named as Can0, because that's how Teensy implementation is done
362extern STM32_CAN Can0;
363#endif
364
365#if defined(STM32GENERIC) // STM32GENERIC core
366 #define SECONDARY_SERIAL_T SerialUART
367#else //libmaple core aka STM32DUINO
368 #define SECONDARY_SERIAL_T HardwareSerial
369#endif
370
371class inputPin_t;
372using boardInputPin_t = inputPin_t;
373class outputPin_t;
374using boardOutputPin_t = outputPin_t;
375
377#if NUM_ANALOG_INPUTS==10
378constexpr uint8_t ANALOG_PINS[NUM_ANALOG_INPUTS-1] = { _ANALOG_PINS_A0_A8 };
379#else
380constexpr uint8_t ANALOG_PINS[NUM_ANALOG_INPUTS-1] = { _ANALOG_PINS_A0_A14 };
381#endif
382
387constexpr uint8_t SERIAL_BUFFER_THRESHOLD = 0U;
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
STM32RTC & rtc
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
char * sbrk(int incr)
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