|
Как сделать программную задержку на STM32, без использования таймеров |
|
|
|
 |
Ответов
|
Oct 3 2014, 07:00
|

фанат 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. Знаю какие недостатки этого метода, но лично мне нравится и всё работает стабильно
--------------------
|
|
|
|
|
Oct 3 2014, 07:27
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 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++; ...мне нравится и всё работает стабильно  почему бы и нет? только маленьчкое замечание: цифры я бы вычислял бы в зависимости от дефайна тактовой. Тем более в STM вроде как они объявлены. Тогда писать новые строчки под разную частоту не понадобиться. И по закону мерфи - меньше кода, меньше багов... ЗЫ И ещё бы добавил ифдеф для делителей меньше 1 или 2... Типа вонинг! не допустимо маленький делитель(умножитель - кому как  ) для данных функций.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|