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

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

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

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

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

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


 
Опции темы
Непрочитано 01.01.2016, 19:33  
zöner
Гражданин KAZUS.RU
 
Регистрация: 16.02.2012
Сообщений: 441
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
zöner на пути к лучшему
По умолчанию STM32F030 одиночный импульс на TIM14.1

Пытаюсь сгенерить одиночный импульс заданной длительности на PB1 (TIM14.1). Не получается - постоянно вкл/выкл. Toggle работает.

настройка:
Код:
	// TIM14 PWM
	RCC-›APB1ENR |= RCC_APB1Periph_TIM14;
	tb.TIM_ClockDivision     = TIM_CKD_DIV1;
	tb.TIM_CounterMode       = TIM_CounterMode_Down;
	tb.TIM_Period            = 0xFFFF;
	tb.TIM_Prescaler         = 0;
	tb.TIM_RepetitionCounter = 1;
	TIM_TimeBaseInit(TIM14, &tb);
	oc.TIM_OCMode            = TIM_OCMode_PWM2;
	oc.TIM_OutputState       = TIM_OutputState_Enable;
	oc.TIM_OutputNState      = TIM_OutputNState_Disable;
	oc.TIM_OCPolarity        = TIM_OCPolarity_High;
	oc.TIM_OCIdleState       = TIM_OCIdleState_Reset;
	oc.TIM_Pulse             = 0;
	TIM_OC1Init(TIM14, &oc);
	TIM14-›CR1 &= ~TIM_CR1_ARPE;
	TIM14-›CR1 |= TIM_CR1_OPM;
	TIM14-›CNT = 0;
	TIM14-›EGR |= TIM_EGR_UG;
	TIM14-›CCMR1 &= ~TIM_CCMR1_OC1PE;
запуск:
Код:
void pulse_start(u32 us){
	if (us){
		tim_dis(TIM14);
		u32 pre = PULSE_PRE;
		while (us › 65535uL){
			us ››= 1;
			pre ‹‹= 1;
		}
		TIM14-›PSC  = pre;
		TIM14-›ARR  = us;
		TIM14-›CCR1 = 0;
		TIM14-›CNT  = us;
		TIM14-›RCR  = 1;
		TIM14-›EGR |= TIM_EGR_UG | TIM_EGR_CC1G;
		tim_en(TIM14);
	}
}
длительность рассчитывает правильно - видно как TIM14.CNT отрабатывает, но выход не реагирует.
Реклама:

Последний раз редактировалось zöner; 01.01.2016 в 19:55.
zöner вне форума  
Непрочитано 01.01.2016, 20:40  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: STM32F030 одиночный импульс на TIM14.1

А он включен?
omercury вне форума  
Непрочитано 01.01.2016, 21:47  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,802
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: STM32F030 одиночный импульс на TIM14.1

Да там изначально непонятно,
Сообщение от zöner Посмотреть сообщение
постоянно вкл/выкл. Toggle работает.
потом

Сообщение от zöner Посмотреть сообщение
TIM14.CNT отрабатывает, но выход не реагирует.
andries5 вне форума  
Непрочитано 01.01.2016, 22:06  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: STM32F030 одиночный импульс на TIM14.1

Сообщение от andries5 Посмотреть сообщение
непонятно
Порт, говорю, настроен?
omercury вне форума  
Непрочитано 01.01.2016, 23:27  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,802
Сказал спасибо: 124
Сказали Спасибо 602 раз(а) в 419 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: STM32F030 одиночный импульс на TIM14.1

Там вообще не видно настройки порта. И непонятно на выходном пине есть движение или нет ничего.
andries5 вне форума  
Непрочитано 02.01.2016, 14:16  
zöner
Гражданин KAZUS.RU
 
Регистрация: 16.02.2012
Сообщений: 441
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
zöner на пути к лучшему
По умолчанию Re: STM32F030 одиночный импульс на TIM14.1

заработал такой код:

