реклама на сайте
подробности

 
 
> Как сделать программную задержку на STM32, без использования таймеров
Firer
сообщение Feb 10 2012, 12:51
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 294
Регистрация: 7-01-05
Пользователь №: 1 832



Пожалуйста подскажите.
Пишу в FreeRTOS.
Нужно написать библиотеку работы с LCD.
Там нужна задержка около 1мкс.
Как ее сделать?
Может функцию на ассемблере кто подскажет?
Потому что Keil оптимизирует в ничто вот такой код:
i = 100;
while (i --)
;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AVR
сообщение Oct 3 2014, 07:00
Сообщение #2


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Firer @ Feb 10 2012, 16:51) *
Нужно написать библиотеку работы с LCD.
Там нужна задержка около 1мкс.

Я решаю это так (и на STM32 и на MDR32 и на других):
Код
unsigned int delay_ms(unsigned int ms)
{
    volatile unsigned int i, t = 0;
    //for(i = 0; i < (ms*400); i++) t++; // @ 8 MHz
    for(i = 0; i < (ms*5714); i++) t++;
    return t;
}

unsigned int delay_10us(unsigned int us)
{
    volatile unsigned int i, t = 0;
    //for(i = 0; i < (us*4); i++) t++; // @ 8 MHz
    for(i = 0; i < (us*57); i++) t++;
    return t;
}

Сначала мигаю светодиодом на delay_ms(1000) - периоды были несколько секунд - так вычисляю во сколько раз мне нужно меньше чтобы была как можно ближе к одной секунде. Получил число допустим 5714. Ну а 10 мкс - это в 100 раз меньше - 57.

Знаю какие недостатки этого метода, но лично мне нравится и всё работает стабильно sm.gif


--------------------
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Oct 3 2014, 07:27
Сообщение #3


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(AVR @ Oct 3 2014, 11:00) *
Код
    //for(i = 0; i < (ms*[b]400[/b]); i++) t++; // @ 8 MHz
    for(i = 0; i < (ms*[b]5714[/b]); i++) t++;

    //for(i = 0; i < (us*[b]4[/b]); i++) t++; // @ 8 MHz
    for(i = 0; i < (us*[b]57[/b]); i++) t++;

...мне нравится и всё работает стабильно sm.gif


почему бы и нет?
только маленьчкое замечание: цифры я бы вычислял бы в зависимости от дефайна тактовой. Тем более в STM вроде как они объявлены. Тогда писать новые строчки под разную частоту не понадобиться.
И по закону мерфи - меньше кода, меньше багов...

ЗЫ
И ещё бы добавил ифдеф для делителей меньше 1 или 2... Типа вонинг! не допустимо маленький делитель(умножитель - кому как sm.gif ) для данных функций.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Firer   Как сделать программную задержку на STM32   Feb 10 2012, 12:51
- - Porty   используй специально для этого предназначенное клю...   Feb 10 2012, 13:11
|- - pitt   Цитата(Porty @ Feb 10 2012, 08:11) исполь...   Jan 7 2013, 02:02
|- - HHIMERA   Цитата(pitt @ Jan 7 2013, 06:02) Никакого...   Jan 7 2013, 11:59
|- - pitt   Цитата(HHIMERA @ Jan 7 2013, 06:59) Угу.....   Jan 27 2013, 00:00
|- - HHIMERA   Ну так и не путайте...   Jan 27 2013, 09:33
- - MikeC   Попробуйте вставить __no_operation() в тело цикла.   Feb 10 2012, 13:13
- - ChipKiller   Цитата("Firer")Может функцию на ассембле...   Feb 10 2012, 13:15
- - Firer   C volatile все равно оптимизит. Вот я тут сам наша...   Feb 10 2012, 13:46
|- - demiurg_spb   Цитата(Firer @ Feb 10 2012, 16:46) C vola...   Feb 10 2012, 17:10
|- - scifi   Цитата(Firer @ Feb 10 2012, 17:46) Вопрос...   Feb 10 2012, 17:19
|- - Юрий_СВ   Цитата(Firer @ Feb 10 2012, 16:46) Вопрос...   Feb 10 2012, 17:59
- - ukpyr   Код inline void _delay_loops(U32 loops) { ...   Feb 10 2012, 18:10
- - smk   В простых примерах от Keil есть программные задерж...   Feb 11 2012, 06:34
- - smk   Вот такое еще работает: DelayMS(2);   Feb 11 2012, 07:47
- - KnightIgor   Цитата(Firer @ Feb 10 2012, 13:51) Пожалу...   Feb 11 2012, 11:38
|- - AHTOXA   Цитата(KnightIgor @ Feb 11 2012, 17:38) П...   Feb 11 2012, 16:05
|- - KnightIgor   Счетчик надо проинициализировать (включить): - дол...   Jun 28 2012, 07:42
|- - megajohn   Цитата(KnightIgor @ Jun 28 2012, 11:42) С...   Aug 6 2013, 12:54
- - scifi   Действительно, очень интересно. Спасибо за наводку...   Feb 11 2012, 18:31
- - ReAl   Очень жаль, что остальные счётчики все 8-битные. Н...   Feb 15 2012, 17:02
|- - Altemir   Цитата(ReAl @ Feb 15 2012, 21:02) Очень ж...   Feb 16 2012, 05:55
- - ukpyr   не понятно зачем пляски с бубном, выше приводились...   Jun 28 2012, 09:01
|- - Влад Р.   Цитата(ukpyr @ Jun 28 2012, 12:01) не пон...   Jun 28 2012, 11:54
|- - AHTOXA   Цитата(ukpyr @ Jun 28 2012, 15:01) не пон...   Jun 28 2012, 17:43
|- - Rimsky   Цитата(ukpyr @ Jun 28 2012, 18:01) не пон...   Aug 12 2013, 02:14
|- - VAI   Цитата(Rimsky @ Aug 12 2013, 06:14) Вот к...   Aug 12 2013, 09:03
|- - Rimsky   Цитата(VAI @ Aug 12 2013, 18:03) Постом в...   Aug 12 2013, 14:19
- - Tahoe   С виду все красиво, хотел воспользоваться вышеприв...   Jan 6 2013, 16:07
|- - _Артём_   Цитата(Tahoe @ Jan 6 2013, 18:07) С виду ...   Jan 6 2013, 16:20
|- - Tahoe   Цитата(_Артём_ @ Jan 6 2013, 20:20) А отл...   Jan 6 2013, 16:53
|- - _Артём_   Цитата(Tahoe @ Jan 6 2013, 18:53) Логика ...   Jan 6 2013, 20:26
|- - Tahoe   Цитата(_Артём_ @ Jan 7 2013, 00:26) Но вы...   Jan 6 2013, 20:50
|- - KnightIgor   Цитата(Tahoe @ Jan 6 2013, 21:50) Напряму...   Jan 7 2013, 08:20
|- - _Артём_   Цитата(KnightIgor @ Jan 7 2013, 10:20) Эт...   Jan 7 2013, 10:20
||- - KnightIgor   Цитата(_Артём_ @ Jan 7 2013, 11:20) Не то...   Jan 7 2013, 10:31
|- - Tahoe   Цитата(KnightIgor @ Jan 7 2013, 12:20) Ка...   Jan 7 2013, 12:38
|- - HHIMERA   Цитата(Tahoe @ Jan 7 2013, 15:38) самосто...   Jan 7 2013, 12:46
||- - SSerge   Цитата(HHIMERA @ Jan 7 2013, 19:46) Смотр...   Jan 8 2013, 07:16
||- - HHIMERA   Цитата(SSerge @ Jan 8 2013, 11:16) в М0 и...   Jan 8 2013, 08:52
|- - KnightIgor   Цитата(Tahoe @ Jan 7 2013, 13:38) Итого. ...   Jan 27 2013, 10:23
|- - Tahoe   Цитата(KnightIgor @ Jan 27 2013, 14:23) Н...   Jan 27 2013, 15:05
- - allsettingsdone   Ну а вот я попробывал сделать так: Код#define F_CP...   Jan 31 2013, 12:35
|- - scifi   Цитата(allsettingsdone @ Jan 31 2013, 16...   Jan 31 2013, 13:13
|- - PoReX   Цитата(allsettingsdone @ Jan 31 2013, 16...   Jan 31 2013, 13:25
|- - Tahoe   Цитата(allsettingsdone @ Jan 31 2013, 16...   Jan 31 2013, 14:05
- - allsettingsdone   Так а на чем же остановиться в поиске функции для ...   Jan 31 2013, 16:21
|- - Tahoe   Цитата(allsettingsdone @ Jan 31 2013, 20...   Jan 31 2013, 16:43
|- - HHIMERA   Цитата(Tahoe @ Jan 31 2013, 19:43) лишь б...   Jan 31 2013, 19:36
||- - Tahoe   Цитата(HHIMERA @ Jan 31 2013, 23:36) но в...   Jan 31 2013, 20:26
|- - allsettingsdone   Цитата(Tahoe @ Jan 31 2013, 18:43) Да на ...   Feb 1 2013, 10:08
|- - HHIMERA   Цитата(allsettingsdone @ Feb 1 2013, 14:0...   Feb 1 2013, 10:27
|- - Tahoe   Цитата(allsettingsdone @ Feb 1 2013, 14:0...   Feb 1 2013, 12:04
- - polyname   ЦитатаЧто плохого/хорошего скажите про всё это?раб...   Feb 1 2013, 12:11
|- - Tahoe   Цитата(polyname @ Feb 1 2013, 16:11) а не...   Feb 1 2013, 12:24
|- - demiurg_spb   Кодvoid dwt_init(void) { CoreDebug->D...   Apr 22 2013, 16:02
- - Rash   на новых мк приходится штриховать условие (//) Ко...   Aug 7 2013, 06:52
|- - Kot_dnz   Цитата(Rash @ Aug 7 2013, 09:52) на новых...   Sep 28 2014, 10:45
|- - etoja   Можно ещё выдавать байт в неиспользуемый SPI, UART...   Oct 2 2014, 15:01
- - toweroff   Тут тоже набрел на решение, которое, как мне кажет...   Aug 7 2013, 07:13
|- - megajohn   Цитата(toweroff @ Aug 7 2013, 11:13) Тут ...   Aug 7 2013, 07:40
- - ukpyr   DMA далеко не всегда используется. можно добавить...   Aug 12 2013, 09:30
|- - MrYuran   Цитата(ukpyr @ Aug 12 2013, 12:30) можно ...   Aug 12 2013, 09:38
|- - Сергей Борщ   Цитата(kolobok0 @ Oct 3 2014, 10:27) толь...   Oct 3 2014, 12:56
- - menzoda   kolobok0, AVR Для большей точности и повторяемост...   Oct 3 2014, 12:49


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 14:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01465 секунд с 7
ELECTRONIX ©2004-2016