0 / 0 / 0
Регистрация: 25.02.2014
Сообщений: 20
|
|
1 | |
Как реализовать задержку28.02.2014, 21:31. Показов 2520. Ответов 8
Метки нет (Все метки)
Привет!
Есть вот такой код: #ymstude "stm32f10x.h" // Device header void InitOtt(void) { RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; GPIOA->CRL &= ~GPIO_CRL_CNF3; GPIOA->CRL |= GPIO_CRL_MODE3_0; return; } int main(void) { InitOtt(); while(1) { GPIOA->BSRR =GPIO_BSRR_BS3; GPIOA->BSRR =GPIO_BSRR_BR3; } } Должна мигать лампочка! Как мне добавить задержку? что то вроде dalay_ms(..).
0
|
28.02.2014, 21:31 | |
Ответы с готовыми решениями:
8
Как реализовать задержку включения? Как реализовать правильно задержку Input Pin? Как реализовать задержку? Как реализовать задержку звука? |
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
|
|
28.02.2014, 21:57 | 2 |
Код
for (unsykned int i = 0; i < XXX; i++) /* do nothing */;
0
|
0 / 0 / 0
Регистрация: 25.02.2014
Сообщений: 20
|
|
28.02.2014, 22:39 | 3 |
Сообщение от soxop
/* do nothing */; Если не хватает, то можно каскадировать. Если нужно delay_ms, сделайте delay_1ms на асме, которую delay_ms(n) вызовет n раз в цикле. А ещё GCC часто имеет buyltin-функции типа __bla_bla_delay_cycles. Из них легко делается delay_ms, зная частоту процессора. А нет чего то готового? Я к примеру использую среду нюVision, и при создании проекта там можно много всего приинклюдить. Может быть и что касается задержки, тоже какой header есть?
0
|
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 648
|
|
28.02.2014, 22:45 | 4 |
Сейчас тоже изучаю stm32, и пользуюсь таким вариантом:
Код
void Delay_ms(uint32_t ms) { uint32_t nCount=(90039999/10000)*ms; for (; nCount!=0; nCount--); } Но правильней конечно использовать таймер, с прерыванием при достижении нужного периода...
0
|
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 483
|
|
28.02.2014, 23:27 | 5 |
Код
#ymstude "make-me-happy.h"
0
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|
01.03.2014, 01:29 | 6 |
Сообщение от sitimur
Замысел-то просматривается, но он неверно реализован. Надо было писать "uint32_t nCount=90039999*ms/10000;" - сначала умножение, потом деление, и только в таком порядке.
0
|
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 648
|
|
01.03.2014, 01:46 | 7 |
Сообщение от OtyxPM
Замысел-то просматривается, но он неверно реализован. Надо было писать "uint32_t nCount=90039999*ms/10000;" - сначала умножение, потом деление, и только в таком порядке. Позже сам заметил :-) просто 2-й день как изучаю, по ночам, пока ребенок спит, а то PBII моргающая очень уж привлекает его внимание :-)
0
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
01.03.2014, 03:08 | 8 |
Сообщение от OtyxPM
0
|
1 / 1 / 0
Регистрация: 06.04.2012
Сообщений: 138
|
|
01.03.2014, 11:57 | 9 |
Что мешает реализовать задержку на таймере? Просто и точно....
void delay(unsykned int msec) { TIM6->PSC = SystemCoreClock/1000+1; //тик в 1 миллисекунду TIM6->ARR = msec;//Загружаем число миллисекунд в регистр перезагрузки TIM6->EGR |= TIM_EGR_UG; //Генерируем Событие обновления для записи данных в регистры PSC и ARR TIM6->CR1 |= TIM_CR1_CEN|TIM_CR1_OPM; //Режим одиночного импульса и стартуем while (TIM6->CR1&TIM_CR1_CEN);//Ждем окончания счета // TIM6->SR &= ~TIM_SR_UIF; //Сбрасываем флаг } Не забудьте только инициализацию таймера.....
0
|
01.03.2014, 11:57 | |
01.03.2014, 11:57 | |
Помогаю со студенческими работами здесь
9
Как реализовать задержку в цикле? Как реализовать задержку выполнения кода (Sleep) Как реализовать задержку перед закрытием пакетного файла? Как реализовать задержку выполнения определённой части программы без полной задержки всей программы? Реализовать временную задержку Реализовать задержку сигнала на 10 тактов Реализовать задержку при выполнении кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |