HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
StmTypes.h
Go to the documentation of this file.
1
36#pragma once
37
38#include "HardwareTypes.h"
39#include <cstdint>
40#include <cstddef>
41
42// ═══════════════════════════════════════════════════════════════════════════════
43// STM32 HAL FORWARD DECLARATIONS
44// ═══════════════════════════════════════════════════════════════════════════════
45// These forward-declare STM32 HAL handle types so that StmTypes.h can be
46// included WITHOUT pulling in the full stm32xxxx_hal.h. The actual definitions
47// are provided by the user's CubeMX-generated HAL includes.
48// ─────────────────────────────────────────────────────────────────────────────
49
51struct ADC_HandleTypeDef;
52struct I2C_HandleTypeDef;
53struct SPI_HandleTypeDef;
54struct TIM_HandleTypeDef;
55struct UART_HandleTypeDef;
56struct CAN_HandleTypeDef; // CAN1/CAN2 (STM32F1/F2/F4)
57struct FDCAN_HandleTypeDef; // FDCAN (STM32G4/H7/U5)
58struct DAC_HandleTypeDef;
59struct DMA_HandleTypeDef;
60struct GPIO_TypeDef; // GPIOA, GPIOB, etc.
61
62// Flash/NVS-related — STM32 doesn't have a handle, just addresses
63// We wrap flash sector operations internally.
65
66// ═══════════════════════════════════════════════════════════════════════════════
67// STM32 PLATFORM CONSTANTS
68// ═══════════════════════════════════════════════════════════════════════════════
69
70namespace hf::stm32 {
71
73static constexpr hf_u8_t kMaxGpioPorts = 11;
74
76static constexpr hf_u8_t kPinsPerPort = 16;
77
80
82static constexpr hf_u8_t kAdcMaxChannels = 20;
83
85static constexpr hf_u8_t kAdcMaxResolutionBits = 16; // STM32H7
86static constexpr hf_u8_t kAdcDefaultResolutionBits = 12;
87
89static constexpr float kAdcDefaultVrefV = 3.3f;
90
92static constexpr hf_u32_t kI2cMaxFreqHz = 1000000; // Fast-mode Plus
93static constexpr hf_u32_t kI2cStandardFreqHz = 100000;
94static constexpr hf_u32_t kI2cFastFreqHz = 400000;
95static constexpr hf_u32_t kI2cFastPlusFreqHz = 1000000;
96static constexpr hf_u16_t kI2cMaxTransferBytes = 65535;
97
99static constexpr hf_u32_t kSpiMaxFreqHz = 50000000; // Depends on family
100static constexpr hf_u32_t kSpiDefaultFreqHz = 1000000;
101static constexpr hf_u16_t kSpiMaxTransferBytes = 65535;
102
104static constexpr hf_u32_t kUartMaxBaudRate = 10000000; // STM32H7 LPUART
105static constexpr hf_u32_t kUartDefaultBaudRate = 115200;
106static constexpr hf_u16_t kUartDefaultBufferSize = 256;
107
109static constexpr hf_u64_t kTimerMinPeriodUs = 1;
110static constexpr hf_u64_t kTimerMaxPeriodUs = 4294967295ULL; // 32-bit counter @ 1 MHz
111static constexpr hf_u64_t kTimerResolutionUs = 1;
112
114static constexpr hf_u32_t kPwmMaxFreqHz = 1000000;
115static constexpr hf_u32_t kPwmMinFreqHz = 1;
116static constexpr hf_u16_t kPwmMaxResolution = 65535; // 16-bit timer
117static constexpr hf_u8_t kPwmMaxChannelsPerTimer = 4;
118
120static constexpr hf_u32_t kCanMaxBaudRate = 1000000;
121static constexpr hf_u32_t kCanFdMaxBaudRate = 8000000;
122static constexpr hf_u16_t kCanDefaultQueueSize = 16;
123
125static constexpr size_t kNvsMaxKeyLength = 64;
126static constexpr size_t kNvsMaxValueSize = 4096;
127static constexpr size_t kNvsDefaultSectorSize = 4096; // Typical flash sector
128
130static constexpr float kTempSensorMinC = -40.0f;
131static constexpr float kTempSensorMaxC = 125.0f;
132static constexpr float kTempSensorTypAccuracyC = 1.5f;
133
135static constexpr hf_u32_t kLoggerMaxMessageLen = 256;
136static constexpr hf_u32_t kLoggerDefaultBufferSize = 1024;
137
138} // namespace hf::stm32
139
140// ═══════════════════════════════════════════════════════════════════════════════
141// STM32 GPIO PORT/PIN ENCODING
142// ═══════════════════════════════════════════════════════════════════════════════
143// STM32 GPIO is addressed as (Port, Pin) — e.g., PA5 = Port A, Pin 5.
144// We encode this into hf_pin_num_t as: pin_num = (port_index * 16) + pin_index
145// where port_index: A=0, B=1, C=2, ..., K=10.
146// This allows a single hf_pin_num_t to uniquely identify any STM32 GPIO pin.
147// ─────────────────────────────────────────────────────────────────────────────
148
149namespace hf::stm32 {
150
152enum class GpioPort : hf_u8_t {
153 A = 0, B = 1, C = 2, D = 3, E = 4,
154 F = 5, G = 6, H = 7, I = 8, J = 9, K = 10
155};
156
158constexpr hf_pin_num_t EncodePin(GpioPort port, hf_u8_t pin) noexcept {
159 return static_cast<hf_pin_num_t>(static_cast<hf_u8_t>(port) * kPinsPerPort + pin);
160}
161
163constexpr hf_u8_t DecodePinPort(hf_pin_num_t pin) noexcept {
164 return static_cast<hf_u8_t>(pin / kPinsPerPort);
165}
166
168constexpr hf_u8_t DecodePinIndex(hf_pin_num_t pin) noexcept {
169 return static_cast<hf_u8_t>(pin % kPinsPerPort);
170}
171
173constexpr hf_u16_t DecodePinMask(hf_pin_num_t pin) noexcept {
174 return static_cast<hf_u16_t>(1U << DecodePinIndex(pin));
175}
176
178namespace pin {
195
212
229
233} // namespace pin
234
235} // namespace hf::stm32
236
237// ═══════════════════════════════════════════════════════════════════════════════
238// STM32 I2C CONFIGURATION TYPES
239// ═══════════════════════════════════════════════════════════════════════════════
240
243 ADDR_7BIT = 0,
244 ADDR_10BIT = 1
245};
246
250 I2C_HandleTypeDef* hal_handle;
252 bool use_dma;
253
255 : hal_handle(nullptr), default_timeout_ms(1000), use_dma(false) {}
256
257 explicit hf_i2c_bus_config_t(I2C_HandleTypeDef* handle,
258 hf_u32_t timeout_ms = 1000,
259 bool dma = false) noexcept
260 : hal_handle(handle), default_timeout_ms(timeout_ms), use_dma(dma) {}
261};
262
268 bool disable_ack_check;
269
275};
276
277// ═══════════════════════════════════════════════════════════════════════════════
278// STM32 SPI CONFIGURATION TYPES
279// ═══════════════════════════════════════════════════════════════════════════════
280
283 MODE_0 = 0,
284 MODE_1 = 1,
285 MODE_2 = 2,
286 MODE_3 = 3
287};
288
290struct hf_spi_bus_config_t {
291 SPI_HandleTypeDef* hal_handle;
293 bool use_dma;
294
296 : hal_handle(nullptr), default_timeout_ms(1000), use_dma(false) {}
297
298 explicit hf_spi_bus_config_t(SPI_HandleTypeDef* handle,
299 hf_u32_t timeout_ms = 1000,
300 bool dma = false) noexcept
302};
303
308 GPIO_TypeDef* cs_port;
311
314 cs_port(nullptr), cs_pin(0), cs_active_low(true) {}
315};
316
317// ═══════════════════════════════════════════════════════════════════════════════
318// STM32 UART CONFIGURATION TYPES
319// ═══════════════════════════════════════════════════════════════════════════════
320
323 DATA_7_BITS = 7,
324 DATA_8_BITS = 8,
325 DATA_9_BITS = 9
326};
327
330 NONE = 0,
331 EVEN = 1,
332 ODD = 2
333};
334
337 STOP_1 = 0,
338 STOP_2 = 1
339};
340
343 UART_HandleTypeDef* hal_handle;
349
351 : hal_handle(nullptr), default_timeout_ms(1000),
352 use_dma_tx(false), use_dma_rx(false),
353 rx_buffer_size(hf::stm32::kUartDefaultBufferSize),
354 tx_buffer_size(hf::stm32::kUartDefaultBufferSize) {}
355
356 explicit hf_stm32_uart_config_t(UART_HandleTypeDef* handle,
357 hf_u32_t timeout_ms = 1000) noexcept
358 : hal_handle(handle), default_timeout_ms(timeout_ms),
359 use_dma_tx(false), use_dma_rx(false),
360 rx_buffer_size(hf::stm32::kUartDefaultBufferSize),
361 tx_buffer_size(hf::stm32::kUartDefaultBufferSize) {}
362};
363
364// ═══════════════════════════════════════════════════════════════════════════════
365// STM32 CAN CONFIGURATION TYPES
366// ═══════════════════════════════════════════════════════════════════════════════
367
370 BXCAN = 0,
371 FDCAN = 1
372};
373
386
387// ═══════════════════════════════════════════════════════════════════════════════
388// STM32 PWM CONFIGURATION TYPES
389// ═══════════════════════════════════════════════════════════════════════════════
390
393 CHANNEL_1 = 0x00000000U,
394 CHANNEL_2 = 0x00000004U,
395 CHANNEL_3 = 0x00000008U,
396 CHANNEL_4 = 0x0000000CU
397};
398
401 TIM_HandleTypeDef* hal_handle;
405
407 : hal_handle(nullptr), num_channels(1),
409
410 explicit hf_stm32_pwm_config_t(TIM_HandleTypeDef* handle,
411 hf_u8_t channels = 1) noexcept
412 : hal_handle(handle), num_channels(channels),
414};
415
416// ═══════════════════════════════════════════════════════════════════════════════
417// STM32 ADC CONFIGURATION TYPES
418// ═══════════════════════════════════════════════════════════════════════════════
419
422 BITS_6 = 6,
423 BITS_8 = 8,
424 BITS_10 = 10,
425 BITS_12 = 12,
426 BITS_14 = 14,
427 BITS_16 = 16
428};
429
432 ADC_HandleTypeDef* hal_handle;
434 float vref_v;
436
438 : hal_handle(nullptr),
440 vref_v(hf::stm32::kAdcDefaultVrefV),
441 num_channels(1) {}
442
443 explicit hf_stm32_adc_config_t(ADC_HandleTypeDef* handle,
444 hf_u8_t channels = 1,
445 float vref = hf::stm32::kAdcDefaultVrefV) noexcept
446 : hal_handle(handle),
448 vref_v(vref),
449 num_channels(channels) {}
450};
451
452// ═══════════════════════════════════════════════════════════════════════════════
453// STM32 NVS (FLASH) CONFIGURATION TYPES
454// ═══════════════════════════════════════════════════════════════════════════════
455
462
465 sector_size(hf::stm32::kNvsDefaultSectorSize), num_sectors(2) {}
466
468 hf_u32_t sect_size = hf::stm32::kNvsDefaultSectorSize) noexcept
469 : flash_start_address(start_addr), flash_size(size),
470 sector_size(sect_size),
471 num_sectors(static_cast<hf_u8_t>(size / sect_size)) {}
472};
473
474// ═══════════════════════════════════════════════════════════════════════════════
475// STM32 TIMER CONFIGURATION TYPES
476// ═══════════════════════════════════════════════════════════════════════════════
477
480 TIM_HandleTypeDef* hal_handle;
483
485 : hal_handle(nullptr), prescaler(0), use_interrupt(true) {}
486
487 explicit hf_stm32_timer_config_t(TIM_HandleTypeDef* handle) noexcept
488 : hal_handle(handle), prescaler(0), use_interrupt(true) {}
489};
490
491// ═══════════════════════════════════════════════════════════════════════════════
492// STM32 GPIO CONFIGURATION TYPE
493// ═══════════════════════════════════════════════════════════════════════════════
494
497 GPIO_TypeDef* port;
499
500 hf_stm32_gpio_config_t() noexcept : port(nullptr), pin_mask(0) {}
501
502 hf_stm32_gpio_config_t(GPIO_TypeDef* gpio_port, hf_u16_t pin) noexcept
503 : port(gpio_port), pin_mask(pin) {}
504};
505
506// ═══════════════════════════════════════════════════════════════════════════════
507// STM32 HAL STATUS CONVERSION UTILITY
508// ═══════════════════════════════════════════════════════════════════════════════
509
510namespace hf::stm32 {
511
513enum class HalStatus : hf_u8_t {
514 OK = 0x00U,
515 ERROR = 0x01U,
516 BUSY = 0x02U,
517 TIMEOUT = 0x03U
518};
519
521constexpr HalStatus ToHalStatus(hf_u32_t raw_status) noexcept {
522 switch (raw_status) {
523 case 0: return HalStatus::OK;
524 case 1: return HalStatus::ERROR;
525 case 2: return HalStatus::BUSY;
526 case 3: return HalStatus::TIMEOUT;
527 default: return HalStatus::ERROR;
528 }
529}
530
532constexpr bool IsHalOk(hf_u32_t raw_status) noexcept {
533 return raw_status == 0;
534}
535
536} // namespace hf::stm32
Platform-agnostic hardware type definitions for the HardFOC system.
uint32_t hf_u32_t
Platform-agnostic 32-bit unsigned integer type.
Definition HardwareTypes.h:52
uint8_t hf_u8_t
Platform-agnostic 8-bit unsigned integer type.
Definition HardwareTypes.h:40
hf_i32_t hf_pin_num_t
Platform-agnostic GPIO pin number type.
Definition HardwareTypes.h:99
uint64_t hf_u64_t
Platform-agnostic 64-bit unsigned integer type.
Definition HardwareTypes.h:58
uint16_t hf_u16_t
Platform-agnostic 16-bit unsigned integer type.
Definition HardwareTypes.h:46
hf_stm32_pwm_channel_t
PWM channel identifier (maps to TIM_CHANNEL_1..4)
Definition StmTypes.h:392
@ CHANNEL_2
TIM_CHANNEL_2.
@ CHANNEL_3
TIM_CHANNEL_3.
@ CHANNEL_1
TIM_CHANNEL_1.
@ CHANNEL_4
TIM_CHANNEL_4.
hf_stm32_can_type_t
CAN bus type selection.
Definition StmTypes.h:369
@ FDCAN
Flexible Data-rate CAN (STM32G4/H7/U5)
@ BXCAN
Basic Extended CAN (STM32F1/F2/F4)
hf_stm32_adc_resolution_t
ADC resolution.
Definition StmTypes.h:421
@ BITS_14
STM32H7/G4 only.
hf_stm32_uart_stop_bits_t
UART stop bits.
Definition StmTypes.h:336
hf_stm32_uart_parity_t
UART parity.
Definition StmTypes.h:329
hf_stm32_i2c_addr_mode_t
I2C address mode.
Definition StmTypes.h:242
@ ADDR_10BIT
10-bit addressing
@ ADDR_7BIT
7-bit addressing
hf_stm32_uart_data_bits_t
UART data bits.
Definition StmTypes.h:322
hf_stm32_spi_mode_t
SPI mode (CPOL/CPHA)
Definition StmTypes.h:282
@ MODE_0
CPOL=0, CPHA=0.
@ MODE_3
CPOL=1, CPHA=1.
@ MODE_2
CPOL=1, CPHA=0.
@ MODE_1
CPOL=0, CPHA=1.
constexpr hf_pin_num_t PD2
Definition StmTypes.h:232
constexpr hf_pin_num_t PB8
Definition StmTypes.h:204
constexpr hf_pin_num_t PB3
Definition StmTypes.h:199
constexpr hf_pin_num_t PA1
Definition StmTypes.h:180
constexpr hf_pin_num_t PA6
Definition StmTypes.h:185
constexpr hf_pin_num_t PC9
Definition StmTypes.h:222
constexpr hf_pin_num_t PB4
Definition StmTypes.h:200
constexpr hf_pin_num_t PC5
Definition StmTypes.h:218
constexpr hf_pin_num_t PC7
Definition StmTypes.h:220
constexpr hf_pin_num_t PC1
Definition StmTypes.h:214
constexpr hf_pin_num_t PB1
Definition StmTypes.h:197
constexpr hf_pin_num_t PD0
Definition StmTypes.h:230
constexpr hf_pin_num_t PB6
Definition StmTypes.h:202
constexpr hf_pin_num_t PB11
Definition StmTypes.h:207
constexpr hf_pin_num_t PC8
Definition StmTypes.h:221
constexpr hf_pin_num_t PC2
Definition StmTypes.h:215
constexpr hf_pin_num_t PB5
Definition StmTypes.h:201
constexpr hf_pin_num_t PA8
Definition StmTypes.h:187
constexpr hf_pin_num_t PB7
Definition StmTypes.h:203
constexpr hf_pin_num_t PB0
Definition StmTypes.h:196
constexpr hf_pin_num_t PA4
Definition StmTypes.h:183
constexpr hf_pin_num_t PB15
Definition StmTypes.h:211
constexpr hf_pin_num_t PA14
Definition StmTypes.h:193
constexpr hf_pin_num_t PC11
Definition StmTypes.h:224
constexpr hf_pin_num_t PC12
Definition StmTypes.h:225
constexpr hf_pin_num_t PA9
Definition StmTypes.h:188
constexpr hf_pin_num_t PA0
Definition StmTypes.h:179
constexpr hf_pin_num_t PA12
Definition StmTypes.h:191
constexpr hf_pin_num_t PB9
Definition StmTypes.h:205
constexpr hf_pin_num_t PB13
Definition StmTypes.h:209
constexpr hf_pin_num_t PB10
Definition StmTypes.h:206
constexpr hf_pin_num_t PB2
Definition StmTypes.h:198
constexpr hf_pin_num_t PC10
Definition StmTypes.h:223
constexpr hf_pin_num_t PA2
Definition StmTypes.h:181
constexpr hf_pin_num_t PA3
Definition StmTypes.h:182
constexpr hf_pin_num_t PA11
Definition StmTypes.h:190
constexpr hf_pin_num_t PC13
Definition StmTypes.h:226
constexpr hf_pin_num_t PA5
Definition StmTypes.h:184
constexpr hf_pin_num_t PB14
Definition StmTypes.h:210
constexpr hf_pin_num_t PC14
Definition StmTypes.h:227
constexpr hf_pin_num_t PA10
Definition StmTypes.h:189
constexpr hf_pin_num_t PB12
Definition StmTypes.h:208
constexpr hf_pin_num_t PA7
Definition StmTypes.h:186
constexpr hf_pin_num_t PC0
Definition StmTypes.h:213
constexpr hf_pin_num_t PC15
Definition StmTypes.h:228
constexpr hf_pin_num_t PC3
Definition StmTypes.h:216
constexpr hf_pin_num_t PA13
Definition StmTypes.h:192
constexpr hf_pin_num_t PD1
Definition StmTypes.h:231
constexpr hf_pin_num_t PA15
Definition StmTypes.h:194
constexpr hf_pin_num_t PC4
Definition StmTypes.h:217
constexpr hf_pin_num_t PC6
Definition StmTypes.h:219
Definition StmTypes.h:70
static constexpr float kAdcDefaultVrefV
ADC reference voltage (V) — most STM32 boards.
Definition StmTypes.h:89
static constexpr float kTempSensorMaxC
Definition StmTypes.h:131
static constexpr hf_u16_t kMaxGpioPins
Maximum total GPIO pins (ports * pins_per_port)
Definition StmTypes.h:79
static constexpr hf_u8_t kAdcDefaultResolutionBits
Definition StmTypes.h:86
static constexpr hf_u16_t kCanDefaultQueueSize
Definition StmTypes.h:122
static constexpr hf_u32_t kCanMaxBaudRate
CAN limits.
Definition StmTypes.h:120
static constexpr hf_u16_t kI2cMaxTransferBytes
Definition StmTypes.h:96
static constexpr hf_u8_t kAdcMaxChannels
ADC maximum channels (typical STM32F4/H7)
Definition StmTypes.h:82
static constexpr hf_u32_t kI2cFastFreqHz
Definition StmTypes.h:94
static constexpr hf_u32_t kPwmMaxFreqHz
PWM limits.
Definition StmTypes.h:114
static constexpr hf_u32_t kI2cStandardFreqHz
Definition StmTypes.h:93
static constexpr hf_u32_t kLoggerMaxMessageLen
Logger.
Definition StmTypes.h:135
constexpr bool IsHalOk(hf_u32_t raw_status) noexcept
Check if a raw HAL status indicates success.
Definition StmTypes.h:532
constexpr hf_u8_t DecodePinPort(hf_pin_num_t pin) noexcept
Decode hf_pin_num_t → port index.
Definition StmTypes.h:163
static constexpr hf_u32_t kSpiMaxFreqHz
SPI limits.
Definition StmTypes.h:99
static constexpr size_t kNvsDefaultSectorSize
Definition StmTypes.h:127
constexpr hf_pin_num_t EncodePin(GpioPort port, hf_u8_t pin) noexcept
Encode (port, pin) → hf_pin_num_t.
Definition StmTypes.h:158
static constexpr hf_u16_t kSpiMaxTransferBytes
Definition StmTypes.h:101
static constexpr hf_u32_t kUartDefaultBaudRate
Definition StmTypes.h:105
GpioPort
GPIO port index (A=0, B=1, ... K=10)
Definition StmTypes.h:152
static constexpr float kTempSensorTypAccuracyC
Definition StmTypes.h:132
static constexpr hf_u16_t kPwmMaxResolution
Definition StmTypes.h:116
static constexpr hf_u32_t kLoggerDefaultBufferSize
Definition StmTypes.h:136
static constexpr size_t kNvsMaxKeyLength
Flash/NVS limits.
Definition StmTypes.h:125
static constexpr hf_u8_t kMaxGpioPorts
Maximum GPIO ports (A..K = 11 on largest STM32H7)
Definition StmTypes.h:73
static constexpr hf_u8_t kAdcMaxResolutionBits
ADC maximum resolution (bits)
Definition StmTypes.h:85
constexpr HalStatus ToHalStatus(hf_u32_t raw_status) noexcept
Convert raw HAL_StatusTypeDef to our enum.
Definition StmTypes.h:521
constexpr hf_u8_t DecodePinIndex(hf_pin_num_t pin) noexcept
Decode hf_pin_num_t → pin within port (0-15)
Definition StmTypes.h:168
HalStatus
STM32 HAL status codes (mirrors HAL_StatusTypeDef without HAL include)
Definition StmTypes.h:513
constexpr hf_u16_t DecodePinMask(hf_pin_num_t pin) noexcept
Decode hf_pin_num_t → STM32 HAL pin mask (GPIO_PIN_0 .. GPIO_PIN_15)
Definition StmTypes.h:173
static constexpr hf_u32_t kI2cFastPlusFreqHz
Definition StmTypes.h:95
static constexpr hf_u8_t kPinsPerPort
Maximum pins per GPIO port.
Definition StmTypes.h:76
static constexpr hf_u64_t kTimerMinPeriodUs
Timer limits (in microseconds)
Definition StmTypes.h:109
static constexpr hf_u32_t kI2cMaxFreqHz
I2C limits.
Definition StmTypes.h:92
static constexpr float kTempSensorMinC
Temperature sensor.
Definition StmTypes.h:130
static constexpr hf_u32_t kCanFdMaxBaudRate
Definition StmTypes.h:121
static constexpr hf_u32_t kSpiDefaultFreqHz
Definition StmTypes.h:100
static constexpr hf_u64_t kTimerResolutionUs
Definition StmTypes.h:111
static constexpr hf_u32_t kPwmMinFreqHz
Definition StmTypes.h:115
static constexpr hf_u64_t kTimerMaxPeriodUs
Definition StmTypes.h:110
static constexpr hf_u16_t kUartDefaultBufferSize
Definition StmTypes.h:106
static constexpr hf_u32_t kUartMaxBaudRate
UART limits.
Definition StmTypes.h:104
static constexpr hf_u8_t kPwmMaxChannelsPerTimer
Definition StmTypes.h:117
static constexpr size_t kNvsMaxValueSize
Definition StmTypes.h:126
Definition StmTypes.h:70
Platform-agnostic I2C bus configuration for STM32. Users pass their CubeMX-generated I2C_HandleTypeDe...
Definition StmTypes.h:249
hf_i2c_bus_config_t(I2C_HandleTypeDef *handle, hf_u32_t timeout_ms=1000, bool dma=false) noexcept
Definition StmTypes.h:257
bool use_dma
Use DMA transfers when available.
Definition StmTypes.h:252
I2C_HandleTypeDef * hal_handle
Pointer to CubeMX-generated I2C handle.
Definition StmTypes.h:250
hf_u32_t default_timeout_ms
Default timeout for all operations (ms)
Definition StmTypes.h:251
hf_i2c_bus_config_t() noexcept
Definition StmTypes.h:254
I2C device configuration structure.
Definition EspTypes_I2C.h:225
uint16_t device_address
7-bit or 10-bit device address
Definition EspTypes_I2C.h:226
hf_stm32_i2c_addr_mode_t addr_mode
Address mode.
Definition StmTypes.h:266
hf_u32_t scl_speed_hz
SCL clock speed (informational)
Definition StmTypes.h:267
uint32_t scl_speed_hz
SCL clock frequency for this device.
Definition EspTypes_I2C.h:228
bool disable_ack_check
Disable ACK check for this device.
Definition EspTypes_I2C.h:230
hf_i2c_device_config_t() noexcept
Definition StmTypes.h:270
hf_u16_t device_address
7-bit or 10-bit address
Definition StmTypes.h:265
Platform-agnostic SPI bus configuration for STM32.
Definition EspTypes_SPI.h:150
hf_spi_bus_config_t() noexcept
Definition StmTypes.h:295
hf_timeout_ms_t timeout_ms
Default timeout for operations (ms)
Definition EspTypes_SPI.h:157
SPI_HandleTypeDef * hal_handle
Pointer to CubeMX-generated SPI handle.
Definition StmTypes.h:291
hf_u32_t default_timeout_ms
Default timeout (ms)
Definition StmTypes.h:292
bool use_dma
Use DMA transfers when available.
Definition StmTypes.h:293
hf_spi_bus_config_t(SPI_HandleTypeDef *handle, hf_u32_t timeout_ms=1000, bool dma=false) noexcept
Definition StmTypes.h:298
SPI device configuration for STM32.
Definition EspTypes_SPI.h:210
hf_u16_t cs_pin
CS GPIO pin mask (e.g., GPIO_PIN_4)
Definition StmTypes.h:309
bool cs_active_low
CS active low (default: true)
Definition StmTypes.h:310
GPIO_TypeDef * cs_port
CS GPIO port (e.g., GPIOA)
Definition StmTypes.h:308
hf_spi_mode_t mode
SPI mode (0-3)
Definition EspTypes_SPI.h:212
hf_stm32_spi_mode_t mode
SPI mode (informational — set in CubeMX)
Definition StmTypes.h:307
hf_spi_device_config_t() noexcept
Definition StmTypes.h:312
hf_pin_num_t cs_pin
CS pin (or -1 for software CS)
Definition EspTypes_SPI.h:213
hf_u32_t clock_speed_hz
Device clock speed (Hz)
Definition EspTypes_SPI.h:211
ADC configuration for STM32.
Definition StmTypes.h:431
hf_stm32_adc_resolution_t resolution
ADC resolution.
Definition StmTypes.h:433
ADC_HandleTypeDef * hal_handle
Pointer to CubeMX-generated ADC handle.
Definition StmTypes.h:432
hf_u8_t num_channels
Number of configured channels.
Definition StmTypes.h:435
hf_stm32_adc_config_t() noexcept
Definition StmTypes.h:437
hf_stm32_adc_config_t(ADC_HandleTypeDef *handle, hf_u8_t channels=1, float vref=hf::stm32::kAdcDefaultVrefV) noexcept
Definition StmTypes.h:443
float vref_v
Reference voltage (V)
Definition StmTypes.h:434
CAN configuration for STM32.
Definition StmTypes.h:375
hf_u32_t default_timeout_ms
Default timeout (ms)
Definition StmTypes.h:378
hf_stm32_can_config_t() noexcept
Definition StmTypes.h:382
bool silent_mode
Enable silent/listen-only mode.
Definition StmTypes.h:380
void * hal_handle
CAN_HandleTypeDef* or FDCAN_HandleTypeDef*.
Definition StmTypes.h:377
bool loopback_mode
Enable loopback for testing.
Definition StmTypes.h:379
hf_stm32_can_type_t can_type
CAN peripheral type.
Definition StmTypes.h:376
GPIO configuration for STM32 wrapping CubeMX port/pin.
Definition StmTypes.h:496
hf_stm32_gpio_config_t() noexcept
Definition StmTypes.h:500
GPIO_TypeDef * port
GPIO port pointer (GPIOA, GPIOB, etc.)
Definition StmTypes.h:497
hf_stm32_gpio_config_t(GPIO_TypeDef *gpio_port, hf_u16_t pin) noexcept
Definition StmTypes.h:502
hf_u16_t pin_mask
GPIO pin mask (GPIO_PIN_0..GPIO_PIN_15)
Definition StmTypes.h:498
Flash-based NVS configuration for STM32.
Definition StmTypes.h:457
hf_u32_t flash_size
Total NVS region size (bytes)
Definition StmTypes.h:459
hf_stm32_nvs_config_t() noexcept
Definition StmTypes.h:463
hf_u32_t sector_size
Flash sector/page size (bytes)
Definition StmTypes.h:460
hf_u8_t num_sectors
Number of sectors reserved for NVS.
Definition StmTypes.h:461
hf_stm32_nvs_config_t(hf_u32_t start_addr, hf_u32_t size, hf_u32_t sect_size=hf::stm32::kNvsDefaultSectorSize) noexcept
Definition StmTypes.h:467
hf_u32_t flash_start_address
Start address of NVS flash region.
Definition StmTypes.h:458
PWM configuration for STM32.
Definition StmTypes.h:400
hf_stm32_pwm_config_t() noexcept
Definition StmTypes.h:406
hf_stm32_pwm_config_t(TIM_HandleTypeDef *handle, hf_u8_t channels=1) noexcept
Definition StmTypes.h:410
hf_u16_t dead_time_ns
Dead-time for complementary pairs (ns)
Definition StmTypes.h:404
hf_u8_t num_channels
Number of active channels (1-4)
Definition StmTypes.h:402
bool complementary_output
Enable complementary outputs (TIMx_CHxN)
Definition StmTypes.h:403
TIM_HandleTypeDef * hal_handle
Pointer to CubeMX-generated TIM handle.
Definition StmTypes.h:401
Periodic timer configuration for STM32.
Definition StmTypes.h:479
TIM_HandleTypeDef * hal_handle
Pointer to CubeMX-generated TIM handle.
Definition StmTypes.h:480
hf_stm32_timer_config_t(TIM_HandleTypeDef *handle) noexcept
Definition StmTypes.h:487
hf_u32_t prescaler
Timer prescaler (0 = auto-compute)
Definition StmTypes.h:481
hf_stm32_timer_config_t() noexcept
Definition StmTypes.h:484
bool use_interrupt
Use timer update interrupt.
Definition StmTypes.h:482
Platform-agnostic UART configuration for STM32.
Definition StmTypes.h:342
bool use_dma_rx
Use DMA for RX.
Definition StmTypes.h:346
hf_u16_t tx_buffer_size
Transmit buffer size.
Definition StmTypes.h:348
hf_stm32_uart_config_t(UART_HandleTypeDef *handle, hf_u32_t timeout_ms=1000) noexcept
Definition StmTypes.h:356
hf_u16_t rx_buffer_size
Receive ring buffer size.
Definition StmTypes.h:347
hf_u32_t default_timeout_ms
Default timeout (ms)
Definition StmTypes.h:344
hf_stm32_uart_config_t() noexcept
Definition StmTypes.h:350
UART_HandleTypeDef * hal_handle
Pointer to CubeMX-generated UART handle.
Definition StmTypes.h:343
bool use_dma_tx
Use DMA for TX.
Definition StmTypes.h:345