diff --git a/IrDmaTxStm32.h b/IrDmaTxStm32.h index 7fefd2e..2e71fe2 100644 --- a/IrDmaTxStm32.h +++ b/IrDmaTxStm32.h @@ -209,11 +209,13 @@ private: void onHalf() { ticksOutput += halfLen; fill(&dmaBuf[0], halfLen); + __DSB(); // Fix #8: refill первой половины виден DMA до следующего прохода кольца } void onComplete() { ticksOutput += halfLen; fill(&dmaBuf[halfLen], halfLen); + __DSB(); // Fix #8: refill второй половины виден DMA до следующего прохода кольца } void onError() {} @@ -378,6 +380,7 @@ private: s.lastProgressMs = millis(); s.active = true; + __DSB(); // Fix #8: завершить запись dmaBuf (fill) и BSRR до арминга DMA const uint32_t dst = u32ptr(&s.port->BSRR); if (HAL_DMA_Start_IT(&s.hdma, (uint32_t)(uintptr_t)s.dmaBuf, dst, s.bufLen) != HAL_OK) { s.active = false;