Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

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

Непрочитано 14.05.2014, 12:44  
MDAI
Частый гость
 
Регистрация: 14.05.2014
Адрес: Новосибирск
Сообщений: 11
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
MDAI на пути к лучшему
По умолчанию Нужна функция delay на таймере для stm32f303

Здравствуйте. Нужна функция delay на таймере для stm32f303. Спасибо!
Реклама:
MDAI вне форума  
Непрочитано 14.05.2014, 12:56  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Я делаю так
Код:
/**************************************************  **********************
*																		*
*		   Драйвер базового таймера STM32F4xx (TIM6 & TIM7).			*
*						Универсальный вариант.							*
*							Версия:	 0.1.								*
*																		*
* Файл: drvTimerBase.с	Дата создания: 11.09.2012г.						*
*				  Последние изменения: 11.09.2012г.						*
* Сапего Александр Леонидович. ([email protected])						*
*																		*
*																		*
**************************************************  **********************/

#include "stm32f4xx.h"
#include "stdint.h"
#include "drvTimerBase.h"
#include "main.h"

// Инициализировать используемый таймер
void InitTimerBase(TIM_TypeDef *TIM)
{
  TIM-›CR1 = 1;				// Разрешить работу таймера
  TIM-›PSC = 0;				// На основной частоте
}

// Ждать tact тактов процессора
void DelayTacts(TIM_TypeDef *TIM, uint32_t tact)
{
  int32_t	tmp, wt;
  
  tmp = TIM-›CNT;
  for(;;)
  {
	wt = TIM-›CNT - tmp;
	if(wt‹0) wt += 0x10000;
	if(wt›tact) break;
  }
}


// Ждать mks микросекунд
void DelayMks(TIM_TypeDef *TIM, uint32_t mks)
{
  do
  {
	DelayTacts(TIM,NANOSEC(1000));
  }while(mks--);
}


// Ждать ms	милисекунд
void DelayMs(TIM_TypeDef *TIM, uint32_t ms)
{
  do
  {
	DelayMks(TIM,1000);
  }while(ms--);
}
SasaVitebsk вне форума  
Непрочитано 14.05.2014, 13:51  
MDAI
Частый гость
 
Регистрация: 14.05.2014
Адрес: Новосибирск
Сообщений: 11
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
MDAI на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

SasaVitebsk, А можете выложить полный код? не совсем понятно что такое NANOSEC(1000).
MDAI вне форума  
Непрочитано 14.05.2014, 15:02  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

пикосекундные задержки не забудьте
Easyrider83 вне форума  
Непрочитано 14.05.2014, 19:17  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Код:
// Макросы для задержек
#define NANOSEC(DATA)		((uint32_t)((DATA-20)/TCLK_SMALLWAIT))		// Ориентировочная задержка в нсек
// Ждать s01*0.1 секунд
#define  Delay01(TIM,s01)	DelayMs(TIM,s01*100)
Код:
// Базовый таймер, используемый для микрозадержек
#define	TIM_SMALLWAIT			TIM6
пример
Код:
	ADC_CS_OFF;										// отключить выборку АЦП
	DelayMs(TIM_SMALLWAIT,1);
	ADC_CS_ON;										// Выбрать АЦП
	vSetCh1UniAD7192();
	ADC_CS_OFF;										// отключить выборку АЦП
	DelayTacts(TIM_SMALLWAIT,NANOSEC(130));
	ADC_CS_ON;										// Выбрать АЦП
	vSetCh1UniAD7192();
	ADCPIN_RDY;										// Переключить пин на готовность
	ADCPIN_RDY_INTCLR;								// сбросить флаги
	ADCPIN_RDY_INTEN;								// Разрешить прерывание по RDY
SasaVitebsk вне форума  
Непрочитано 14.05.2014, 19:27  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

И для кого ARM таймер SysTick делала - непонятно.

кста: для подсчета тактов у камня есть спец фича, незачем таймер гробить
Код:
// включение выдачи счетчика тактов процессора
void InitDwt (void)
{
SCB_DEMCR |= 0x01000000;
DWT_CYCCNT = 0;
DWT_CONTROL |= 1;
}
//==================================================  ==============================

// сброс счетчика тактов процессора
void ClearDwt (void)
{
DWT_CYCCNT = 0;
}
//==================================================  ==============================

// считывание счетчика тактов процессора
u32 GetDwt (void)
{
return DWT_CYCCNT;
}
//==================================================  ==============================

Последний раз редактировалось Hives; 14.05.2014 в 19:36.
Hives вне форума  
Сказали "Спасибо" Hives
SasaVitebsk (15.05.2014)
Непрочитано 15.05.2014, 02:18  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Сообщение от Hives Посмотреть сообщение
кста: для подсчета тактов у камня есть спец фича, незачем таймер гробить
Приучайся писать по-человечески!
Код:
void InitDwt (void)
{
    CoreDebug-›DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
    DWT-›CYCCNT       = 0;
    DWT-›CTRL        |= DWT_CTRL_CYCCNTENA_Msk;
}
Что это ещё за хрень SCB_DEMCR, DWT_CYCCNT и DWT_CONTROL ? Чему соответствует?
STM32F0 вне форума  
Непрочитано 15.05.2014, 07:11  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Сообщение от Hives Посмотреть сообщение
И для кого ARM таймер SysTick делала - непонятно.
Лично мне пока не понятно, для кого проектировщики ещё первых 80хх-процессоров придумали прерывания
niXto вне форума  
Непрочитано 15.05.2014, 08:45  
MDAI
Частый гость
 
Регистрация: 14.05.2014
Адрес: Новосибирск
Сообщений: 11
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
MDAI на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Разобрался. Огромное всем спасибо за помощь!
MDAI вне форума  
Непрочитано 15.05.2014, 09:46  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Нужна функция delay на таймере для stm32f303

Прерывания, для того чтобы отмерить задержку ненужны. Таймеров у меня в камне 17 штук. С SysTick, если честно, не разбирался. У меня там FreeRTOS его использует, поэтому не стал ковыряться. Как всегда времени не хватает.
Hives, спасибо за инфу. Буду использовать.
Переписывание драйверов несложная штука.
SasaVitebsk вне форума  
 
Опции темы

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

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, время: 13:05.


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