настройка:
Код:
	RCC-›APB1ENR |= RCC_APB1Periph_TIM14;
	TIM_TimeBaseStructInit(&tb);
	tb.TIM_ClockDivision     = TIM_CKD_DIV4;
	tb.TIM_CounterMode       = TIM_CounterMode_Up;
	tb.TIM_Period            = 0xFFFF;
	tb.TIM_Prescaler         = 0;
	tb.TIM_RepetitionCounter = 1;
	TIM_TimeBaseInit(TIM14, &tb);
	TIM_OCStructInit(&oc);
	oc.TIM_OCMode            = TIM_OCMode_PWM1;
	oc.TIM_OutputState       = TIM_OutputState_Enable;
	oc.TIM_OutputNState      = TIM_OutputNState_Disable;
	oc.TIM_OCPolarity        = TIM_OCPolarity_Low;
	oc.TIM_OCIdleState       = TIM_OCIdleState_Set;
	TIM_OC1Init(TIM14, &oc);
	TIM14-›CR1              |= TIM_CR1_OPM;
	TIM14-›CCR1              = 1;

рассчет импульса и старт:
Код:
#define PULSE_PRE    12
void pulse_calc(u32 us){
	if (us){
		u32 pre = PULSE_PRE;
		while (us › 65535uL){
			us ››= 1;
			pre ‹‹= 1;
		}
		TIM14-›PSC  = pre;
		TIM14-›ARR  = us;
		TIM14-›EGR |= TIM_EGR_UG;
	}
}

void pulse_start(){
	tim_en(TIM14);
}

inline void tim_en(TIM_TypeDef* t){ t-›CR1 |= TIM_CR1_CEN; }

P.S. в документации как-то забыли про бит TIM14.CR1.OPM - без его установки таймер отказывался работать в режиме одиночного импульса. И еще: таймер считает только вверх, хотя на схеме таймера есть и декремент.

Цитата:
Там вообще не видно настройки порта. И непонятно на выходном пине есть движение или нет ничего
порт настроен как GPIO_AF_0 - работает.

Последний раз редактировалось zöner; 02.01.2016 в 14:26.
zöner вне форума  
Непрочитано 02.01.2016, 14:52  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: STM32F030 одиночный импульс на TIM14.1

Чушь какая-то. В первой мессаге OPM тоже присутствует. Изменилось направление счёта DOWN на UP, хотя бита DIR в TIM14 нет. Такое впечатление, что всё ваялось вслепую, без логанализатора и понимания происходящего.
Сообщение от zöner Посмотреть сообщение
таймер считает только вверх
Таймеру пофигу как считать, если он это умеет. Важнее то, какой результат хотели получить.

=========
А, вспомнил! В STM32 если бита DIR в таймере нет, но попытаться его установить, то таймер отказывается работать. Это проскакивало и здесь и на других форумах.

Последний раз редактировалось STM32F0; 02.01.2016 в 15:06.
STM32F0 вне форума  
Сказали "Спасибо" STM32F0
Zoosman (13.01.2016)
Непрочитано 02.01.2016, 15:21  
zöner
Гражданин KAZUS.RU
 
Регистрация: 16.02.2012
Сообщений: 441
Сказал спасибо: 89
Сказали Спасибо 735 раз(а) в 149 сообщении(ях)
zöner на пути к лучшему
По умолчанию Re: STM32F030 одиночный импульс на TIM14.1

да, ваяю без лог.анализатора, отладчика и прочих наворотов и "благ цивилизации".
а вы, наверно, без этого уже и мигнуть светодиодом не сможете ?
развратились тут, панимаишь...

Цитата:
хотя бита DIR в TIM14 нет.
бита OPM в документации тоже нет, хотя он есть...

Последний раз редактировалось zöner; 02.01.2016 в 15:26.
zöner вне форума  
Непрочитано 02.01.2016, 15:36  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: STM32F030 одиночный импульс на TIM14.1

Сообщение от zöner Посмотреть сообщение
вы, наверно, без этого уже и мигнуть светодиодом не сможете ?
Глупость какая! Я таймерами и ДМА пользуюсь по полной, предпочитаю хардварные решения типа "STM32 - Tips 'N Tricks", там без анализатора уже никак.
STM32F0 вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парапсихология, гомеопатия и паранаука Marc2005 Отвлекитесь, эмбеддеры! 2616 05.09.2014 23:07
Как правильно отследить импульс sdsrem Микроконтроллеры, АЦП, память и т.д 8 17.08.2010 21:28
Импульс из долгого сигнала, помогите madstrac Электроника - это просто 15 16.03.2010 23:36
Как сделать из постоянного сигнала одиночный импульс? Aviasined Электроника - это просто 14 12.11.2008 21:24


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot