Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Нужна функция delay на таймере для stm32f303

Непрочитано 30.10.2017, 11:50  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Всё гораздо проще. Никому эти "задержки на микросекунды" на СТМ32 и на не вперлись!
Если это нужно только для начального инита, то пофигу на чём и как делать, хоть на НОПах, это всё равно один раз. Если это протокол чего-либо, то тогда эти задержки - лютый моветон, ардуиновздроч, не предвещающий ничего хорошего. Правильнее будет юзать таймера. Слава богу их там хватает и они развитые.
Реклама:

Последний раз редактировалось STM32F0; 30.10.2017 в 11:53.
STM32F0 вне форума  
Непрочитано 30.10.2017, 20:53  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Сообщение от MikhailSh Посмотреть сообщение
Правильно я понимаю, что DWT является частью ядра ARM, но в Сortex_M0 (STM32F0) ее нет
Верно. В -M0 нет отладочного таймера.

А про SysTick - вполне себе подходящий вариант. Работает этот таймер на частоте ядра (если не настраивался иначе), так что для получения микросекундных задержек нужно будет модифицировать процедуры ожидания для DWT.
Примерно так:

Код:
// Функцию оставляем
static __inline uint32_t delta(uint32_t t0, uint32_t t1) {
    return (t1 - t0); 
};
void delay_us(uint32_t us) {
      uint32_t t0 =  SysTick-›VAL;
      uint32_t us_count_tic =  us * (SystemCoreClock/1000000);
      while (delta(t0, SysTick-›VAL) ‹ us_count_tic) ;
};
Разве что придётся учитывать, что systick 24 битный. Работать будет, но только в определённых условиях и нужно отполировать.
-Alan- вне форума  
Сказали "Спасибо" -Alan-
MikhailSh (30.10.2017)
Непрочитано 30.10.2017, 22:42  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Господи, это ярчайший пример как делать не нужно, ни в коем случае. Не, ну если устроит точность +- растоптанный лапоть, то тогда точно можно.
Особенно умиляет
Код:
while (delta(t0, SysTick-›VAL) ‹ us_count_tic) ;
Это просто рукалицо!
STM32F0 вне форума  
Непрочитано 30.10.2017, 22:49  
eddy
Почётный гражданин KAZUS.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

STM32F0, да ладно. Я вот тоже нарукожопил когда-то:
Код:
void shutter_wait_block(uint32_t us, void(*fn_ready)()){
	if(!fn_ready) return;
	us *= 72;
	// wait for us*72 cycles
	SCB_DEMCR  |= 0x01000000;
	DWT_CYCCNT  = 0;
	DWT_CONTROL|= 1;
	while(DWT_CYCCNT ‹ us);
	fn_ready();
}
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 30.10.2017, 23:01  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Сообщение от eddy Посмотреть сообщение
да ладно
Да мне тем более "да ладно". Хоть в гамаке дро....те и стоя, в водолазном костюме.
STM32F0 вне форума  
Непрочитано 30.10.2017, 23:13  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Сообщение от STM32F0 Посмотреть сообщение
Хоть в гамаке дро....те и стоя, в водолазном костюме.
Гы! Богатый опыт... Трудно соревноваться...
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 03.01.2018, 21:36  
MDAI
Частый гость
 
Регистрация: 14.05.2014
Адрес: Новосибирск
Сообщений: 11
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
MDAI на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

У меня так сделано!

void SysTick_Handler()
{
if (TimingDelay != 0) { TimingDelay--; }
}


void delay_ms(uint32_t mSecs)
{
SysTick_Config(SystemCoreClock / DELAY_TICK_FREQUENCY_MS); // DELAY_TICK_FREQUENCY_MS
TimingDelay = mSecs+1;
while (TimingDelay != 0);
}


void delay_us(uint32_t uSecs)
{
SysTick_Config(SystemCoreClock / DELAY_TICK_FREQUENCY_US); // DELAY_TICK_FREQUENCY_US
TimingDelay = uSecs;
while (TimingDelay != 0);
}



#include "stm32f30x.h"
#define __DELAY_H__
#ifdef __DELAY_H__

#define DELAY_TICK_FREQUENCY_US 1000000 /* = 1MHZ -› microseconds delay #define DELAY_TICK_FREQUENCY_US 1000000*/
#define DELAY_TICK_FREQUENCY_MS 1000 /* = 1kHZ -› milliseconds delay #define DELAY_TICK_FREQUENCY_MS 1000*/

static __IO uint32_t TimingDelay;

extern void delay_ms(uint32_t nTime);
extern void delay_us(uint32_t nTime);

#endif
MDAI вне форума  
Непрочитано 04.01.2018, 12:15  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Довольно странное решение.
Как понимаю, время Вы не отсчитываете в этом случае.
Кстати, можете добавить в функциях ожидание прерывания - до кучи слегка снизите потребление энергии в ожидании.
Вот так:
PHP код:
void delay_us(uint32_t uSecs) {
    SysTick_Config(SystemCoreClock / DELAY_TICK_FREQUENCY_US); // DELAY_TICK_FREQUENCY_US
    TimingDelay = uSecs;
    while (TimingDelay != 0) {
        __WFI();
    };
} 
-Alan- вне форума  
Непрочитано 04.01.2018, 12:55  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Сообщение от -Alan- Посмотреть сообщение
можете добавить в функциях ожидание прерывания - до кучи слегка снизите потребление энергии в ожидании.
Это просто круто!
Сообщение от -Alan- Посмотреть сообщение
Довольно странное решение.
Конкурс "Тупой и ещё тупее"(с) удался.
Кто ещё предложит дырочку в кристалле просверлить?
STM32F0 вне форума  
Непрочитано 06.02.2018, 23:31  
Vov
Прохожий
 
Регистрация: 06.02.2018
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Vov на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Порекомендуй что то дельное читабельное,
Vov вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Апгрейд и комплектующие для ноутбуков mikesmith Барахолка электронных компонентов 28 17.05.2023 23:25
Книги dosikus Электронная библиотека 11242 29.12.2015 23:45
Нужна помощь попеределке asm в Си для AVR Saadov Микроконтроллеры, АЦП, память и т.д 11 01.03.2009 20:56
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49


Часовой пояс GMT +4, время: 03:12.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.