Slavka_online
@Slavka_online
Интересная личность

Как сделать stm32 умную задержку перед исполнением?

Бывают такие случаи, некоторые устройства, требуют делать задержку между разными командами например подождать 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мс
  • Вопрос задан
  • 838 просмотров
Пригласить эксперта
Ответы на вопрос 1
Хм, предделитель 1000, он на 1 МГц всего работает?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы