|
Как сделать программную задержку на STM32, без использования таймеров |
|
|
|
 |
Ответов
|
Jan 31 2013, 16:21
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 22-01-13
Пользователь №: 75 284

|
Так а на чем же остановиться в поиске функции для програмной задержки?
|
|
|
|
|
Jan 31 2013, 16:43
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(allsettingsdone @ Jan 31 2013, 20:21)  Так а на чем же остановиться в поиске функции для програмной задержки? Да на чем угодно, лишь бы написано было понятно и пользоваться удобно: Код //////////////////////////////////////////////////////////////////////////////// // DELAY /////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// #pragma inline void BspDelayTicks( uint32_t Ticks ) { if (!(SCB_DEMCR & 0x01000000)) { CoreDebug->DEMCR |= 0x01000000; DWT->CYCCNT = 0; DWT->CTRL |= 1 << DWT_CTRL_CYCCNTENA_Pos; // enable the counter }
while( DWT->CYCCNT < Ticks ); }
//////////////////////////////////////////////////////////////////////////////// #pragma inline void BspDelay_uSec( volatile uint32_t uSec ) { while( uSec-- ) { BspDelayTicks( BSP_MCLK_HZ/1000000 ); } }
//////////////////////////////////////////////////////////////////////////////// #pragma inline void BspDelay_mSec( volatile uint32_t mSec ) { while( mSec-- ) { BspDelayTicks( BSP_MCLK_HZ/1000 ); } }
|
|
|
|
|
Jan 31 2013, 19:36
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(Tahoe @ Jan 31 2013, 19:43)  лишь бы написано было понятно Код if (!(SCB_DEMCR & 0x01000000)) { CoreDebug->DEMCR |= 0x01000000; Да вроде как и понятно... но вот глаз режет... Вроде как ... Код CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
|
|
|
|
|
Jan 31 2013, 20:26
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(HHIMERA @ Jan 31 2013, 23:36)  но вот глаз режет... Да ладно, буквоедствовать... Особенно после этой помойки: Цитата(allsettingsdone @ Jan 31 2013, 16:35)  Код #define F_CPU 8000000UL void delay_us(uint32_t us) { for(volatie unsigned int i=0;i<((F_CPU/1000000-3)*us);i++) {} } В показанном коде еще и счетчик сбрасывается, а не разница между текущим и ожидаемым значением вычисляется.  И потом, основная "ценность" приведенного кода совсем в другом, а именно, в сервисе: BspDelay_uSec( xxx ); BspDelay_mSec( xxx );
|
|
|
|
Сообщений в этой теме
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 Цитата(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 AVR Цитата(Firer @ Feb 10 2012, 16:51) Нужно ... Oct 3 2014, 07:00 kolobok0 Цитата(AVR @ Oct 3 2014, 11:00) Код //for... Oct 3 2014, 07:27  Сергей Борщ Цитата(kolobok0 @ Oct 3 2014, 10:27) толь... Oct 3 2014, 12:56 menzoda kolobok0, AVR
Для большей точности и повторяемост... Oct 3 2014, 12:49
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|