Бывают такие случаи, некоторые устройства, требуют делать задержку между разными командами например подождать 300мс, ардуинщики привыкли к простым циклам while(cnt--), но это меня не устраивает, поэтому вопрос как организовать задержку при таймере?
Вот я накидал такой код:
#include "Delay.h"
static uint8_t flag = 1;
void delay(uint32_t _delay){
initTIM6();
TIM6->ARR = _delay;
TIM6->CR1 |= TIM_CR1_CEN;
flag = 1;
while(flag);
}
void TIM6_IRQHandler(void){
flag = 0;
TIM6->CR1 &= ~TIM_CR1_CEN;
TIM6->SR &= ~TIM_SR_UIF;
}
void initTIM6(){
RCC->APB1ENR |= RCC_APB1ENR_TIM6EN;
TIM6->PSC = SystemCoreClock / 1000 - 1;
TIM6->DIER |= TIM_DIER_UIE;
NVIC_EnableIRQ(TIM6_IRQn);
}
в нужном месте просто вызываю delay(300); но почему то задержка происходит на меньшее время, но все остальные функции в этот момент работают, т.е это вроде бы не занимает время ЦП. Но есть еще проблема в том что мне для задержки в 1с нужно вводить не 1000 а 10 000, хотя пределитель стоит так чтоб регистр CNT увеличивать раз в 1000мс