diff --git a/changelog.md b/changelog.md
index 9c5a5a8..b87965e 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,17 +1,33 @@
## grblHAL changelog
+20251105
+
+Core:
+
+* Added field for programmed timer period to HAL timer struct.
+
+Drivers:
+
+* STM32F4xx: implemented accurate continuous timer mode in timer HAL API. Fix for incorrect clock tree setup for BTT Octopus Board.
+
+Plugins:
+
+* Spindle, stepper: changed to use continuous timer mode, when available, for accurate RPM. Ref. issue [#41](https://github.com/grblHAL/Plugins_spindle/issues/41)
+
+---
+
Build 20251023
Core:
* Workaround for POS (Power on self-test) failure messages(s) not output on "native" USB connect.
-* Fixed handling of NVS buffer allocation, size was not increased as expected when physical NVS is capable of holding more than 2 Kbytes.
+* Fixed handling of NVS buffer allocation, size was not increased as expected when physical NVS is capable of holding more than 2 Kbytes.
This could lead to POS failure or plugins not initializing when a large tool table is configured.
Drivers:
-* Simulator: fix for double free bug, ref. issue [#17](https://github.com/grblHAL/Simulator/issues/17) and block reporting not working.
+* Simulator: fix for double free bug, ref. issue [#17](https://github.com/grblHAL/Simulator/issues/17), and block reporting not working.
Plugins:
diff --git a/hal.h b/hal.h
index 69ba0a0..26bbe71 100644
--- a/hal.h
+++ b/hal.h
@@ -76,7 +76,8 @@ typedef union {
rtc :1,
rtc_set :1,
bltouch_probe :1,
- unassigned :4;
+ modbus_rtu :1, // Modbus RTU stream is enabled.
+ unassigned :3;
};
} driver_cap_t;
@@ -522,6 +523,7 @@ typedef void (*timer_irq_handler_ptr)(void *context);
typedef struct {
void *context; //!< Pointer to data to be passed on to the interrupt handlers
bool single_shot; //!< Set to true if timer is single shot
+ uint32_t period; //!< Current value for period register
timer_irq_handler_ptr timeout_callback; //!< Pointer to main timeout callback
uint32_t irq0; //!< Compare value for compare interrupt 0
timer_irq_handler_ptr irq0_callback; //!< Pointer to compare interrupt 0 callback