Internal Interface Wrap
API reference
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
51#if defined(USE_HAL_DRIVER)
52// Real CubeMX HAL build: pull the full HAL up front. Forward declarations
53// CANNOT be used here — the HAL defines these names as typedefs of anonymous
54// structs (e.g. `typedef struct {...} GPIO_TypeDef;`), so a prior
55// `struct GPIO_TypeDef;` declaration is a hard conflict whichever side is
56// included first.
57# include "stm32h7xx_hal.h"
58// Modules disabled in this core's stm32h7xx_hal_conf.h (e.g. SPI/UART/ADC on
59// the CM7 of an ADR-003 split) leave their handle types undefined. Declare
60// opaque stand-ins so the config structs below still parse; code that actually
61// drives those buses only compiles on the core that enables the module.
62# ifndef HAL_ADC_MODULE_ENABLED
63struct ADC_HandleTypeDef;
64# endif
65# ifndef HAL_I2C_MODULE_ENABLED
66struct I2C_HandleTypeDef;
67# endif
68# ifndef HAL_SPI_MODULE_ENABLED
69struct SPI_HandleTypeDef;
70# endif
71# ifndef HAL_TIM_MODULE_ENABLED
72struct TIM_HandleTypeDef;
73# endif
74# ifndef HAL_UART_MODULE_ENABLED
76# endif
77# ifndef HAL_CAN_MODULE_ENABLED
78struct CAN_HandleTypeDef;
79# endif
80# ifndef HAL_FDCAN_MODULE_ENABLED
81struct FDCAN_HandleTypeDef;
82# endif
83# ifndef HAL_DAC_MODULE_ENABLED
84struct DAC_HandleTypeDef;
85# endif
86#else
87// HAL-less build (host tests / lint): forward-declare the handle types so
88// StmTypes.h stands alone.
89struct ADC_HandleTypeDef;
90struct I2C_HandleTypeDef;
91struct SPI_HandleTypeDef;
92struct TIM_HandleTypeDef;
94struct CAN_HandleTypeDef;
95struct FDCAN_HandleTypeDef;
96struct DAC_HandleTypeDef;
97struct DMA_HandleTypeDef;
98struct GPIO_TypeDef;
99#endif
101
109
110// ═══════════════════════════════════════════════════════════════════════════════
111// STM32 PLATFORM CONSTANTS
112// ═══════════════════════════════════════════════════════════════════════════════
113
114namespace hf::stm32 {
115
117static constexpr hf_u8_t kMaxGpioPorts = 11;
118
120static constexpr hf_u8_t kPinsPerPort = 16;
121
124
126static constexpr hf_u8_t kAdcMaxChannels = 20;
127
129static constexpr hf_u8_t kAdcMaxResolutionBits = 16; // STM32H7
130static constexpr hf_u8_t kAdcDefaultResolutionBits = 12;
131
133static constexpr float kAdcDefaultVrefV = 3.3f;
134
136static constexpr hf_u32_t kI2cMaxFreqHz = 1000000; // Fast-mode Plus
137static constexpr hf_u32_t kI2cStandardFreqHz = 100000;
138static constexpr hf_u32_t kI2cFastFreqHz = 400000;
139static constexpr hf_u32_t kI2cFastPlusFreqHz = 1000000;
140static constexpr hf_u16_t kI2cMaxTransferBytes = 65535;
141
143static constexpr hf_u32_t kSpiMaxFreqHz = 50000000; // Depends on family
144static constexpr hf_u32_t kSpiDefaultFreqHz = 1000000;
145static constexpr hf_u16_t kSpiMaxTransferBytes = 65535;
146
148static constexpr hf_u32_t kUartMaxBaudRate = 10000000; // STM32H7 LPUART
149static constexpr hf_u32_t kUartDefaultBaudRate = 115200;
150static constexpr hf_u16_t kUartDefaultBufferSize = 256;
151
153static constexpr hf_u64_t kTimerMinPeriodUs = 1;
154static constexpr hf_u64_t kTimerMaxPeriodUs = 4294967295ULL; // 32-bit counter @ 1 MHz
155static constexpr hf_u64_t kTimerResolutionUs = 1;
156
158static constexpr hf_u32_t kPwmMaxFreqHz = 1000000;
159static constexpr hf_u32_t kPwmMinFreqHz = 1;
160static constexpr hf_u16_t kPwmMaxResolution = 65535; // 16-bit timer
161static constexpr hf_u8_t kPwmMaxChannelsPerTimer = 4;
162
164static constexpr hf_u32_t kCanMaxBaudRate = 1000000;
165static constexpr hf_u32_t kCanFdMaxBaudRate = 8000000;
166static constexpr hf_u16_t kCanDefaultQueueSize = 16;
167
169static constexpr size_t kNvsMaxKeyLength = 64;
170static constexpr size_t kNvsMaxValueSize = 4096;
171static constexpr size_t kNvsDefaultSectorSize = 4096; // Typical flash sector
172
174static constexpr float kTempSensorMinC = -40.0f;
175static constexpr float kTempSensorMaxC = 125.0f;
176static constexpr float kTempSensorTypAccuracyC = 1.5f;
177
179static constexpr hf_u32_t kLoggerMaxMessageLen = 256;
180static constexpr hf_u32_t kLoggerDefaultBufferSize = 1024;
181
182} // namespace hf::stm32
183
184// ═══════════════════════════════════════════════════════════════════════════════
185// STM32 GPIO PORT/PIN ENCODING
186// ═══════════════════════════════════════════════════════════════════════════════
187// STM32 GPIO is addressed as (Port, Pin) — e.g., PA5 = Port A, Pin 5.
188// We encode this into hf_pin_num_t as: pin_num = (port_index * 16) + pin_index
189// where port_index: A=0, B=1, C=2, ..., K=10.
190// This allows a single hf_pin_num_t to uniquely identify any STM32 GPIO pin.
191// ─────────────────────────────────────────────────────────────────────────────
192
193namespace hf::stm32 {
194
196enum class GpioPort : hf_u8_t {
197 A = 0, B = 1, C = 2, D = 3, E = 4,
198 F = 5, G = 6, H = 7, I = 8, J = 9, K = 10
199};
200
202constexpr hf_pin_num_t EncodePin(GpioPort port, hf_u8_t pin) noexcept {
203 return static_cast<hf_pin_num_t>(static_cast<hf_u8_t>(port) * kPinsPerPort + pin);
204}
205
207constexpr hf_u8_t DecodePinPort(hf_pin_num_t pin) noexcept {
208 return static_cast<hf_u8_t>(pin / kPinsPerPort);
209}
210
212constexpr hf_u8_t DecodePinIndex(hf_pin_num_t pin) noexcept {
213 return static_cast<hf_u8_t>(pin % kPinsPerPort);
214}
215
217constexpr hf_u16_t DecodePinMask(hf_pin_num_t pin) noexcept {
218 return static_cast<hf_u16_t>(1U << DecodePinIndex(pin));
219}
220
222namespace pin {
239
256
273
277} // namespace pin
278
279} // namespace hf::stm32
280
281// ═══════════════════════════════════════════════════════════════════════════════
282// STM32 I2C CONFIGURATION TYPES
283// ═══════════════════════════════════════════════════════════════════════════════
284
287 ADDR_7BIT = 0,
288 ADDR_10BIT = 1
289};
290
294 I2C_HandleTypeDef* hal_handle;
296 bool use_dma;
297
299 : hal_handle(nullptr), default_timeout_ms(1000), use_dma(false) {}
300
301 explicit hf_i2c_bus_config_t(I2C_HandleTypeDef* handle,
302 hf_u32_t timeout_ms = 1000,
303 bool dma = false) noexcept
304 : hal_handle(handle), default_timeout_ms(timeout_ms), use_dma(dma) {}
305};
306
312 bool disable_ack_check;
321
328};
329
330// ═══════════════════════════════════════════════════════════════════════════════
331// STM32 SPI CONFIGURATION TYPES
332// ═══════════════════════════════════════════════════════════════════════════════
333
336 MODE_0 = 0,
337 MODE_1 = 1,
338 MODE_2 = 2,
339 MODE_3 = 3
340};
341
343struct hf_spi_bus_config_t {
344 SPI_HandleTypeDef* hal_handle;
346 bool use_dma;
347
349 : hal_handle(nullptr), default_timeout_ms(1000), use_dma(false) {}
350
351 explicit hf_spi_bus_config_t(SPI_HandleTypeDef* handle,
352 hf_u32_t timeout_ms = 1000,
353 bool dma = false) noexcept
355};
356
374 GPIO_TypeDef* cs_port;
390
395};
396
397// ═══════════════════════════════════════════════════════════════════════════════
398// STM32 UART CONFIGURATION TYPES
399// ═══════════════════════════════════════════════════════════════════════════════
400
403 DATA_7_BITS = 7,
404 DATA_8_BITS = 8,
405 DATA_9_BITS = 9
406};
407
410 NONE = 0,
411 EVEN = 1,
412 ODD = 2
413};
414
417 STOP_1 = 0,
418 STOP_2 = 1
419};
420
429
431 : hal_handle(nullptr), default_timeout_ms(1000),
432 use_dma_tx(false), use_dma_rx(false),
433 rx_buffer_size(hf::stm32::kUartDefaultBufferSize),
434 tx_buffer_size(hf::stm32::kUartDefaultBufferSize) {}
435
437 hf_u32_t timeout_ms = 1000) noexcept
438 : hal_handle(handle), default_timeout_ms(timeout_ms),
439 use_dma_tx(false), use_dma_rx(false),
440 rx_buffer_size(hf::stm32::kUartDefaultBufferSize),
441 tx_buffer_size(hf::stm32::kUartDefaultBufferSize) {}
442};
443
444// ═══════════════════════════════════════════════════════════════════════════════
445// STM32 CAN CONFIGURATION TYPES
446// ═══════════════════════════════════════════════════════════════════════════════
447
450 BXCAN = 0,
451 FDCAN = 1
452};
453
466
467// ═══════════════════════════════════════════════════════════════════════════════
468// STM32 PWM CONFIGURATION TYPES
469// ═══════════════════════════════════════════════════════════════════════════════
470
473 CHANNEL_1 = 0x00000000U,
474 CHANNEL_2 = 0x00000004U,
475 CHANNEL_3 = 0x00000008U,
476 CHANNEL_4 = 0x0000000CU
477};
478
481 TIM_HandleTypeDef* hal_handle;
485
487 : hal_handle(nullptr), num_channels(1),
489
490 explicit hf_stm32_pwm_config_t(TIM_HandleTypeDef* handle,
491 hf_u8_t channels = 1) noexcept
492 : hal_handle(handle), num_channels(channels),
494};
495
496// ═══════════════════════════════════════════════════════════════════════════════
497// STM32 ADC CONFIGURATION TYPES
498// ═══════════════════════════════════════════════════════════════════════════════
499
502 BITS_6 = 6,
503 BITS_8 = 8,
504 BITS_10 = 10,
505 BITS_12 = 12,
506 BITS_14 = 14,
507 BITS_16 = 16
508};
509
512 ADC_HandleTypeDef* hal_handle;
514 float vref_v;
516
518 : hal_handle(nullptr),
520 vref_v(hf::stm32::kAdcDefaultVrefV),
521 num_channels(1) {}
522
523 explicit hf_stm32_adc_config_t(ADC_HandleTypeDef* handle,
524 hf_u8_t channels = 1,
525 float vref = hf::stm32::kAdcDefaultVrefV) noexcept
526 : hal_handle(handle),
528 vref_v(vref),
529 num_channels(channels) {}
530};
531
532// ═══════════════════════════════════════════════════════════════════════════════
533// STM32 NVS (FLASH) CONFIGURATION TYPES
534// ═══════════════════════════════════════════════════════════════════════════════
535
542
545 sector_size(hf::stm32::kNvsDefaultSectorSize), num_sectors(2) {}
546
548 hf_u32_t sect_size = hf::stm32::kNvsDefaultSectorSize) noexcept
549 : flash_start_address(start_addr), flash_size(size),
550 sector_size(sect_size),
551 num_sectors(static_cast<hf_u8_t>(size / sect_size)) {}
552};
553
554// ═══════════════════════════════════════════════════════════════════════════════
555// STM32 TIMER CONFIGURATION TYPES
556// ═══════════════════════════════════════════════════════════════════════════════
557
560 TIM_HandleTypeDef* hal_handle;
563
565 : hal_handle(nullptr), prescaler(0), use_interrupt(true) {}
566
567 explicit hf_stm32_timer_config_t(TIM_HandleTypeDef* handle) noexcept
568 : hal_handle(handle), prescaler(0), use_interrupt(true) {}
569};
570
571// ═══════════════════════════════════════════════════════════════════════════════
572// STM32 GPIO CONFIGURATION TYPE
573// ═══════════════════════════════════════════════════════════════════════════════
574
577 GPIO_TypeDef* port;
579
580 hf_stm32_gpio_config_t() noexcept : port(nullptr), pin_mask(0) {}
581
582 hf_stm32_gpio_config_t(GPIO_TypeDef* gpio_port, hf_u16_t pin) noexcept
583 : port(gpio_port), pin_mask(pin) {}
584};
585
586// ═══════════════════════════════════════════════════════════════════════════════
587// STM32 HAL STATUS CONVERSION UTILITY
588// ═══════════════════════════════════════════════════════════════════════════════
589
590namespace hf::stm32 {
591
593enum class HalStatus : hf_u8_t {
594 OK = 0x00U,
595 ERROR = 0x01U,
596 BUSY = 0x02U,
597 TIMEOUT = 0x03U
598};
599
601constexpr HalStatus ToHalStatus(hf_u32_t raw_status) noexcept {
602 switch (raw_status) {
603 case 0: return HalStatus::OK;
604 case 1: return HalStatus::ERROR;
605 case 2: return HalStatus::BUSY;
606 case 3: return HalStatus::TIMEOUT;
607 default: return HalStatus::ERROR;
608 }
609}
610
612constexpr bool IsHalOk(hf_u32_t raw_status) noexcept {
613 return raw_status == 0;
614}
615
616} // 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:472
@ 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:449
@ 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:501
@ BITS_14
STM32H7/G4 only.
hf_stm32_uart_stop_bits_t
UART stop bits.
Definition StmTypes.h:416
hf_stm32_uart_parity_t
UART parity.
Definition StmTypes.h:409
hf_stm32_i2c_addr_mode_t
I2C address mode.
Definition StmTypes.h:286
@ ADDR_10BIT
10-bit addressing
@ ADDR_7BIT
7-bit addressing
hf_stm32_uart_data_bits_t
UART data bits.
Definition StmTypes.h:402
hf_gpio_drive_cap_t
STM32 GPIO output drive strength (subset aligned with EspTypes_GPIO).
Definition StmTypes.h:103
hf_stm32_spi_mode_t
SPI mode (CPOL/CPHA)
Definition StmTypes.h:335
@ MODE_0
CPOL=0, CPHA=0.
@ MODE_3
CPOL=1, CPHA=1.
@ MODE_2
CPOL=1, CPHA=0.
@ MODE_1
CPOL=0, CPHA=1.
struct __UART_HandleTypeDef UART_HandleTypeDef
Definition StmUart.h:22
constexpr hf_pin_num_t PD2
Definition StmTypes.h:276
constexpr hf_pin_num_t PB8
Definition StmTypes.h:248
constexpr hf_pin_num_t PB3
Definition StmTypes.h:243
constexpr hf_pin_num_t PA1
Definition StmTypes.h:224
constexpr hf_pin_num_t PA6
Definition StmTypes.h:229
constexpr hf_pin_num_t PC9
Definition StmTypes.h:266
constexpr hf_pin_num_t PB4
Definition StmTypes.h:244
constexpr hf_pin_num_t PC5
Definition StmTypes.h:262
constexpr hf_pin_num_t PC7
Definition StmTypes.h:264
constexpr hf_pin_num_t PC1
Definition StmTypes.h:258
constexpr hf_pin_num_t PB1
Definition StmTypes.h:241
constexpr hf_pin_num_t PD0
Definition StmTypes.h:274
constexpr hf_pin_num_t PB6
Definition StmTypes.h:246
constexpr hf_pin_num_t PB11
Definition StmTypes.h:251
constexpr hf_pin_num_t PC8
Definition StmTypes.h:265
constexpr hf_pin_num_t PC2
Definition StmTypes.h:259
constexpr hf_pin_num_t PB5
Definition StmTypes.h:245
constexpr hf_pin_num_t PA8
Definition StmTypes.h:231
constexpr hf_pin_num_t PB7
Definition StmTypes.h:247
constexpr hf_pin_num_t PB0
Definition StmTypes.h:240
constexpr hf_pin_num_t PA4
Definition StmTypes.h:227
constexpr hf_pin_num_t PB15
Definition StmTypes.h:255
constexpr hf_pin_num_t PA14
Definition StmTypes.h:237
constexpr hf_pin_num_t PC11
Definition StmTypes.h:268
constexpr hf_pin_num_t PC12
Definition StmTypes.h:269
constexpr hf_pin_num_t PA9
Definition StmTypes.h:232
constexpr hf_pin_num_t PA0
Definition StmTypes.h:223
constexpr hf_pin_num_t PA12
Definition StmTypes.h:235
constexpr hf_pin_num_t PB9
Definition StmTypes.h:249
constexpr hf_pin_num_t PB13
Definition StmTypes.h:253
constexpr hf_pin_num_t PB10
Definition StmTypes.h:250
constexpr hf_pin_num_t PB2
Definition StmTypes.h:242
constexpr hf_pin_num_t PC10
Definition StmTypes.h:267
constexpr hf_pin_num_t PA2
Definition StmTypes.h:225
constexpr hf_pin_num_t PA3
Definition StmTypes.h:226
constexpr hf_pin_num_t PA11
Definition StmTypes.h:234
constexpr hf_pin_num_t PC13
Definition StmTypes.h:270
constexpr hf_pin_num_t PA5
Definition StmTypes.h:228
constexpr hf_pin_num_t PB14
Definition StmTypes.h:254
constexpr hf_pin_num_t PC14
Definition StmTypes.h:271
constexpr hf_pin_num_t PA10
Definition StmTypes.h:233
constexpr hf_pin_num_t PB12
Definition StmTypes.h:252
constexpr hf_pin_num_t PA7
Definition StmTypes.h:230
constexpr hf_pin_num_t PC0
Definition StmTypes.h:257
constexpr hf_pin_num_t PC15
Definition StmTypes.h:272
constexpr hf_pin_num_t PC3
Definition StmTypes.h:260
constexpr hf_pin_num_t PA13
Definition StmTypes.h:236
constexpr hf_pin_num_t PD1
Definition StmTypes.h:275
constexpr hf_pin_num_t PA15
Definition StmTypes.h:238
constexpr hf_pin_num_t PC4
Definition StmTypes.h:261
constexpr hf_pin_num_t PC6
Definition StmTypes.h:263
Definition StmTypes.h:114
static constexpr float kAdcDefaultVrefV
ADC reference voltage (V) — most STM32 boards.
Definition StmTypes.h:133
static constexpr float kTempSensorMaxC
Definition StmTypes.h:175
static constexpr hf_u16_t kMaxGpioPins
Maximum total GPIO pins (ports * pins_per_port)
Definition StmTypes.h:123
static constexpr hf_u8_t kAdcDefaultResolutionBits
Definition StmTypes.h:130
static constexpr hf_u16_t kCanDefaultQueueSize
Definition StmTypes.h:166
static constexpr hf_u32_t kCanMaxBaudRate
CAN limits.
Definition StmTypes.h:164
static constexpr hf_u16_t kI2cMaxTransferBytes
Definition StmTypes.h:140
static constexpr hf_u8_t kAdcMaxChannels
ADC maximum channels (typical STM32F4/H7)
Definition StmTypes.h:126
static constexpr hf_u32_t kI2cFastFreqHz
Definition StmTypes.h:138
static constexpr hf_u32_t kPwmMaxFreqHz
PWM limits.
Definition StmTypes.h:158
static constexpr hf_u32_t kI2cStandardFreqHz
Definition StmTypes.h:137
static constexpr hf_u32_t kLoggerMaxMessageLen
Logger.
Definition StmTypes.h:179
constexpr bool IsHalOk(hf_u32_t raw_status) noexcept
Check if a raw HAL status indicates success.
Definition StmTypes.h:612
constexpr hf_u8_t DecodePinPort(hf_pin_num_t pin) noexcept
Decode hf_pin_num_t → port index.
Definition StmTypes.h:207
static constexpr hf_u32_t kSpiMaxFreqHz
SPI limits.
Definition StmTypes.h:143
static constexpr size_t kNvsDefaultSectorSize
Definition StmTypes.h:171
constexpr hf_pin_num_t EncodePin(GpioPort port, hf_u8_t pin) noexcept
Encode (port, pin) → hf_pin_num_t.
Definition StmTypes.h:202
static constexpr hf_u16_t kSpiMaxTransferBytes
Definition StmTypes.h:145
static constexpr hf_u32_t kUartDefaultBaudRate
Definition StmTypes.h:149
GpioPort
GPIO port index (A=0, B=1, ... K=10)
Definition StmTypes.h:196
static constexpr float kTempSensorTypAccuracyC
Definition StmTypes.h:176
static constexpr hf_u16_t kPwmMaxResolution
Definition StmTypes.h:160
static constexpr hf_u32_t kLoggerDefaultBufferSize
Definition StmTypes.h:180
static constexpr size_t kNvsMaxKeyLength
Flash/NVS limits.
Definition StmTypes.h:169
static constexpr hf_u8_t kMaxGpioPorts
Maximum GPIO ports (A..K = 11 on largest STM32H7)
Definition StmTypes.h:117
static constexpr hf_u8_t kAdcMaxResolutionBits
ADC maximum resolution (bits)
Definition StmTypes.h:129
constexpr HalStatus ToHalStatus(hf_u32_t raw_status) noexcept
Convert raw HAL_StatusTypeDef to our enum.
Definition StmTypes.h:601
constexpr hf_u8_t DecodePinIndex(hf_pin_num_t pin) noexcept
Decode hf_pin_num_t → pin within port (0-15)
Definition StmTypes.h:212
HalStatus
STM32 HAL status codes (mirrors HAL_StatusTypeDef without HAL include)
Definition StmTypes.h:593
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:217
static constexpr hf_u32_t kI2cFastPlusFreqHz
Definition StmTypes.h:139
static constexpr hf_u8_t kPinsPerPort
Maximum pins per GPIO port.
Definition StmTypes.h:120
static constexpr hf_u64_t kTimerMinPeriodUs
Timer limits (in microseconds)
Definition StmTypes.h:153
static constexpr hf_u32_t kI2cMaxFreqHz
I2C limits.
Definition StmTypes.h:136
static constexpr float kTempSensorMinC
Temperature sensor.
Definition StmTypes.h:174
static constexpr hf_u32_t kCanFdMaxBaudRate
Definition StmTypes.h:165
static constexpr hf_u32_t kSpiDefaultFreqHz
Definition StmTypes.h:144
static constexpr hf_u64_t kTimerResolutionUs
Definition StmTypes.h:155
static constexpr hf_u32_t kPwmMinFreqHz
Definition StmTypes.h:159
static constexpr hf_u64_t kTimerMaxPeriodUs
Definition StmTypes.h:154
static constexpr hf_u16_t kUartDefaultBufferSize
Definition StmTypes.h:150
static constexpr hf_u32_t kUartMaxBaudRate
UART limits.
Definition StmTypes.h:148
static constexpr hf_u8_t kPwmMaxChannelsPerTimer
Definition StmTypes.h:161
static constexpr size_t kNvsMaxValueSize
Definition StmTypes.h:170
Definition StmTypes.h:114
Platform-agnostic I2C bus configuration for STM32. Users pass their CubeMX-generated I2C_HandleTypeDe...
Definition StmTypes.h:293
hf_i2c_bus_config_t(I2C_HandleTypeDef *handle, hf_u32_t timeout_ms=1000, bool dma=false) noexcept
Definition StmTypes.h:301
bool use_dma
Use DMA transfers when available.
Definition StmTypes.h:296
I2C_HandleTypeDef * hal_handle
Pointer to CubeMX-generated I2C handle.
Definition StmTypes.h:294
hf_u32_t default_timeout_ms
Default timeout for all operations (ms)
Definition StmTypes.h:295
hf_i2c_bus_config_t() noexcept
Definition StmTypes.h:298
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:310
bool combined_read
Definition StmTypes.h:320
hf_u32_t scl_speed_hz
SCL clock speed (informational)
Definition StmTypes.h:311
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:322
hf_u16_t device_address
7-bit or 10-bit address
Definition StmTypes.h:309
Platform-agnostic SPI bus configuration for STM32.
Definition EspTypes_SPI.h:150
hf_spi_bus_config_t() noexcept
Definition StmTypes.h:348
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:344
hf_u32_t default_timeout_ms
Default timeout (ms)
Definition StmTypes.h:345
bool use_dma
Use DMA transfers when available.
Definition StmTypes.h:346
hf_spi_bus_config_t(SPI_HandleTypeDef *handle, hf_u32_t timeout_ms=1000, bool dma=false) noexcept
Definition StmTypes.h:351
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:375
hf_u8_t inter_data_idle_cycles
SCK idle cycles the master inserts between data frames (H7 SPI CFG2.MIDI, 0–15), applied per-transfer...
Definition StmTypes.h:389
bool cs_active_low
CS active low (default: true)
Definition StmTypes.h:376
GPIO_TypeDef * cs_port
CS GPIO port (e.g., GPIOA)
Definition StmTypes.h:374
hf_spi_mode_t mode
SPI mode (0-3)
Definition EspTypes_SPI.h:212
hf_stm32_spi_mode_t mode
CPOL/CPHA applied per-transfer by StmSpiBus.
Definition StmTypes.h:373
hf_spi_device_config_t() noexcept
Definition StmTypes.h:391
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:511
hf_stm32_adc_resolution_t resolution
ADC resolution.
Definition StmTypes.h:513
ADC_HandleTypeDef * hal_handle
Pointer to CubeMX-generated ADC handle.
Definition StmTypes.h:512
hf_u8_t num_channels
Number of configured channels.
Definition StmTypes.h:515
hf_stm32_adc_config_t() noexcept
Definition StmTypes.h:517
hf_stm32_adc_config_t(ADC_HandleTypeDef *handle, hf_u8_t channels=1, float vref=hf::stm32::kAdcDefaultVrefV) noexcept
Definition StmTypes.h:523
float vref_v
Reference voltage (V)
Definition StmTypes.h:514
CAN configuration for STM32.
Definition StmTypes.h:455
hf_u32_t default_timeout_ms
Default timeout (ms)
Definition StmTypes.h:458
hf_stm32_can_config_t() noexcept
Definition StmTypes.h:462
bool silent_mode
Enable silent/listen-only mode.
Definition StmTypes.h:460
void * hal_handle
CAN_HandleTypeDef* or FDCAN_HandleTypeDef*.
Definition StmTypes.h:457
bool loopback_mode
Enable loopback for testing.
Definition StmTypes.h:459
hf_stm32_can_type_t can_type
CAN peripheral type.
Definition StmTypes.h:456
GPIO configuration for STM32 wrapping CubeMX port/pin.
Definition StmTypes.h:576
hf_stm32_gpio_config_t() noexcept
Definition StmTypes.h:580
GPIO_TypeDef * port
GPIO port pointer (GPIOA, GPIOB, etc.)
Definition StmTypes.h:577
hf_stm32_gpio_config_t(GPIO_TypeDef *gpio_port, hf_u16_t pin) noexcept
Definition StmTypes.h:582
hf_u16_t pin_mask
GPIO pin mask (GPIO_PIN_0..GPIO_PIN_15)
Definition StmTypes.h:578
Flash-based NVS configuration for STM32.
Definition StmTypes.h:537
hf_u32_t flash_size
Total NVS region size (bytes)
Definition StmTypes.h:539
hf_stm32_nvs_config_t() noexcept
Definition StmTypes.h:543
hf_u32_t sector_size
Flash sector/page size (bytes)
Definition StmTypes.h:540
hf_u8_t num_sectors
Number of sectors reserved for NVS.
Definition StmTypes.h:541
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:547
hf_u32_t flash_start_address
Start address of NVS flash region.
Definition StmTypes.h:538
PWM configuration for STM32.
Definition StmTypes.h:480
hf_stm32_pwm_config_t() noexcept
Definition StmTypes.h:486
hf_stm32_pwm_config_t(TIM_HandleTypeDef *handle, hf_u8_t channels=1) noexcept
Definition StmTypes.h:490
hf_u16_t dead_time_ns
Dead-time for complementary pairs (ns)
Definition StmTypes.h:484
hf_u8_t num_channels
Number of active channels (1-4)
Definition StmTypes.h:482
bool complementary_output
Enable complementary outputs (TIMx_CHxN)
Definition StmTypes.h:483
TIM_HandleTypeDef * hal_handle
Pointer to CubeMX-generated TIM handle.
Definition StmTypes.h:481
Periodic timer configuration for STM32.
Definition StmTypes.h:559
TIM_HandleTypeDef * hal_handle
Pointer to CubeMX-generated TIM handle.
Definition StmTypes.h:560
hf_stm32_timer_config_t(TIM_HandleTypeDef *handle) noexcept
Definition StmTypes.h:567
hf_u32_t prescaler
Timer prescaler (0 = auto-compute)
Definition StmTypes.h:561
hf_stm32_timer_config_t() noexcept
Definition StmTypes.h:564
bool use_interrupt
Use timer update interrupt.
Definition StmTypes.h:562
Platform-agnostic UART configuration for STM32.
Definition StmTypes.h:422
bool use_dma_rx
Use DMA for RX.
Definition StmTypes.h:426
hf_u16_t tx_buffer_size
Transmit buffer size.
Definition StmTypes.h:428
hf_stm32_uart_config_t(UART_HandleTypeDef *handle, hf_u32_t timeout_ms=1000) noexcept
Definition StmTypes.h:436
hf_u16_t rx_buffer_size
Receive ring buffer size.
Definition StmTypes.h:427
hf_u32_t default_timeout_ms
Default timeout (ms)
Definition StmTypes.h:424
hf_stm32_uart_config_t() noexcept
Definition StmTypes.h:430
UART_HandleTypeDef * hal_handle
Pointer to CubeMX-generated UART handle.
Definition StmTypes.h:423
bool use_dma_tx
Use DMA for TX.
Definition StmTypes.h:425